Source code for coseda.nexus.paths
"""NeXus path constants and lookup helpers."""
from typing import Iterable, Optional
NEXUS_MASK_PATH = "/entry/instrument/detector/mask"
LEGACY_MASK_PATH = "/mask"
MASK_PATHS = (NEXUS_MASK_PATH, LEGACY_MASK_PATH)
ENTRY_PATH = "/entry"
ENTRY_DEFINITION_PATH = "/entry/definition"
DATA_GROUP_PATH = "/entry/data"
IMAGE_DATA_PATH = "/entry/data/images"
DETECTOR_GROUP_PATH = "/entry/instrument/detector"
GONIOMETER_GROUP_PATH = "/entry/instrument/goniometer"
GONIOMETER_TRANSFORMATIONS_PATH = "/entry/instrument/goniometer/transformations"
SAMPLE_GROUP_PATH = "/entry/sample"
SAMPLE_TRANSFORMATIONS_PATH = "/entry/sample/transformations"
SAMPLE_TRANSFORM_PATH = "/entry/sample/transformations/sample_pos"
IMAGE_NXDATA_PATH = "/entry/data/image_data"
INDEX_PATH = "/entry/data/index"
IMAGE_KEY_PATH = "/entry/data/image_key"
DETECTOR_PIXEL_SIZE_X_PATH = "/entry/instrument/detector/x_pixel_size"
DETECTOR_PIXEL_SIZE_Y_PATH = "/entry/instrument/detector/y_pixel_size"
BEAM_GROUP_PATH = "/entry/instrument/beam"
BEAM_INCIDENT_ENERGY_PATH = "/entry/instrument/beam/incident_energy"
BEAM_DIRECTION_PATH = "/entry/instrument/beam/beam_direction"
BEAM_DOSE_PATH = "/entry/instrument/beam/dose"
NPEAKS_PATH = "/entry/data/nPeaks"
PEAK_INTENSITY_PATH = "/entry/data/peakTotalIntensity"
PEAK_X_PATH = "/entry/data/peakXPosRaw"
PEAK_Y_PATH = "/entry/data/peakYPosRaw"
PEAKS_NXDATA_PATH = "/entry/data/peaks"
PEAK_COUNTS_NXDATA_PATH = "/entry/data/peak_counts"
[docs]
def normalize_dataset_path(path: str, default: str = LEGACY_MASK_PATH) -> str:
"""Return an absolute HDF5 path for a dataset name."""
if not path:
return default
path = path.strip()
if not path:
return default
return path if path.startswith("/") else f"/{path}"
[docs]
def get_first_existing_path(h5file, paths: Iterable[str]) -> Optional[str]:
"""Return the first existing HDF5 path from `paths`, or None."""
for path in paths:
if path in h5file:
return path
return None
[docs]
def get_mask_dataset(h5file):
"""Return the mask dataset if present (NeXus preferred), else None."""
path = get_first_existing_path(h5file, MASK_PATHS)
return h5file[path] if path else None