Source code for nxtomomill.converter.hdf5.acquisition.blisstomoconfig

import h5py
from typing import Optional
from silx.io.utils import h5py_read_dataset


[docs]class TomoConfig: """ hold motor used for tomography acquisition according to https://tomo.gitlab-pages.esrf.fr/ebs-tomo/master/modelization.html convension """
[docs] def __init__(self) -> None: self._rotation = None self._sample_u = None self._sample_v = None self._sample_x = None self._sample_y = None self._translation_x = None self._translation_y = None self._translation_z = None self._tomo_detector = None
@property def rotation(self) -> Optional[str]: return self._rotation @rotation.setter def rotation(self, motor: Optional[str]): self._rotation = motor @property def sample_u(self) -> Optional[str]: return self._sample_u @sample_u.setter def sample_u(self, motor: Optional[str]): self._sample_u = motor @property def sample_v(self) -> Optional[str]: return self._sample_v @sample_v.setter def sample_v(self, motor: Optional[str]): self._sample_v = motor @property def sample_x(self) -> Optional[str]: return self._sample_x @sample_x.setter def sample_x(self, motor: Optional[str]): self._sample_x = motor @property def sample_y(self) -> Optional[str]: return self._sample_y @sample_y.setter def sample_y(self, motor: Optional[str]): self._sample_y = motor @property def translation_x(self) -> Optional[str]: return self._translation_x @translation_x.setter def translation_x(self, motor: Optional[str]): self._translation_x = motor @property def translation_y(self) -> Optional[str]: return self._translation_y @translation_y.setter def translation_y(self, motor: Optional[str]): self._translation_y = motor @property def translation_z(self) -> Optional[str]: return self._translation_z @translation_z.setter def translation_z(self, motor: Optional[str]): self._translation_z = motor @property def tomo_detector(self) -> Optional[str]: return self._tomo_detector @tomo_detector.setter def tomo_detector(self, detector_name): self._tomo_detector = detector_name def __str__(self) -> str: return "tomo_config:" + " ; ".join( [ f"rotation={self.rotation}", f"sample_u={self.sample_u}", f"sample_v={self.sample_v}", f"sample_x={self.sample_x}", f"sample_y={self.sample_y}", f"tomo_detector={self.tomo_detector}", f"translation_x={self.translation_x}", f"translation_y={self.translation_y}", f"translation_z={self.translation_z}", ] )
[docs] @staticmethod def from_technique_group(technique_group: h5py.Group): """ get rotation motor and thinks like this from the 'tomoconfig'. This can retrieve one or several dataset name or a single one. In the case of several dataset name we get (real_motor_name, bliss_alias) If the motor moves then this is pretty simple the real motor_name dataset exists. But if the motors does not move during the bliss scan (scalar value) then the real_motor_name dataset doesn't exists and the bliss alias does. This is why we need to keep both and check both during the 'standard process'... """ if not isinstance(technique_group, h5py.Group): raise TypeError( f"instrument_group is expected to be an instance of {h5py.Group}. {type(technique_group)} provided" ) if "tomoconfig" not in technique_group: raise KeyError("could find 'tomoconfig' key") else: tomo_config_group = technique_group.get("tomoconfig") def get_dataset(group, dataset_name, default): if dataset_name not in group: return default else: return h5py_read_dataset(group[dataset_name]) tomo_config = TomoConfig() tomo_config.rotation = get_dataset(tomo_config_group, "rotation", None) tomo_config.sample_u = get_dataset(tomo_config_group, "sample_u", None) tomo_config.sample_v = get_dataset(tomo_config_group, "sample_v", None) tomo_config.sample_x = get_dataset(tomo_config_group, "sample_x", None) tomo_config.sample_y = get_dataset(tomo_config_group, "sample_y", None) tomo_config.tomo_detector = get_dataset(tomo_config_group, "detector", None) # translation x == sample_u tomo_config.translation_x = get_dataset(tomo_config_group, "sample_u", None) tomo_config.translation_y = get_dataset( tomo_config_group, "translation_y", None ) tomo_config.translation_z = get_dataset( tomo_config_group, "translation_z", None ) return tomo_config