Source code for nxtomomill.models.blissfluo2nx.general_section
from __future__ import annotations
from pydantic import Field, field_validator, ConfigDict
from collections import OrderedDict
from nxtomomill.models.utils import convert_str_to_tuple, filter_str_def
from ..base.general_section import GeneralSection as _GeneralSectionBase
[docs]class GeneralSection(_GeneralSectionBase):
model_config = ConfigDict(validate_assignment=True, validate_by_name=True)
ewoksfluo_filename: str | None = Field(
default=None,
description="Path to the ewoksfluo-generated h5 file that contains fitted XRF data. If not provided from the configuration file must be provided from the command line.",
)
dimension: int = Field(
default=3,
description="Dimension of the experiment. 2 for 2D XRFCT, 3 for 3D XRFCT. Default is 3.",
)
detector_names: tuple[str, ...] = Field(
default=tuple(),
description="Define a list of (real or virtual) detector names used for the exp (space separated values - no comma). E.g. 'falcon xmap'. If not specified, all detectors are processed.",
)
@field_validator(
"detector_names",
mode="before",
)
@classmethod
def cast_to_tuple(cls, value: str | None) -> tuple[str]:
return convert_str_to_tuple(value) or ()
@field_validator(
"ewoksfluo_filename",
mode="before",
)
@classmethod
def cast_to_str(cls, value: str | None) -> str | None:
return filter_str_def(value)
[docs] def model_dump(self, *args, **kwargs) -> dict:
unordered_result = super().model_dump(*args, **kwargs)
ordered_result = OrderedDict(
{
"ewoksfluo_filename": unordered_result.pop("ewoksfluo_filename"),
"output_file": unordered_result.pop("output_file"),
"detector_names": unordered_result.pop("detector_names"),
"dimension": unordered_result.pop("dimension"),
}
)
ordered_result.update(unordered_result)
return ordered_result