Source code for pynxxas.models.convert.xdi

from typing import Generator

from .. import XdiModel
from .. import NxXasModel

from ..nexus import NxXasMode


[docs] def to_nxxas(xdi_model: XdiModel) -> Generator[NxXasModel, None, None]: has_mu = xdi_model.data.mutrans is not None or xdi_model.data.normtrans is not None has_fluo = ( xdi_model.data.mufluor is not None or xdi_model.data.normfluor is not None ) if not has_mu and not has_fluo: return data = {} data["edge"] = {"name": xdi_model.element.edge} data["element"] = {"symbol": xdi_model.element.symbol} if has_mu and has_fluo: data["NX_class"] = "NXsubentry" else: data["NX_class"] = "NXentry" if xdi_model.facility and xdi_model.facility.name: if xdi_model.beamline and xdi_model.beamline.name: name = { "value": f"{xdi_model.facility.name}-{xdi_model.beamline.name}", "@short_name": xdi_model.beamline.name, } else: name = {"value": xdi_model.facility.name} data["instrument"] = {"name": name} if has_mu: nxxas_mode = NxXasMode(name="transmission") nxxas_model = NxXasModel(mode=nxxas_mode, **data) nxxas_model.energy = xdi_model.data.energy if xdi_model.data.mutrans is not None: nxxas_model.intensity = xdi_model.data.mutrans else: nxxas_model.intensity = xdi_model.data.normtrans yield nxxas_model if has_fluo: nxxas_mode = NxXasMode(name="fy") nxxas_model = NxXasModel(mode=nxxas_mode, **data) nxxas_model.energy = xdi_model.data.energy if xdi_model.data.mufluor is not None: nxxas_model.intensity = xdi_model.data.mufluor else: nxxas_model.intensity = xdi_model.data.normfluor yield nxxas_model
[docs] def from_nxxas(nxxas_model: NxXasModel) -> Generator[XdiModel, None, None]: xdi_model = XdiModel() xdi_model.element.symbol = nxxas_model.element xdi_model.element.edge = nxxas_model.edge xdi_model.data.energy = nxxas_model.energy if nxxas_model.mode.name == "transmission": xdi_model.data.mutrans = nxxas_model.intensity elif nxxas_model.mode.name == "fy": xdi_model.data.mufluor = nxxas_model.intensity yield xdi_model