Source code for pynxxas.models.xdi
"""XAS Data Interchange (XDI) data model_instance
"""
import datetime
from typing import Optional, List, Any, Mapping
import pydantic
from . import units
[docs]
class XdiBaseModel(pydantic.BaseModel, extra="allow"):
pass
[docs]
class XdiFacilityNamespace(XdiBaseModel):
name: Optional[str] = None
energy: Optional[units.PydanticQuantity] = None
current: Optional[units.PydanticQuantity] = None
xray_source: Optional[str] = None
[docs]
class XdiBeamlineNamespace(XdiBaseModel):
name: Optional[str] = None
collimation: Optional[str] = None
focusing: Optional[str] = None
harmonic_rejection: Optional[str] = None
[docs]
class XdiMonoNamespace(XdiBaseModel):
name: Optional[str] = None
d_spacing: Optional[units.PydanticQuantity] = None
# common alternate spellings of XDI arrays
XDI_ARRAY_ALIASES = {
"monitor": "i0",
"i1": "itrans",
"itransmission": "itrans",
"if": "ifluor",
"ifl": "ifluor",
"ifluo": "ifluor",
"ifluorescence": "ifluor",
"iref": "irefer",
"ir": "irefer",
}
[docs]
class XdiDetectorNamespace(XdiBaseModel):
i0: Optional[str] = None
itrans: Optional[str] = None
ifluor: Optional[str] = None
irefer: Optional[str] = None
[docs]
@pydantic.model_validator(mode="before")
@classmethod
def resolve_aliases(cls, data: Any) -> Any:
if not isinstance(data, Mapping):
return data
data = dict(data)
for alias, target in XDI_ARRAY_ALIASES.items():
if alias in data:
data[target] = data[alias]
return data
[docs]
class XdiSampleNamespace(XdiBaseModel):
name: Optional[str] = None
id: Optional[str] = None
stoichiometry: Optional[str] = None
prep: Optional[str] = None
experimenters: Optional[str] = None
temperature: Optional[units.PydanticQuantity] = None
pressure: Optional[units.PydanticQuantity] = None
ph: Optional[units.PydanticQuantity] = None
eh: Optional[units.PydanticQuantity] = None
volume: Optional[units.PydanticQuantity] = None
porosity: Optional[units.PydanticQuantity] = None
density: Optional[units.PydanticQuantity] = None
concentration: Optional[units.PydanticQuantity] = None
resistivity: Optional[units.PydanticQuantity] = None
viscosity: Optional[units.PydanticQuantity] = None
electric_field: Optional[units.PydanticQuantity] = None
magnetic_field: Optional[units.PydanticQuantity] = None
magnetic_moment: Optional[units.PydanticQuantity] = None
crystal_structure: Optional[units.PydanticQuantity] = None
opacity: Optional[units.PydanticQuantity] = None
electrochemical_potential: Optional[units.PydanticQuantity] = None
[docs]
class XdiScanNamespace(XdiBaseModel):
start_time: Optional[datetime.datetime] = None
end_time: Optional[datetime.datetime] = None
edge_energy: Optional[units.PydanticQuantity] = None
[docs]
class XdiElementNamespace(XdiBaseModel):
symbol: Optional[str] = None
edge: Optional[str] = None
reference: Optional[str] = None
ref_edge: Optional[str] = None
[docs]
class XdiData(XdiBaseModel):
energy: Optional[units.PydanticQuantity] = None
angle: Optional[units.PydanticQuantity] = None
i0: Optional[units.PydanticQuantity] = None
itrans: Optional[units.PydanticQuantity] = None
ifluor: Optional[units.PydanticQuantity] = None
irefer: Optional[units.PydanticQuantity] = None
mutrans: Optional[units.PydanticQuantity] = None
mufluor: Optional[units.PydanticQuantity] = None
murefer: Optional[units.PydanticQuantity] = None
normtrans: Optional[units.PydanticQuantity] = None
normfluor: Optional[units.PydanticQuantity] = None
normrefer: Optional[units.PydanticQuantity] = None
k: Optional[units.PydanticQuantity] = None
chi: Optional[units.PydanticQuantity] = None
chi_mag: Optional[units.PydanticQuantity] = None
chi_pha: Optional[units.PydanticQuantity] = None
chi_re: Optional[units.PydanticQuantity] = None
chi_im: Optional[units.PydanticQuantity] = None
r: Optional[units.PydanticQuantity] = None
chir_mag: Optional[units.PydanticQuantity] = None
chir_pha: Optional[units.PydanticQuantity] = None
chir_re: Optional[units.PydanticQuantity] = None
chir_im: Optional[units.PydanticQuantity] = None
[docs]
class XdiModel(XdiBaseModel):
element: XdiElementNamespace = XdiElementNamespace()
scan: XdiScanNamespace = XdiScanNamespace()
mono: XdiMonoNamespace = XdiMonoNamespace()
beamline: XdiBeamlineNamespace = XdiBeamlineNamespace()
facility: XdiFacilityNamespace = XdiFacilityNamespace()
detector: XdiDetectorNamespace = XdiDetectorNamespace()
sample: XdiSampleNamespace = XdiSampleNamespace()
comments: List[str] = list()
data: XdiData = XdiData()