diff --git a/packages/essdiffraction/src/ess/beer/mcstas/load.py b/packages/essdiffraction/src/ess/beer/mcstas/load.py index 68f7e118b..5ab8d918d 100644 --- a/packages/essdiffraction/src/ess/beer/mcstas/load.py +++ b/packages/essdiffraction/src/ess/beer/mcstas/load.py @@ -116,7 +116,19 @@ def load_beer_mcstas( ) -> sc.DataArray: """Load a detector bank from a BEER McStas file.""" if not isinstance(bank, DetectorBank): - raise ValueError('bank must be either DetectorBank.north or DetectorBank.south') + raise ValueError( + 'bank must be ``DetectorBank.north``, ' + '``DetectorBank.south``, or ``DetectorBank.both``' + ) + + if bank == DetectorBank.both: + return sc.concat( + [ + load_beer_mcstas(filename, bank) + for bank in (DetectorBank.south, DetectorBank.north) + ], + dim='pixel_id', + ) filename = Path(filename) with mcstastox.Read(filename.parent, filename.name) as data: diff --git a/packages/essdiffraction/src/ess/beer/types.py b/packages/essdiffraction/src/ess/beer/types.py index 9880011e3..58e566125 100644 --- a/packages/essdiffraction/src/ess/beer/types.py +++ b/packages/essdiffraction/src/ess/beer/types.py @@ -30,6 +30,7 @@ class StreakClusteredData(sciline.Scope[RunType, sc.DataArray], sc.DataArray): class DetectorBank(Enum): north = 'north' south = 'south' + both = 'both' PulseLength = NewType("PulseLength", sc.Variable) diff --git a/packages/essdiffraction/src/ess/beer/workflow.py b/packages/essdiffraction/src/ess/beer/workflow.py index 0bc7edc9a..40eb096b3 100644 --- a/packages/essdiffraction/src/ess/beer/workflow.py +++ b/packages/essdiffraction/src/ess/beer/workflow.py @@ -28,7 +28,7 @@ wavelength_detector, ) from .mcstas import mcstas_providers -from .types import PulseLength +from .types import DetectorBank, PulseLength default_parameters = { CalibrationData: None, @@ -37,6 +37,7 @@ 'south_detector': {'y': 200, 'x': 500}, 'north_detector': {'y': 200, 'x': 500}, }, + DetectorBank: DetectorBank.both, } diff --git a/packages/essdiffraction/tests/beer/mcstas_reduction_test.py b/packages/essdiffraction/tests/beer/mcstas_reduction_test.py index 3b00a8691..6006a6bab 100644 --- a/packages/essdiffraction/tests/beer/mcstas_reduction_test.py +++ b/packages/essdiffraction/tests/beer/mcstas_reduction_test.py @@ -154,6 +154,17 @@ def test_can_load_all_detector_generations(fname, bank): assert da.bins.size().sum().value > 0 +def test_load_both_detector_banks(): + filename = mcstas_few_neutrons_3d_detector_example() + north = load_beer_mcstas(filename, DetectorBank.north) + south = load_beer_mcstas(filename, DetectorBank.south) + both = load_beer_mcstas(filename, DetectorBank.both) + + assert both.bins.size().sum().value == ( + north.bins.size().sum().value + south.bins.size().sum().value + ) + + def test_loaded_mcstas_event_variances_are_squared_weights(): da = load_beer_mcstas(mcstas_few_neutrons_3d_detector_example(), DetectorBank.north) weights = da.bins.constituents['data']