Source code for nxtomomill.models.dx2nx
"""data exchange (dx) configuration module"""
from __future__ import annotations
from nxtomo.nxobject.nxdetector import FieldOfView
from .base.general_section import GeneralSection
from pydantic import Field, ConfigDict, field_serializer, field_validator
__all__ = [
"DX2nxModel",
]
[docs]class DX2nxModel(GeneralSection):
"""Configuration file to run a conversion from data-exchange file to NXtomo format"""
model_config: ConfigDict = ConfigDict(validate_assignment=True)
input_file: str = Field(
description="Path to input file at data-file-exchange format to be converted to NXtomo format"
)
copy_data: bool = Field(
default=True,
description="If True frames will be duplicated. Otherwise we will create (relative) link to the input file.",
)
input_entry: str = Field(
default="/",
description="Path to the HDF5 group to convert. For now it looks each file can only contain one dataset. Just to ensure any future compatibility if it evolve with time.",
)
output_entry: str = Field(
"entry0000", description="Path to store the NxTomo created."
)
scan_range: tuple[float, float] = Field(
default=(0.0, 180.0),
description="Tuple of two elements with the minimum scan range. Projections are expected to be taken with equal angular spaces.",
)
pixel_size: tuple[float | None, float | None] = Field(
default=(None, None),
description="Pixel size can be provided - in meter - as (x_pizel_size, y_pixel_size)",
)
field_of_view: FieldOfView | None = Field(
default=None, description="Detector field of view"
)
sample_detector_distance: float | None = Field(
default=1.0, description="sample / detector distance in meter"
)
energy: float | None = Field(default=None, description="Energy in keV")
@field_validator(
"field_of_view",
)
@classmethod
def cast_to_field_of_view(cls, value: str | FieldOfView) -> FieldOfView | None:
if value in (None, ""):
return None
return FieldOfView(value)
@field_serializer(
"field_of_view",
when_used="always",
)
@classmethod
def serialize_field_of_view(cls, field_of_view: FieldOfView | None) -> str:
if field_of_view is None:
return None
else:
return field_of_view.value