essreduce 25.11.0__tar.gz → 25.11.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. {essreduce-25.11.0 → essreduce-25.11.1}/PKG-INFO +1 -1
  2. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/base.txt +1 -1
  3. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/basetest.txt +1 -1
  4. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/nexus/workflow.py +57 -11
  5. {essreduce-25.11.0 → essreduce-25.11.1}/src/essreduce.egg-info/PKG-INFO +1 -1
  6. {essreduce-25.11.0 → essreduce-25.11.1}/tests/conftest.py +2 -2
  7. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/workflow_test.py +26 -0
  8. {essreduce-25.11.0 → essreduce-25.11.1}/.copier-answers.ess.yml +0 -0
  9. {essreduce-25.11.0 → essreduce-25.11.1}/.copier-answers.yml +0 -0
  10. {essreduce-25.11.0 → essreduce-25.11.1}/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -0
  11. {essreduce-25.11.0 → essreduce-25.11.1}/.github/dependabot.yml +0 -0
  12. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/ci.yml +0 -0
  13. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/docs.yml +0 -0
  14. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/nightly_at_main.yml +0 -0
  15. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/nightly_at_main_lower_bound.yml +0 -0
  16. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/nightly_at_release.yml +0 -0
  17. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/python-version-ci +0 -0
  18. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/release.yml +0 -0
  19. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/test.yml +0 -0
  20. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/unpinned.yml +0 -0
  21. {essreduce-25.11.0 → essreduce-25.11.1}/.github/workflows/weekly_windows_macos.yml +0 -0
  22. {essreduce-25.11.0 → essreduce-25.11.1}/.gitignore +0 -0
  23. {essreduce-25.11.0 → essreduce-25.11.1}/.pre-commit-config.yaml +0 -0
  24. {essreduce-25.11.0 → essreduce-25.11.1}/.python-version +0 -0
  25. {essreduce-25.11.0 → essreduce-25.11.1}/CODE_OF_CONDUCT.md +0 -0
  26. {essreduce-25.11.0 → essreduce-25.11.1}/CONTRIBUTING.md +0 -0
  27. {essreduce-25.11.0 → essreduce-25.11.1}/LICENSE +0 -0
  28. {essreduce-25.11.0 → essreduce-25.11.1}/MANIFEST.in +0 -0
  29. {essreduce-25.11.0 → essreduce-25.11.1}/README.md +0 -0
  30. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_static/anaconda-icon.js +0 -0
  31. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_static/favicon.svg +0 -0
  32. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_static/logo-dark.svg +0 -0
  33. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_static/logo.svg +0 -0
  34. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_templates/class-template.rst +0 -0
  35. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_templates/doc_version.html +0 -0
  36. {essreduce-25.11.0 → essreduce-25.11.1}/docs/_templates/module-template.rst +0 -0
  37. {essreduce-25.11.0 → essreduce-25.11.1}/docs/about/index.md +0 -0
  38. {essreduce-25.11.0 → essreduce-25.11.1}/docs/api-reference/index.md +0 -0
  39. {essreduce-25.11.0 → essreduce-25.11.1}/docs/conf.py +0 -0
  40. {essreduce-25.11.0 → essreduce-25.11.1}/docs/developer/coding-conventions.md +0 -0
  41. {essreduce-25.11.0 → essreduce-25.11.1}/docs/developer/dependency-management.md +0 -0
  42. {essreduce-25.11.0 → essreduce-25.11.1}/docs/developer/getting-started.md +0 -0
  43. {essreduce-25.11.0 → essreduce-25.11.1}/docs/developer/gui.ipynb +0 -0
  44. {essreduce-25.11.0 → essreduce-25.11.1}/docs/developer/index.md +0 -0
  45. {essreduce-25.11.0 → essreduce-25.11.1}/docs/index.md +0 -0
  46. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/index.md +0 -0
  47. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/installation.md +0 -0
  48. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/reduction-workflow-guidelines.md +0 -0
  49. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/tof/dream.ipynb +0 -0
  50. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/tof/frame-unwrapping.ipynb +0 -0
  51. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/tof/index.md +0 -0
  52. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/tof/wfm.ipynb +0 -0
  53. {essreduce-25.11.0 → essreduce-25.11.1}/docs/user-guide/widget.md +0 -0
  54. {essreduce-25.11.0 → essreduce-25.11.1}/pyproject.toml +0 -0
  55. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/base.in +0 -0
  56. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/basetest.in +0 -0
  57. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/ci.in +0 -0
  58. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/ci.txt +0 -0
  59. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/dev.in +0 -0
  60. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/dev.txt +0 -0
  61. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/docs.in +0 -0
  62. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/docs.txt +0 -0
  63. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/make_base.py +0 -0
  64. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/mypy.in +0 -0
  65. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/mypy.txt +0 -0
  66. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/nightly.in +0 -0
  67. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/nightly.txt +0 -0
  68. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/static.in +0 -0
  69. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/static.txt +0 -0
  70. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/test.in +0 -0
  71. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/test.txt +0 -0
  72. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/wheels.in +0 -0
  73. {essreduce-25.11.0 → essreduce-25.11.1}/requirements/wheels.txt +0 -0
  74. {essreduce-25.11.0 → essreduce-25.11.1}/resources/logo.svg +0 -0
  75. {essreduce-25.11.0 → essreduce-25.11.1}/setup.cfg +0 -0
  76. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/__init__.py +0 -0
  77. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/data/__init__.py +0 -0
  78. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/data/_registry.py +0 -0
  79. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/live/__init__.py +0 -0
  80. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/live/raw.py +0 -0
  81. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/live/roi.py +0 -0
  82. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/live/workflow.py +0 -0
  83. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/logging.py +0 -0
  84. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/nexus/__init__.py +0 -0
  85. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/nexus/_nexus_loader.py +0 -0
  86. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/nexus/json_generator.py +0 -0
  87. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/nexus/json_nexus.py +0 -0
  88. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/nexus/types.py +0 -0
  89. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/parameter.py +0 -0
  90. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/py.typed +0 -0
  91. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/scripts/grow_nexus.py +0 -0
  92. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/streaming.py +0 -0
  93. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/__init__.py +0 -0
  94. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/eto_to_tof.py +0 -0
  95. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/fakes.py +0 -0
  96. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/interpolator_numba.py +0 -0
  97. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/interpolator_scipy.py +0 -0
  98. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/lut.py +0 -0
  99. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/resample.py +0 -0
  100. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/types.py +0 -0
  101. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/time_of_flight/workflow.py +0 -0
  102. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/ui.py +0 -0
  103. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/uncertainty.py +0 -0
  104. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/__init__.py +0 -0
  105. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_base.py +0 -0
  106. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_binedges_widget.py +0 -0
  107. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_bounds_widget.py +0 -0
  108. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_config.py +0 -0
  109. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_filename_widget.py +0 -0
  110. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_linspace_widget.py +0 -0
  111. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_optional_widget.py +0 -0
  112. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_spinner.py +0 -0
  113. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_string_widget.py +0 -0
  114. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_switchable_widget.py +0 -0
  115. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/widgets/_vector_widget.py +0 -0
  116. {essreduce-25.11.0 → essreduce-25.11.1}/src/ess/reduce/workflow.py +0 -0
  117. {essreduce-25.11.0 → essreduce-25.11.1}/src/essreduce.egg-info/SOURCES.txt +0 -0
  118. {essreduce-25.11.0 → essreduce-25.11.1}/src/essreduce.egg-info/dependency_links.txt +0 -0
  119. {essreduce-25.11.0 → essreduce-25.11.1}/src/essreduce.egg-info/entry_points.txt +0 -0
  120. {essreduce-25.11.0 → essreduce-25.11.1}/src/essreduce.egg-info/requires.txt +0 -0
  121. {essreduce-25.11.0 → essreduce-25.11.1}/src/essreduce.egg-info/top_level.txt +0 -0
  122. {essreduce-25.11.0 → essreduce-25.11.1}/tests/accumulators_test.py +0 -0
  123. {essreduce-25.11.0 → essreduce-25.11.1}/tests/live/raw_test.py +0 -0
  124. {essreduce-25.11.0 → essreduce-25.11.1}/tests/live/roi_test.py +0 -0
  125. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_generator_test.py +0 -0
  126. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/array_dataset.json +0 -0
  127. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/dataset.json +0 -0
  128. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/detector.json +0 -0
  129. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/entry.json +0 -0
  130. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/event_data.json +0 -0
  131. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/instrument.json +0 -0
  132. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_examples/log.json +0 -0
  133. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/json_nexus_test.py +0 -0
  134. {essreduce-25.11.0 → essreduce-25.11.1}/tests/nexus/nexus_loader_test.py +0 -0
  135. {essreduce-25.11.0 → essreduce-25.11.1}/tests/package_test.py +0 -0
  136. {essreduce-25.11.0 → essreduce-25.11.1}/tests/scripts/test_grow_nexus.py +0 -0
  137. {essreduce-25.11.0 → essreduce-25.11.1}/tests/streaming_test.py +0 -0
  138. {essreduce-25.11.0 → essreduce-25.11.1}/tests/time_of_flight/interpolator_test.py +0 -0
  139. {essreduce-25.11.0 → essreduce-25.11.1}/tests/time_of_flight/lut_test.py +0 -0
  140. {essreduce-25.11.0 → essreduce-25.11.1}/tests/time_of_flight/resample_tests.py +0 -0
  141. {essreduce-25.11.0 → essreduce-25.11.1}/tests/time_of_flight/unwrap_test.py +0 -0
  142. {essreduce-25.11.0 → essreduce-25.11.1}/tests/time_of_flight/wfm_test.py +0 -0
  143. {essreduce-25.11.0 → essreduce-25.11.1}/tests/time_of_flight/workflow_test.py +0 -0
  144. {essreduce-25.11.0 → essreduce-25.11.1}/tests/uncertainty_test.py +0 -0
  145. {essreduce-25.11.0 → essreduce-25.11.1}/tests/widget_test.py +0 -0
  146. {essreduce-25.11.0 → essreduce-25.11.1}/tools/shrink_nexus.py +0 -0
  147. {essreduce-25.11.0 → essreduce-25.11.1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: essreduce
3
- Version: 25.11.0
3
+ Version: 25.11.1
4
4
  Summary: Common data reduction tools for the ESS facility
5
5
  Author: Scipp contributors
6
6
  License-Expression: BSD-3-Clause
@@ -68,7 +68,7 @@ python-dateutil==2.9.0.post0
68
68
  # scippnexus
69
69
  sciline==25.11.0
70
70
  # via -r base.in
71
- scipp==25.8.0
71
+ scipp==25.11.0
72
72
  # via
73
73
  # -r base.in
74
74
  # scippneutron
@@ -97,7 +97,7 @@ python-dateutil==2.9.0.post0
97
97
  # via matplotlib
98
98
  requests==2.32.5
99
99
  # via pooch
100
- scipp==25.8.0
100
+ scipp==25.11.0
101
101
  # via tof
102
102
  scipy==1.16.3
103
103
  # via
@@ -385,7 +385,11 @@ def get_calibrated_detector(
385
385
  # If the NXdetector in the file is not 1-D, we want to match the order of dims.
386
386
  # zip_pixel_offsets otherwise yields a vector with dimensions in the order given
387
387
  # by the x/y/z offsets.
388
- offsets = snx.zip_pixel_offsets(da.coords).transpose(da.dims).copy()
388
+ offsets = snx.zip_pixel_offsets(da.coords)
389
+ # Get the dims in the order of the detector data array, but filter out dims that
390
+ # don't exist in the offsets (e.g. the detector data may have a 'time' dimension).
391
+ dims = [dim for dim in da.dims if dim in offsets.dims]
392
+ offsets = offsets.transpose(dims).copy()
389
393
  # We use the unit of the offsets as this is likely what the user expects.
390
394
  if transform.value.unit is not None and transform.value.unit != '':
391
395
  transform_value = transform.value.to(unit=offsets.unit)
@@ -399,7 +403,7 @@ def get_calibrated_detector(
399
403
 
400
404
  def assemble_detector_data(
401
405
  detector: EmptyDetector[RunType],
402
- event_data: NeXusData[snx.NXdetector, RunType],
406
+ neutron_data: NeXusData[snx.NXdetector, RunType],
403
407
  ) -> RawDetector[RunType]:
404
408
  """
405
409
  Assemble a detector data array with event data.
@@ -410,14 +414,15 @@ def assemble_detector_data(
410
414
  ----------
411
415
  detector:
412
416
  Calibrated detector data array.
413
- event_data:
414
- Event data array.
417
+ neutron_data:
418
+ Neutron data array (events or histogram).
415
419
  """
416
- grouped = nexus.group_event_data(
417
- event_data=event_data, detector_number=detector.coords['detector_number']
418
- )
420
+ if neutron_data.bins is not None:
421
+ neutron_data = nexus.group_event_data(
422
+ event_data=neutron_data, detector_number=detector.coords['detector_number']
423
+ )
419
424
  return RawDetector[RunType](
420
- _add_variances(grouped)
425
+ _add_variances(neutron_data)
421
426
  .assign_coords(detector.coords)
422
427
  .assign_masks(detector.masks)
423
428
  )
@@ -504,6 +509,19 @@ def _drop(
504
509
  }
505
510
 
506
511
 
512
+ class _EmptyField:
513
+ """Empty field that can replace a missing detector_number in NXdetector."""
514
+
515
+ def __init__(self, sizes: dict[str, int]):
516
+ self.attrs = {}
517
+ self.sizes = sizes.copy()
518
+ self.dims = tuple(sizes.keys())
519
+ self.shape = tuple(sizes.values())
520
+
521
+ def __getitem__(self, key: Any) -> sc.Variable:
522
+ return sc.zeros(dims=self.dims, shape=self.shape, unit=None, dtype='int32')
523
+
524
+
507
525
  class _StrippedDetector(snx.NXdetector):
508
526
  """Detector definition without large geometry or event data for ScippNexus.
509
527
 
@@ -513,8 +531,36 @@ class _StrippedDetector(snx.NXdetector):
513
531
  def __init__(
514
532
  self, attrs: dict[str, Any], children: dict[str, snx.Field | snx.Group]
515
533
  ):
516
- children = _drop(children, (snx.NXoff_geometry, snx.NXevent_data))
517
- children['data'] = children['detector_number']
534
+ if 'detector_number' in children:
535
+ data = children['detector_number']
536
+ else:
537
+ # We get the 'data' sizes before the NXdata is dropped
538
+ if 'data' not in children:
539
+ raise KeyError(
540
+ "StrippedDetector: Cannot determine shape of the detector. "
541
+ "No 'detector_number' was found, and the 'data' entry is missing."
542
+ )
543
+ if 'value' not in children['data']:
544
+ raise KeyError(
545
+ "StrippedDetector: Cannot determine shape of the detector. "
546
+ "The 'data' entry has no 'value'."
547
+ )
548
+ # We drop any time-related dimension from the data sizes, as they are not
549
+ # relevant for the detector geometry/shape.
550
+ data = _EmptyField(
551
+ sizes={
552
+ dim: size
553
+ for dim, size in children['data']['value'].sizes.items()
554
+ if dim not in ('time', 'frame_time')
555
+ }
556
+ )
557
+
558
+ children = _drop(
559
+ children, (snx.NXoff_geometry, snx.NXevent_data, snx.NXdata, snx.NXlog)
560
+ )
561
+
562
+ children['data'] = data
563
+
518
564
  super().__init__(attrs=attrs, children=children)
519
565
 
520
566
 
@@ -528,7 +574,7 @@ class _DummyField:
528
574
  self.shape = (0,)
529
575
 
530
576
  def __getitem__(self, key: Any) -> sc.Variable:
531
- return sc.empty(dims=self.dims, shape=self.shape, unit=None)
577
+ return sc.zeros(dims=self.dims, shape=self.shape, unit=None, dtype='int32')
532
578
 
533
579
 
534
580
  class _StrippedMonitor(snx.NXmonitor):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: essreduce
3
- Version: 25.11.0
3
+ Version: 25.11.1
4
4
  Summary: Common data reduction tools for the ESS facility
5
5
  Author: Scipp contributors
6
6
  License-Expression: BSD-3-Clause
@@ -63,9 +63,9 @@ def tbl_registry() -> Registry:
63
63
  return make_registry(
64
64
  'ess/tbl',
65
65
  files={
66
- "857127_00000112_small.hdf": "md5:6f3059e0e5e111a2a8f1b368f24c6f93",
66
+ "857127_00000112_small.hdf": "md5:0db89493b859dbb2f7354c3711ed7fbd",
67
67
  },
68
- version='1',
68
+ version='2',
69
69
  )
70
70
 
71
71
 
@@ -13,6 +13,7 @@ from ess.reduce.nexus.types import (
13
13
  BackgroundRun,
14
14
  Beamline,
15
15
  EmptyBeamRun,
16
+ EmptyDetector,
16
17
  Filename,
17
18
  FrameMonitor0,
18
19
  FrameMonitor1,
@@ -585,6 +586,31 @@ def test_load_detector_workflow(loki_tutorial_sample_run_60250: Path) -> None:
585
586
  assert da.dims == ('detector_number',)
586
587
 
587
588
 
589
+ def test_load_histogram_detector_workflow(tbl_commissioning_orca_file: Path) -> None:
590
+ wf = LoadDetectorWorkflow(run_types=[SampleRun], monitor_types=[])
591
+ wf[Filename[SampleRun]] = tbl_commissioning_orca_file
592
+ wf[NeXusName[snx.NXdetector]] = 'orca_detector'
593
+ da = wf.compute(RawDetector[SampleRun])
594
+ assert 'position' in da.coords
595
+ assert da.bins is None
596
+ assert 'time' in da.dims
597
+ assert da.ndim == 3
598
+
599
+
600
+ def test_load_empty_histogram_detector_workflow(
601
+ tbl_commissioning_orca_file: Path,
602
+ ) -> None:
603
+ wf = LoadDetectorWorkflow(run_types=[SampleRun], monitor_types=[])
604
+ wf[Filename[SampleRun]] = tbl_commissioning_orca_file
605
+ wf[NeXusName[snx.NXdetector]] = 'orca_detector'
606
+ da = wf.compute(EmptyDetector[SampleRun])
607
+ assert 'position' in da.coords
608
+ assert da.bins is None
609
+ # The empty detector has no time dimension, only the dimensions of the geometry
610
+ assert 'time' not in da.dims
611
+ assert da.ndim == 2
612
+
613
+
588
614
  @pytest.mark.parametrize('preopen', [True, False])
589
615
  def test_generic_nexus_workflow(
590
616
  preopen: bool, loki_tutorial_sample_run_60250: Path
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes