From 20427b33db32ebbccdfb571e1f5e429ecc21836f Mon Sep 17 00:00:00 2001 From: Jan-Lukas Wynen Date: Fri, 17 Oct 2025 10:00:49 +0200 Subject: [PATCH 1/2] Replace Frame0 with Psd Monitor --- .../bifrost/bifrost-reduction.ipynb | 1 + src/ess/bifrost/types.py | 11 +++++++++ src/ess/bifrost/workflow.py | 17 ++++++++------ src/ess/spectroscopy/types.py | 23 +++---------------- tests/bifrost/workflow_test.py | 3 +-- 5 files changed, 26 insertions(+), 29 deletions(-) diff --git a/docs/user-guide/bifrost/bifrost-reduction.ipynb b/docs/user-guide/bifrost/bifrost-reduction.ipynb index da682c6..d804fe0 100644 --- a/docs/user-guide/bifrost/bifrost-reduction.ipynb +++ b/docs/user-guide/bifrost/bifrost-reduction.ipynb @@ -27,6 +27,7 @@ " simulated_elastic_incoherent_with_phonon,\n", " tof_lookup_table_simulation\n", ")\n", + "from ess.bifrost.types import *\n", "from ess.spectroscopy.types import *" ] }, diff --git a/src/ess/bifrost/types.py b/src/ess/bifrost/types.py index 958aae6..8eedc0f 100644 --- a/src/ess/bifrost/types.py +++ b/src/ess/bifrost/types.py @@ -6,11 +6,22 @@ This module supplements :mod:`ess.spectroscopy.types` with BIFROST-specific types. """ +from typing import NewType + import sciline import scipp as sc +from ess.reduce.nexus import types as reduce_t from ess.spectroscopy.types import RunType +SampleRun = reduce_t.SampleRun +VanadiumRun = reduce_t.VanadiumRun + +FrameMonitor1 = reduce_t.FrameMonitor1 +FrameMonitor2 = reduce_t.FrameMonitor2 +FrameMonitor3 = reduce_t.FrameMonitor3 +PsdMonitor = NewType('PsdMonitor', int) + class ArcNumber(sciline.Scope[RunType, sc.Variable], sc.Variable): ... diff --git a/src/ess/bifrost/workflow.py b/src/ess/bifrost/workflow.py index 44a6b78..31e7855 100644 --- a/src/ess/bifrost/workflow.py +++ b/src/ess/bifrost/workflow.py @@ -17,21 +17,23 @@ from ess.spectroscopy.types import ( BeamlineWithSpectrometerCoords, DetectorData, - FrameMonitor0, - FrameMonitor1, - FrameMonitor2, - FrameMonitor3, NeXusData, NeXusDetectorName, NeXusMonitorName, PulsePeriod, - SampleRun, ) from .cutting import providers as cutting_providers from .detector import merge_triplets from .detector import providers as detector_providers from .io import mcstas, nexus +from .types import ( + FrameMonitor1, + FrameMonitor2, + FrameMonitor3, + PsdMonitor, + SampleRun, +) def simulation_default_parameters() -> dict[type, Any]: @@ -40,6 +42,7 @@ def simulation_default_parameters() -> dict[type, Any]: NeXusMonitorName[FrameMonitor1]: '090_frame_1', NeXusMonitorName[FrameMonitor2]: '097_frame_2', NeXusMonitorName[FrameMonitor3]: '110_frame_3', + NeXusMonitorName[PsdMonitor]: '111_psd0_monitor', PulsePeriod: 1.0 / sc.scalar(14.0, unit="Hz"), } @@ -73,7 +76,7 @@ def BifrostSimulationWorkflow( """ workflow = TofWorkflow( run_types=(SampleRun,), - monitor_types=(FrameMonitor0, FrameMonitor1, FrameMonitor2, FrameMonitor3), + monitor_types=(FrameMonitor1, FrameMonitor2, FrameMonitor3), ) for provider in _SIMULATION_PROVIDERS: workflow.insert(provider) @@ -95,7 +98,7 @@ def BifrostWorkflow( """Data reduction workflow for BIFROST.""" workflow = TofWorkflow( run_types=(SampleRun,), - monitor_types=(FrameMonitor0, FrameMonitor1, FrameMonitor2, FrameMonitor3), + monitor_types=(FrameMonitor1, FrameMonitor2, FrameMonitor3, PsdMonitor), ) # TODO change to use non-simulation providers for provider in _SIMULATION_PROVIDERS: diff --git a/src/ess/spectroscopy/types.py b/src/ess/spectroscopy/types.py index f0e4586..014d369 100644 --- a/src/ess/spectroscopy/types.py +++ b/src/ess/spectroscopy/types.py @@ -3,7 +3,7 @@ """Domain types for spectroscopy.""" -from typing import Any, NewType, TypeVar +from typing import Any, NewType import sciline import scipp as sc @@ -20,6 +20,7 @@ GravityVector = reduce_t.GravityVector Filename = reduce_t.Filename MonitorData = reduce_t.MonitorData +MonitorType = reduce_t.MonitorType NeXusClass = reduce_t.NeXusClass NeXusComponentLocationSpec = reduce_t.NeXusComponentLocationSpec NeXusComponent = reduce_t.NeXusComponent @@ -30,27 +31,9 @@ NeXusTransformation = reduce_t.NeXusTransformation Position = reduce_t.Position PreopenNeXusFile = reduce_t.PreopenNeXusFile +RunType = reduce_t.RunType -SampleRun = reduce_t.SampleRun -VanadiumRun = reduce_t.VanadiumRun - -FrameMonitor0 = reduce_t.FrameMonitor0 -FrameMonitor1 = reduce_t.FrameMonitor1 -FrameMonitor2 = reduce_t.FrameMonitor2 -FrameMonitor3 = reduce_t.FrameMonitor3 - -# Type vars - -RunType = TypeVar("RunType", SampleRun, VanadiumRun) -MonitorType = TypeVar( - "MonitorType", - FrameMonitor0, - FrameMonitor1, - FrameMonitor2, - FrameMonitor3, -) - # Time-of-flight types DetectorTofData = time_of_flight.DetectorTofData diff --git a/tests/bifrost/workflow_test.py b/tests/bifrost/workflow_test.py index afd8417..b5fe492 100644 --- a/tests/bifrost/workflow_test.py +++ b/tests/bifrost/workflow_test.py @@ -12,14 +12,13 @@ simulated_elastic_incoherent_with_phonon, tof_lookup_table_simulation, ) +from ess.bifrost.types import FrameMonitor3, SampleRun from ess.spectroscopy.types import ( DetectorData, EnergyData, Filename, - FrameMonitor3, MonitorData, NeXusDetectorName, - SampleRun, TimeOfFlightLookupTable, WavelengthMonitor, ) From dcf2d8af09e27acaa79bc2f825138a6cd1d2ec22 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Wynen Date: Fri, 17 Oct 2025 11:50:33 +0200 Subject: [PATCH 2/2] Fix import --- src/ess/bifrost/single_crystal/workflow.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ess/bifrost/single_crystal/workflow.py b/src/ess/bifrost/single_crystal/workflow.py index bde0c8d..375104b 100644 --- a/src/ess/bifrost/single_crystal/workflow.py +++ b/src/ess/bifrost/single_crystal/workflow.py @@ -4,14 +4,15 @@ import sciline -from ess.reduce import time_of_flight as reduce_time_of_flight -from ess.spectroscopy.indirect.time_of_flight import TofWorkflow -from ess.spectroscopy.types import ( +from ess.bifrost.types import ( FrameMonitor1, FrameMonitor2, FrameMonitor3, + PsdMonitor, SampleRun, ) +from ess.reduce import time_of_flight as reduce_time_of_flight +from ess.spectroscopy.indirect.time_of_flight import TofWorkflow from ..cutting import group_by_rotation from ..io import nexus @@ -32,7 +33,7 @@ def BifrostBraggPeakMonitorWorkflow() -> sciline.Pipeline: workflow = TofWorkflow( run_types=(SampleRun,), - monitor_types=(FrameMonitor1, FrameMonitor2, FrameMonitor3), + monitor_types=(FrameMonitor1, FrameMonitor2, FrameMonitor3, PsdMonitor), ) # Use the vanilla implementation instead of the indirect geometry one: workflow.insert(reduce_time_of_flight.eto_to_tof.detector_time_of_flight_data)