Source code for est.core.process.energyroi

"""contains `energy roi` related functions / classes"""

from est.core.types.xasobject import XASObject
from .process import Process


[docs] def xas_energy_roi(xas_obj): """ apply roi on the XASObject.spectra :param xas_obj: object containing the configuration and spectra to process :type: Union[:class:`.XASObject`, dict] :return: spectra dict :rtype: :class:`.XASObject` """ process = EnergyROIProcess(inputs={"xas_obj": xas_obj}) process.run() return process.get_output_value("xas_obj", None)
[docs] class EnergyROIProcess( Process, name="energy roi", input_names=["xas_obj"], optional_input_names=["energy_roi"], output_names=["xas_obj"], ):
[docs] @staticmethod def program_name(): return "energy-roi"
[docs] def definition(self): return "apply a ROI on energy range"
[docs] def run(self): """ :param xas_obj: object containing the configuration and spectra to process :type: Union[:class:`.XASObject`, dict] :return: spectra dict :rtype: :class:`.XASObject` """ xas_obj = self.inputs.xas_obj _xas_obj = self.getXasObject(xas_obj=xas_obj) assert isinstance(_xas_obj, XASObject) energy_roi = self.get_input_value("energy_roi", dict()) self.progress = 0.0 self._apply_roi(_xas_obj, energy_roi.get("minE"), energy_roi.get("maxE")) self.progress = 100.0 self.outputs.xas_obj = _xas_obj
def _apply_roi(self, xas_obj, emin, emax): if emin is None and emax is None: return if emin is None: mask = xas_obj.spectra.energy <= emax elif emax is None: mask = xas_obj.spectra.energy >= emin else: mask = (xas_obj.spectra.energy <= emax) & (xas_obj.spectra.energy >= emin) xas_obj.spectra.energy = xas_obj.spectra.energy[mask] n_s = len(xas_obj.spectra.data.flat) for i_s, spectrum in enumerate(xas_obj.spectra.data.flat): spectrum.energy = spectrum.energy[mask] spectrum.mu = spectrum.mu[mask] for attached_key in ("I0", "I1", "I2", "mu_ref"): if hasattr(spectrum, attached_key): values = getattr(spectrum, attached_key)[mask] setattr(spectrum, attached_key, values) self.progress = i_s / n_s * 100.0