Source code for ewoksxas.tasks.xftf

from ewokscore import Task
from ewokscore.model import BaseInputModel, BaseOutputModel
from larch import Group, xafs
from Orange.data import Table
from pydantic import Field

from ewoksxas.converters import larch, orange


[docs] class Inputs(BaseInputModel): Data: Table parameters: dict = Field(default_factory=dict)
[docs] class Outputs(BaseOutputModel): Data: Table Groups: list[Group]
[docs] class Xftf(Task, input_model=Inputs, output_model=Outputs): # type: ignore """Task to calculate k-space for X-ray absorption spectra using Larch."""
[docs] def run(self): data = self.inputs.Data parameters: dict = self.inputs.parameters converter = orange.Converter.from_table(data) k, chi = converter.features groups = larch.create_groups(x=k, y=chi, mode="k") for group in groups: xafs.xftf(group, group=group, **parameters) attribute_names = ["r", "chir_mag"] attributes = larch.get_attribute_values(groups, attribute_names) x_out = attributes["r"][0, :] y_out = attributes["chir_mag"] converter = orange.Converter().add_features(x_out, y_out) self.outputs.Data = converter.to_table() self.outputs.Groups = groups