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