def execute(self, spectrum_image_data_item: Facade.DataItem, background_model, fit_interval_graphics, signal_interval_graphic): try: assert spectrum_image_data_item.xdata.is_datum_1d assert spectrum_image_data_item.xdata.is_navigable assert spectrum_image_data_item.xdata.datum_dimensional_calibrations[ 0].units == "eV" spectrum_image_xdata = spectrum_image_data_item.xdata # fit_interval_graphics.interval returns normalized coordinates. create calibrated intervals. fit_intervals = list() for fit_interval_graphic in fit_interval_graphics: fit_interval = Calibration.CalibratedInterval( Calibration.Coordinate( Calibration.CoordinateType.NORMALIZED, fit_interval_graphic.interval[0]), Calibration.Coordinate( Calibration.CoordinateType.NORMALIZED, fit_interval_graphic.interval[1])) fit_intervals.append(fit_interval) signal_interval = Calibration.CalibratedInterval( Calibration.Coordinate(Calibration.CoordinateType.NORMALIZED, signal_interval_graphic.interval[0]), Calibration.Coordinate(Calibration.CoordinateType.NORMALIZED, signal_interval_graphic.interval[1])) mapped_xdata = None if background_model._data_structure.entity: entity_id = background_model._data_structure.entity.entity_type.entity_id for component in Registry.get_components_by_type( "background-model"): if entity_id == component.background_model_id: # import time # t0 = time.perf_counter() integrate_result = component.integrate_signal( spectrum_xdata=spectrum_image_xdata, fit_intervals=fit_intervals, signal_interval=signal_interval) # t1 = time.perf_counter() # print(f"{component.background_model_id} {((t1 - t0) * 1000)}ms") mapped_xdata = integrate_result["integrated"] if mapped_xdata is None: mapped_xdata = DataAndMetadata.new_data_and_metadata( numpy.zeros( spectrum_image_xdata.navigation_dimension_shape), dimensional_calibrations=spectrum_image_xdata. navigation_dimensional_calibrations) self.__mapped_xdata = mapped_xdata except Exception as e: import traceback print(traceback.format_exc()) print(e) raise
def __fit_zero_loss_peak(self, spectrum_xdata: DataAndMetadata.DataAndMetadata) -> DataAndMetadata.DataAndMetadata: reference_frame = Calibration.ReferenceFrameAxis(spectrum_xdata.datum_dimensional_calibrations[0], spectrum_xdata.datum_dimension_shape[0]) z = reference_frame.convert_to_pixel(Calibration.Coordinate(Calibration.CoordinateType.CALIBRATED, 0)).int_value calibration = copy.deepcopy(spectrum_xdata.datum_dimensional_calibrations[0]) ys = spectrum_xdata.data if spectrum_xdata.is_navigable: calibrations = list(copy.deepcopy(spectrum_xdata.navigation_dimensional_calibrations)) + [calibration] yss = numpy.reshape(ys, (numpy.product(ys.shape[:-1]),) + (ys.shape[-1],)) fit_data = self._perform_fits(yss, z) data_descriptor = DataAndMetadata.DataDescriptor(False, spectrum_xdata.navigation_dimension_count, spectrum_xdata.datum_dimension_count) model_xdata = DataAndMetadata.new_data_and_metadata( numpy.reshape(fit_data, ys.shape[:-1] + (ys.shape[-1],)), data_descriptor=data_descriptor, dimensional_calibrations=calibrations, intensity_calibration=spectrum_xdata.intensity_calibration) else: poly_data = self._perform_fit(ys, z) model_xdata = DataAndMetadata.new_data_and_metadata(poly_data, dimensional_calibrations=[calibration], intensity_calibration=spectrum_xdata.intensity_calibration) return model_xdata
def execute(self, eels_spectrum_data_item, background_model, fit_interval_graphics, **kwargs) -> None: try: spectrum_xdata = eels_spectrum_data_item.xdata assert spectrum_xdata.is_datum_1d assert spectrum_xdata.datum_dimensional_calibrations[ 0].units == "eV" eels_spectrum_xdata = spectrum_xdata # fit_interval_graphics.interval returns normalized coordinates. create calibrated intervals. fit_intervals = list() for fit_interval_graphic in fit_interval_graphics: fit_interval = Calibration.CalibratedInterval( Calibration.Coordinate( Calibration.CoordinateType.NORMALIZED, fit_interval_graphic.interval[0]), Calibration.Coordinate( Calibration.CoordinateType.NORMALIZED, fit_interval_graphic.interval[1])) fit_intervals.append(fit_interval) fit_minimum = min( [fit_interval.start.value for fit_interval in fit_intervals]) signal_interval = Calibration.CalibratedInterval( Calibration.Coordinate(Calibration.CoordinateType.NORMALIZED, fit_minimum), Calibration.Coordinate(Calibration.CoordinateType.NORMALIZED, 1.0)) reference_frame = Calibration.ReferenceFrameAxis( eels_spectrum_xdata.datum_dimensional_calibrations[0], eels_spectrum_xdata.datum_dimension_shape[0]) signal_xdata = Core.get_calibrated_interval_slice( eels_spectrum_xdata, reference_frame, signal_interval) background_xdata = None subtracted_xdata = None if background_model._data_structure.entity: entity_id = background_model._data_structure.entity.entity_type.entity_id for component in Registry.get_components_by_type( "background-model"): if entity_id == component.background_model_id: fit_result = component.fit_background( spectrum_xdata=spectrum_xdata, fit_intervals=fit_intervals, background_interval=signal_interval) background_xdata = fit_result["background_model"] # use 'or' to avoid doing subtraction if subtracted_spectrum already present subtracted_xdata = fit_result.get( "subtracted_spectrum", None) or Core.calibrated_subtract_spectrum( spectrum_xdata, background_xdata) if background_xdata is None: background_xdata = DataAndMetadata.new_data_and_metadata( numpy.zeros_like(signal_xdata.data), intensity_calibration=signal_xdata.intensity_calibration, dimensional_calibrations=signal_xdata. dimensional_calibrations) if subtracted_xdata is None: subtracted_xdata = DataAndMetadata.new_data_and_metadata( signal_xdata.data, intensity_calibration=signal_xdata.intensity_calibration, dimensional_calibrations=signal_xdata. dimensional_calibrations) self.__background_xdata = background_xdata self.__subtracted_xdata = subtracted_xdata except Exception as e: import traceback print(traceback.format_exc()) print(e) raise