import matplotlib.pyplot as plt
# Is this an appropriate way to handle things?
# https://holgerkrekel.net/2009/03/03/monkeypatching-in-unit-tests-done-right/
# https://docs.pytest.org/en/latest/monkeypatch.html
[docs]class MockPixelSize:
"""Pixel size mock object, has attributes x and y.
Parameters
----------
x : float, optional.
Pixel size in x dimension, in meters.
y : float, optional.
Pixel size in y dimension, in meters.
"""
def __init__(self, x=None, y=None):
if x is None:
self.x = 9.765625e-09 # pixel size in meters
else:
self.x = x
if y is None:
self.y = 9.765625e-09 # pixel size in meters
else:
self.y = y
[docs] def set_pixelsize(self, x, y):
self.x = x
self.y = y
[docs]class MockAdornedImage:
"""AdornedImage mock object, with attributes for data and pixel size.
Attributes
----------
image_data : numpy array
Equivalent to image.data on a real AdornedImage type.
pixelsize_x : float, optional.
Pixel size in x dimension, in meters.
pixelsize_y : float, optional.
Pixel size in y dimension, in meters.
"""
def __init__(self, image, pixelsize_x=None, pixelsize_y=None):
self.data = image
self.metadata = MockMetadata()
if pixelsize_x is None:
self.metadata.binary_result.pixel_size.x = 9.765625e-09 # meters
else:
self.metadata.binary_result.pixel_size.x = pixelsize_x
if pixelsize_y is None:
self.metadata.binary_result.pixel_size.y = 9.765625e-09 # meters
else:
self.metadata.binary_result.pixel_size.y = pixelsize_y
[docs] def set_pixelsize(self, x, y):
self.metadata.binary_result.pixel_size.x = x
self.metadata.binary_result.pixel_size.y = y
[docs] def set_imagedata(self, image):
self.data = image
[docs]class MockBinaryResult:
"""Mock binary_result subclass."""
def __init__(self):
self.pixel_size = MockPixelSize()
[docs]def mock_user_settings():
"""Mock user input settings.
Returns
-------
settings : dict
Settings dictionary has the ksys:
start_lamella : float
Where the lamella starts, as percentage of length from head.'
end_lamella : float
Where the lamella ends, as percentage of length from head.'
roi_width : float
Width of ROI milling regions, in meters.
roi_overlap : float
Overlap of milling rectangles, in meters.
ion_beam_overlap : float
Overlap of the ion beam itself, as percentage.
depth : float
Depth of ion beam milling, in meters.
current_for_milling : float
Ion beam current for milling, in Amperes.
current_for_imaging : float
Ion beam current for imaging, in Amperes.
"""
settings = {}
settings['start_lamella'] = 0.3
settings['end_lamella'] = 0.5
settings['roi_width'] = 100e-6
settings['roi_overlap'] = 10e-6
settings['ion_beam_overlap'] = 0.98
settings['depth'] = 2e-6
settings['current_for_milling'] = 1e-6
settings['buffer_around_lamella'] = 10e-6
return settings