DMSC Integration Testing

Last updated: September 15, 2025 23:36:07

Test: nexusfiles-scipp|odin|odin_read_monitor_data|beam_monitor_3

None

None

None

None

None

None

None

None

None

None

None

None

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/999999_00082824.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

instrument = 'odin', coda_proposal_id = '977695'
pathfinder = . at 0x7ffa8e65b100>

@pytest.fixture(scope="session")
def coda_nexus_file_path(
instrument: str, coda_proposal_id: str, pathfinder: Callable[..., Path]
) -> Path:
> return pathfinder(proposal_id=coda_proposal_id, instrument=instrument)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/setup_fixtures.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/setup_fixtures.py:34: in
"manual": lambda *args, **kwargs: coda.get_latest_nexus_paths(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

instrument = 'ODIN', proposal_id = '977695', n = 1, inspect = 20

def get_latest_nexus_paths(
instrument: str, proposal_id: str | None, n: int = 1, inspect: int = 20
) -> list[Path]:
"""
Get the latest file paths manually by sorting the files in the directory.

Parameters
----------
instrument:
The instrument name.
proposal_id:
SciCat proposal ID for CODA.
If ``None``, the environment variable ``OVERRIDE_RAW_DATA_DIR`` must be set.
n:
The number of files to return.
inspect:
The number of files to inspect before returning.

Returns
-------
:
Paths to the n latest files for the given instrument and proposal.
"""
instrument = NEXUS_INSTRUMENT_NAME[instrument]
path = _coda_raw_data_path(proposal_id)
files_found = []
logging.info(
"Scanning the %d latest files in %s for instrument %s",
inspect,
path,
instrument,
)
recent_files = sorted(path.glob("*.hdf"))[-inspect::][::-1]
logging.info("Recent files: %s", recent_files)
for file in recent_files:
logging.info("Inspecting file: %s", file)
try:
with snx.File(file, "r", locking=False) as f:
instrument_in_file = f["/entry/instrument/name"][()]
if instrument_in_file == instrument:
logging.info(
"File %s matches requested instrument %s. Adding to list. "
"Last modified: %s",
file,
instrument,
datetime.fromtimestamp(
os.stat(file).st_mtime, tz=local_timezone()
),
)
files_found.append(file)
if len(files_found) == n:
logging.info("Found %d files. Returning.", n)
return files_found
else:
logging.info(
"File instrument is %s, but %s was requested. Skipping.",
instrument_in_file,
instrument,
)
except OSError as e:
logging.warning(
"File %s could not be opened. Reason: %s",
file,
e,
)
continue
logging.error("No files found for instrument %s", instrument)
> raise RuntimeError(f"No files found for instrument {instrument}")
E RuntimeError: No files found for instrument ODIN

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/nexusfiles/coda.py:94: RuntimeError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00082355.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00082355.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00082295.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00082169.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00082043.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081911.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081641.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081521.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081401.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081263.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081131.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00081005.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00080879.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00080741.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00080603.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00080453.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00080315.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

instrument = 'odin', coda_proposal_id = '977695'
pathfinder = . at 0x7f8aa6f353a0>

@pytest.fixture(scope="session")
def coda_nexus_file_path(
instrument: str, coda_proposal_id: str, pathfinder: Callable[..., Path]
) -> Path:
> return pathfinder(proposal_id=coda_proposal_id, instrument=instrument)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/setup_fixtures.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/setup_fixtures.py:34: in
"manual": lambda *args, **kwargs: coda.get_latest_nexus_paths(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

instrument = 'ODIN', proposal_id = '977695', n = 1, inspect = 20

def get_latest_nexus_paths(
instrument: str, proposal_id: str | None, n: int = 1, inspect: int = 20
) -> list[Path]:
"""
Get the latest file paths manually by sorting the files in the directory.

Parameters
----------
instrument:
The instrument name.
proposal_id:
SciCat proposal ID for CODA.
If ``None``, the environment variable ``OVERRIDE_RAW_DATA_DIR`` must be set.
n:
The number of files to return.
inspect:
The number of files to inspect before returning.

Returns
-------
:
Paths to the n latest files for the given instrument and proposal.
"""
instrument = NEXUS_INSTRUMENT_NAME[instrument]
path = _coda_raw_data_path(proposal_id)
files_found = []
logging.info(
"Scanning the %d latest files in %s for instrument %s",
inspect,
path,
instrument,
)
recent_files = sorted(path.glob("*.hdf"))[-inspect::][::-1]
logging.info("Recent files: %s", recent_files)
for file in recent_files:
logging.info("Inspecting file: %s", file)
try:
with snx.File(file, "r", locking=False) as f:
instrument_in_file = f["/entry/instrument/name"][()]
if instrument_in_file == instrument:
logging.info(
"File %s matches requested instrument %s. Adding to list. "
"Last modified: %s",
file,
instrument,
datetime.fromtimestamp(
os.stat(file).st_mtime, tz=local_timezone()
),
)
files_found.append(file)
if len(files_found) == n:
logging.info("Found %d files. Returning.", n)
return files_found
else:
logging.info(
"File instrument is %s, but %s was requested. Skipping.",
instrument_in_file,
instrument,
)
except OSError as e:
logging.warning(
"File %s could not be opened. Reason: %s",
file,
e,
)
continue
logging.error("No files found for instrument %s", instrument)
> raise RuntimeError(f"No files found for instrument {instrument}")
E RuntimeError: No files found for instrument ODIN

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/nexusfiles/coda.py:94: RuntimeError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00080039.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079885.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079759.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079605.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079472.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079332.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079199.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00079059.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00078919.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00078779.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00078625.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00078478.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00078338.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00078205.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00077894.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00076949.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/977695/raw/977695_00076949.hdf')
monitor_name = 'beam_monitor_3'

@pytest.mark.parametrize(
"monitor_name",
["beam_monitor_1", "beam_monitor_2", "beam_monitor_3", "beam_monitor_4"],
)
def test_odin_read_monitor_data(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_name: str
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
workflow[NeXusName[FrameMonitor0]] = monitor_name

monitor = workflow.compute(MonitorData[SampleRun, FrameMonitor0])

> assert monitor.bins is None
E AssertionError: assert is None
E + where = \nDimensions: Sizes[event_time_zero:0, ]\nCoordinates:\n* event_time_zero datetime64 [ns] (event_time_zero) []\n* position vector3 [m] () (0, 0, 0)\n* source_position vector3 [m] () (0, 0, -60.5)\nData:\n DataArrayView (event_time_zero) binned data: dim='event', content=DataArray(\n dims=(event: 0),\n data=float32[counts],\n coords={'event_time_offset':int32[ns], 'event_id':int32})\n\n.bins

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:135: AssertionError