def integrate_signal(self, *, spectrum_xdata: DataAndMetadata.DataAndMetadata, fit_intervals: typing.Sequence[BackgroundInterval], signal_interval: BackgroundInterval, **kwargs) -> typing.Dict: # set up initial values subtracted_xdata = Core.calibrated_subtract_spectrum( spectrum_xdata, self.__fit_background(spectrum_xdata, fit_intervals, signal_interval)) assert subtracted_xdata subtracted_data = subtracted_xdata.data assert subtracted_data is not None if spectrum_xdata.is_navigable: return { "integrated": DataAndMetadata.new_data_and_metadata( numpy.trapz(subtracted_data), dimensional_calibrations=spectrum_xdata. navigation_dimensional_calibrations) } else: return { "integrated_value": numpy.trapz(subtracted_data), }
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: typing.List[ BackgroundModel.BackgroundInterval] = list() for fit_interval_graphic in fit_interval_graphics: fit_intervals.append(fit_interval_graphic.interval) fit_minimum = min( [fit_interval[0] for fit_interval in fit_intervals]) signal_interval = fit_minimum, 1.0 signal_xdata = BackgroundModel.get_calibrated_interval_slice( eels_spectrum_xdata, 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
def subtract_background(self, *, spectrum_xdata: DataAndMetadata.DataAndMetadata, fit_intervals: typing.Sequence[BackgroundInterval], **kwargs) -> typing.Dict: # set up initial values fit_minimum = min([fit_interval[0] for fit_interval in fit_intervals]) signal_interval = fit_minimum, 1.0 subtracted_xdata = Core.calibrated_subtract_spectrum( spectrum_xdata, self.__fit_background(spectrum_xdata, fit_intervals, signal_interval)) assert subtracted_xdata return {"subtracted": subtracted_xdata}
def execute(self, eels_spectrum_data_item, zlp_model, **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 model_xdata = None subtracted_xdata = None if zlp_model._data_structure.entity: entity_id = zlp_model._data_structure.entity.entity_type.entity_id for component in Registry.get_components_by_type("zlp-model"): # print(f"{entity_id=} {component.zero_loss_peak_model_id=}") if entity_id == component.zero_loss_peak_model_id: fit_result = component.fit_zero_loss_peak( spectrum_xdata=spectrum_xdata) model_xdata = fit_result["zero_loss_peak_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, model_xdata) if model_xdata is None: model_xdata = DataAndMetadata.new_data_and_metadata( numpy.zeros_like(eels_spectrum_xdata.data), intensity_calibration=eels_spectrum_xdata. intensity_calibration, dimensional_calibrations=eels_spectrum_xdata. dimensional_calibrations) if subtracted_xdata is None: subtracted_xdata = DataAndMetadata.new_data_and_metadata( eels_spectrum_xdata.data, intensity_calibration=eels_spectrum_xdata. intensity_calibration, dimensional_calibrations=eels_spectrum_xdata. dimensional_calibrations) self.__model_xdata = model_xdata self.__subtracted_xdata = subtracted_xdata except Exception as e: import traceback print(traceback.format_exc()) print(e) raise