Beispiel #1
0
 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),
         }
Beispiel #2
0
 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
Beispiel #3
0
 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}
Beispiel #4
0
 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