Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions nionswift_plugin/nion_eels_analysis/BackgroundSubtraction.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,9 @@ def subtract_background(api: Facade.API_1, window: Facade.DocumentWindow) -> Non
background_model = api._new_api_object(background_model)
source_data_items = api.library._document_model.get_source_data_items(eels_spectrum_data_item._data_item)
if len(source_data_items) == 1:
source_xdata = source_data_items[0].xdata
assert source_xdata
if source_xdata.is_navigable and source_data_items[0].datum_dimension_count == 1:
source_data_metadata = source_data_items[0].data_metadata
assert source_data_metadata
if source_data_metadata.is_navigable and source_data_metadata.datum_dimension_count == 1:
spectrum_image = api._new_api_object(source_data_items[0])
subtracted = api.library.create_data_item_from_data(numpy.zeros(spectrum_image._data_item.xdata.navigation_dimension_shape))
api.library.create_computation(
Expand Down Expand Up @@ -266,9 +266,9 @@ def use_signal_for_map(api: Facade.API_1, window: Facade.DocumentWindow) -> None
background_model = api._new_api_object(background_model)
source_data_items = api.library._document_model.get_source_data_items(eels_spectrum_data_item._data_item)
if len(source_data_items) == 1:
source_xdata = source_data_items[0].xdata
assert source_xdata
if source_xdata.is_navigable and source_data_items[0].datum_dimension_count == 1:
source_data_metadata = source_data_items[0].data_metadata
assert source_data_metadata
if source_data_metadata.is_navigable and source_data_metadata.datum_dimension_count == 1:
spectrum_image = api._new_api_object(source_data_items[0])
map = api.library.create_data_item_from_data(numpy.zeros(spectrum_image._data_item.xdata.navigation_dimension_shape))
signal_interval_graphic = target_interval
Expand Down
34 changes: 22 additions & 12 deletions nionswift_plugin/nion_eels_analysis/ElementalMappingController.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,11 @@ async def pick_new_edge(document_controller: DocumentController.DocumentControll
model_display_item = document_model.get_display_item_for_data_item(model_data_item)
assert model_display_item

model_data_metadata = model_data_item.data_metadata
assert model_data_metadata

pick_region = Graphics.RectangleGraphic()
pick_region.size = Geometry.FloatSize(min(1 / 16, 16 / model_data_item.dimensional_shape[0]), min(1 / 16, 16 / model_data_item.dimensional_shape[1]))
pick_region.size = Geometry.FloatSize(min(1 / 16, 16 / model_data_metadata.dimensional_shape[0]), min(1 / 16, 16 / model_data_metadata.dimensional_shape[1]))
pick_region.label = "{} {}".format(_("Pick"), str(edge.electron_shell))
model_display_item.add_graphic(pick_region)

Expand Down Expand Up @@ -482,12 +485,14 @@ def explorer_interval(self) -> typing.Optional[typing.Tuple[float, float]]:

def __is_model(self, data_item: typing.Optional[DataItem.DataItem]) -> bool:
if isinstance(data_item, DataItem.DataItem):
return data_item.is_data_3d
data_metadata = data_item.data_metadata
return data_metadata is not None and data_metadata.is_data_3d
return False

def __is_explorer(self, document_model: DocumentModel.DocumentModel, data_item: typing.Optional[DataItem.DataItem]) -> bool:
if isinstance(data_item, DataItem.DataItem):
if data_item.is_data_1d:
data_metadata = data_item.data_metadata
if data_metadata and data_metadata.is_data_1d:
for display_item in document_model.get_display_items_for_data_item(data_item):
for graphic in display_item.graphics:
if isinstance(graphic, Graphics.IntervalGraphic) and graphic.graphic_id == "explore":
Expand All @@ -496,8 +501,9 @@ def __is_explorer(self, document_model: DocumentModel.DocumentModel, data_item:

def __is_calibrated_map(self, data_item: DataItem.DataItem) -> bool:
if isinstance(data_item, DataItem.DataItem):
if data_item.is_data_2d and data_item.intensity_calibration:
return data_item.title.startswith("Map") and data_item.intensity_calibration.units.startswith("~")
data_metadata = data_item.data_metadata
if data_metadata and data_metadata.is_data_2d and data_metadata.intensity_calibration:
return data_item.title.startswith("Map") and data_metadata.intensity_calibration.units.startswith("~")
return False

async def explore_edges(self, document_controller: DocumentController.DocumentController) -> None:
Expand All @@ -507,8 +513,10 @@ async def explore_edges(self, document_controller: DocumentController.DocumentCo
model_display_item = document_model.get_display_item_for_data_item(model_data_item)
assert model_display_item
assert model_display_item.data_item
model_data_metadata = model_data_item.data_metadata
assert model_data_metadata
pick_region = Graphics.RectangleGraphic()
pick_region.size = Geometry.FloatSize(min(1 / 16, 16 / model_data_item.dimensional_shape[0]), min(1 / 16, 16 / model_data_item.dimensional_shape[1]))
pick_region.size = Geometry.FloatSize(min(1 / 16, 16 / model_data_metadata.dimensional_shape[0]), min(1 / 16, 16 / model_data_metadata.dimensional_shape[1]))
pick_region.label = _("Explore")
model_display_item.add_graphic(pick_region)
pick_data_item = document_model.get_pick_region_new(model_display_item, model_display_item.data_item, pick_region=pick_region)
Expand Down Expand Up @@ -553,12 +561,13 @@ def normalized_interval(interval: tuple[float, float]) -> tuple[float, float]:
self.__explorer_interval_changed(data_item, (s, e))

def __connect_explorer_interval(self, document_model: DocumentModel.DocumentModel, data_item: DataItem.DataItem) -> None:
if data_item.is_data_1d:
data_metadata = data_item.data_metadata
if data_metadata and data_metadata.is_data_1d:
for display_item in document_model.get_display_items_for_data_item(data_item):
for graphic in display_item.graphics:
if isinstance(graphic, Graphics.IntervalGraphic) and graphic.graphic_id == "explore":
dimensional_shape = data_item.dimensional_shape
dimensional_calibrations = data_item.dimensional_calibrations
dimensional_shape = data_metadata.dimensional_shape
dimensional_calibrations = data_metadata.dimensional_calibrations
self.__explorer_property_changed_listeners[data_item.uuid] = graphic.property_changed_event.listen(functools.partial(self.graphic_property_changed, graphic, data_item, dimensional_shape, dimensional_calibrations))
self.graphic_property_changed(graphic, data_item, dimensional_shape, dimensional_calibrations, "interval")

Expand All @@ -570,12 +579,13 @@ def __disconnect_explorer_interval(self, data_item: DataItem.DataItem) -> None:

def add_edge(self, electron_shell: PeriodicTable.ElectronShell) -> typing.Optional[ElementalMappingEdge]:
model_data_item = self.__model_data_item
if model_data_item:
model_data_metadata = model_data_item.data_metadata if model_data_item else None
if model_data_item and model_data_metadata:
binding_energy_eV = PeriodicTable.PeriodicTable().nominal_binding_energy_ev(electron_shell)
signal_interval_eV = binding_energy_eV, binding_energy_eV * 1.10
fit_interval_eV = binding_energy_eV * 0.93, binding_energy_eV * 0.98
dimensional_shape = model_data_item.dimensional_shape
dimensional_calibrations = model_data_item.dimensional_calibrations
dimensional_shape = model_data_metadata.dimensional_shape
dimensional_calibrations = model_data_metadata.dimensional_calibrations
if dimensional_shape is not None and dimensional_calibrations is not None and len(dimensional_calibrations) > 0:
calibration = dimensional_calibrations[-1]
if calibration.units == "eV":
Expand Down
22 changes: 11 additions & 11 deletions nionswift_plugin/nion_eels_analysis/Thermometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@ def __init__(self, computation: Facade.Computation, **kwargs: typing.Any) -> Non
self.__fit: typing.Optional[DataArrayType] = None

def execute(self, near_data_item: DataItem.DataItem, far_data_item: DataItem.DataItem, fit_interval_graphic: Graphics.IntervalGraphic, **kwargs: typing.Any) -> None:
assert near_data_item.xdata
assert near_data_item.xdata.is_data_1d
assert far_data_item.xdata
assert far_data_item.xdata.is_data_1d
# Only allow data of same shape for now. A future version could crop to the smaller size of the two.
assert near_data_item.data is not None and far_data_item.data is not None and len(near_data_item.data) == len(far_data_item.data)
near_xdata = near_data_item.xdata
far_xdata = far_data_item.xdata
assert near_xdata
assert near_xdata.is_data_1d
assert far_xdata
assert far_xdata.is_data_1d
# Only allow data of same shape for now. A future version could crop to the smaller size of the two.
assert len(near_xdata.data) == len(far_xdata.data)
# For now only allow near and far having the same calibration. A future version could allow different
# offsets and shift the data accordingly
assert near_xdata.dimensional_calibrations == far_xdata.dimensional_calibrations
Expand Down Expand Up @@ -111,13 +111,13 @@ def measure_temperature(api: Facade.API_1, window: Facade.DocumentWindow, *, dis
assert selected_display_items[1][0] is not None, error_msg
assert selected_display_items[0][0].data_item is not None, error_msg
assert selected_display_items[1][0].data_item is not None, error_msg
assert selected_display_items[0][0].data_item.data is not None, error_msg
assert selected_display_items[1][0].data_item.data is not None, error_msg
assert selected_display_items[0][0].data_item.is_data_1d, error_msg
assert selected_display_items[1][0].data_item.is_data_1d, error_msg
assert selected_display_items[0][0].data_item.xdata, error_msg
assert selected_display_items[1][0].data_item.xdata, error_msg
assert selected_display_items[0][0].data_item.xdata.is_data_1d, error_msg
assert selected_display_items[1][0].data_item.xdata.is_data_1d, error_msg

# First find out which data item is near and which is far. Far should have the higher maximum.
if np.amax(selected_display_items[0][0].data_item.data) > np.amax(selected_display_items[1][0].data_item.data):
if np.amax(selected_display_items[0][0].data_item.xdata.data) > np.amax(selected_display_items[1][0].data_item.xdata.data):
far_data_item = selected_display_items[0][0].data_item
near_data_item = selected_display_items[1][0].data_item
else:
Expand Down