Source code for est.core.process.plotspectrumdata
from typing import Dict
from typing import Optional
from typing import Sequence
from ewokscore import Task
[docs]
class PlotSpectrumData(
Task,
input_names=["xas_obj"],
optional_input_names=["plot_names"],
output_names=["plot_data"],
):
[docs]
def run(self):
self.outputs.plot_data = [
_process_plotspectrumdata(spectrum, plot_names=self.inputs.plot_names)
for spectrum in self.inputs.xas_obj.spectra.data.flat
]
def _process_plotspectrumdata(
spectrum, plot_names: Optional[Sequence] = None
) -> Dict[str, dict]:
kweight = spectrum.larch_dict.xftf_k_weight
plot_data = dict()
if not plot_names:
plot_names = ("flatten_mu", "chi_weighted_k", "ft_mag", "noise_savgol")
for pname in plot_names:
plot_data[pname] = _get_plotspectrumdata(spectrum, pname, kweight=kweight)
return plot_data
def _get_plotspectrumdata(spectrum, pname, kweight: Optional[int] = None):
ypath = _PLOTNAME_TO_YPATH.get(pname, pname)
xpath = spectrum.get_xpath(ypath)
x = spectrum.get_value(xpath)
y = spectrum.get_value(ypath)
xlabel, ylabel = spectrum.get_xy_labels(ypath, kweight=kweight)
info = dict()
for apath in _YPATH_TO_INFO_APATHS.get(ypath, list()):
value = spectrum.get_value(apath)
key = _APATH_TO_INFO_KEY.get(apath, apath)
info[key] = value
hlines = [
spectrum.get_value(apath) for apath in _YPATH_TO_HLINE_APATHS.get(ypath, list())
]
vlines = [
spectrum.get_value(apath) for apath in _YPATH_TO_VLINE_APATHS.get(ypath, list())
]
return {
"name": pname,
"x": x,
"y": y,
"xlabel": xlabel,
"ylabel": ylabel,
"info": info,
"hlines": hlines,
"vlines": vlines,
}
_PLOTNAME_TO_YPATH = {
"ft_mag": "ft.intensity",
}
_YPATH_TO_INFO_APATHS = {
"normalized_mu": ["e0", "edge_step"],
"flatten_mu": ["e0", "edge_step"],
"noise_savgol": ["raw_noise_savgol", "norm_noise_savgol", "edge_step", "e0"],
}
_APATH_TO_INFO_KEY = {
"raw_noise_savgol": "raw_noise",
"norm_noise_savgol": "norm_noise",
}
_YPATH_TO_HLINE_APATHS = {
"noise_savgol": ["raw_noise_savgol"],
}
_YPATH_TO_VLINE_APATHS = {
"noise_savgol": ["noise_e_min", "noise_e_max"],
}