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 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