From 86e337c17cbac59edef693efc839d52d29fd01d5 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Wynen Date: Tue, 3 Mar 2026 16:22:18 +0100 Subject: [PATCH 1/2] Add measurement metadata to CIF --- src/ess/dream/io/cif.py | 7 +++++++ src/ess/powder/types.py | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/ess/dream/io/cif.py b/src/ess/dream/io/cif.py index 050735a6..2bc4ebd0 100644 --- a/src/ess/dream/io/cif.py +++ b/src/ess/dream/io/cif.py @@ -12,6 +12,7 @@ CIFAuthors, EmptyCanSubtractedIntensityTof, IntensityTof, + Measurement, ReducedEmptyCanSubtractedTofCIF, ReducedTofCIF, ReducerSoftware, @@ -26,6 +27,7 @@ def prepare_reduced_tof_cif( authors: CIFAuthors, beamline: Beamline[SampleRun], source: Source[SampleRun], + measurement: Measurement[SampleRun], reducers: ReducerSoftware, calibration: OutputCalibrationData, ) -> ReducedTofCIF: @@ -61,6 +63,7 @@ def prepare_reduced_tof_cif( authors=authors, beamline=beamline, source=source, + measurement=measurement, reducers=reducers, calibration=calibration, ) @@ -72,6 +75,7 @@ def prepare_reduced_empty_can_subtracted_tof_cif( authors: CIFAuthors, beamline: Beamline[SampleRun], source: Source[SampleRun], + measurement: Measurement[SampleRun], reducers: ReducerSoftware, calibration: OutputCalibrationData, ) -> ReducedEmptyCanSubtractedTofCIF: @@ -107,6 +111,7 @@ def prepare_reduced_empty_can_subtracted_tof_cif( authors=authors, beamline=beamline, source=source, + measurement=measurement, reducers=reducers, calibration=calibration, ) @@ -118,12 +123,14 @@ def _prepare_reduced_tof_cif_impl( authors: CIFAuthors, beamline: Beamline[SampleRun], source: Source[SampleRun], + measurement: Measurement[SampleRun], reducers: ReducerSoftware, calibration: OutputCalibrationData, ) -> ReducedTofCIF: to_save = _prepare_data(da) return ReducedTofCIF( cif.CIF('reduced_tof') + .with_measurement(measurement) .with_reducers(*(reducer.compact_repr for reducer in reducers)) .with_authors(*authors) .with_beamline(beamline, source) diff --git a/src/ess/powder/types.py b/src/ess/powder/types.py index 5d34ffdd..aeace7df 100644 --- a/src/ess/powder/types.py +++ b/src/ess/powder/types.py @@ -215,6 +215,9 @@ class RawDataAndMetadata(sciline.Scope[RunType, sc.DataGroup], sc.DataGroup): Beamline = reduce_t.Beamline """Beamline metadata.""" +Measurement = reduce_t.Measurement +"""Measurement metadata.""" + ReducerSoftware = NewType('ReducerSoftware', list[Software]) """Pieces of software used to reduce the data.""" From db53d6b26dde57e03dbf26f370f02e4b7f5c60af Mon Sep 17 00:00:00 2001 From: Jan-Lukas Wynen Date: Wed, 4 Mar 2026 10:06:36 +0100 Subject: [PATCH 2/2] Set Measurement metadata in geant4 pipeline --- src/ess/dream/workflows.py | 5 +++++ tests/dream/io/cif_test.py | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ess/dream/workflows.py b/src/ess/dream/workflows.py index b8742f05..b7a984fe 100644 --- a/src/ess/dream/workflows.py +++ b/src/ess/dream/workflows.py @@ -19,6 +19,7 @@ EmptyCanRun, KeepEvents, LookupTableRelativeErrorThreshold, + Measurement, PixelMaskFilename, Position, ReducerSoftware, @@ -211,6 +212,10 @@ def DreamGeant4Workflow(*, run_norm: RunNormalization, **kwargs) -> sciline.Pipe AccumulatedProtonCharge[EmptyCanRun]: charge, CaveMonitorPosition: sc.vector([0.0, 0.0, -4220.0], unit='mm'), LookupTableRelativeErrorThreshold: 0.02, + # The GEANT4 files do not encode measurement information + Measurement[SampleRun]: Measurement[SampleRun](title=None), + Measurement[VanadiumRun]: Measurement[VanadiumRun](title=None), + Measurement[EmptyCanRun]: Measurement[EmptyCanRun](title=None), } for key, value in additional_parameters.items(): wf[key] = value diff --git a/tests/dream/io/cif_test.py b/tests/dream/io/cif_test.py index 2a58b923..69420668 100644 --- a/tests/dream/io/cif_test.py +++ b/tests/dream/io/cif_test.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2023 Scipp contributors (https://github.com/scipp) - +import datetime import io import pytest @@ -14,6 +14,7 @@ Beamline, CIFAuthors, IntensityTof, + Measurement, ReducerSoftware, Software, ) @@ -60,6 +61,10 @@ def test_save_reduced_tof(ioftof: IntensityTof, cal: OutputCalibrationData) -> N site="ESS", ), source=ESS_SOURCE, + measurement=Measurement( + title="Test measurement", + start_time=datetime.datetime(2026, 1, 2, 14, 58, 2, tzinfo=datetime.UTC), + ), reducers=ReducerSoftware( [ Software.from_package_metadata('ess.diffraction'), @@ -78,6 +83,8 @@ def test_save_reduced_tof(ioftof: IntensityTof, cal: OutputCalibrationData) -> N assert f"ess.dream {__version__}" in result assert f"ess.powder {__version__}" in result assert '_diffrn_source.beamline DREAM' in result + assert "_sc_meas.title 'Test measurement'" in result + assert "_pd_meas.datetime_initiated 2026-01-02T14:58:02" in result assert 'ZERO 0 0.2' in result assert 'DIFC 1 1.2' in result assert 'DIFA 2 -1.4' in result