essdiffraction 25.5.0__tar.gz → 25.5.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 (139) hide show
  1. {essdiffraction-25.5.0/src/essdiffraction.egg-info → essdiffraction-25.5.1}/PKG-INFO +2 -2
  2. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/dream-advanced-powder-reduction.ipynb +38 -21
  3. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/dream-powder-reduction.ipynb +17 -9
  4. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/workflow-widget-dream.ipynb +2 -2
  5. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/sns-instruments/POWGEN_data_reduction.ipynb +6 -6
  6. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/pyproject.toml +1 -1
  7. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/base.in +1 -1
  8. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/base.txt +9 -9
  9. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/basetest.txt +2 -2
  10. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/ci.txt +1 -1
  11. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/dev.txt +2 -2
  12. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/docs.txt +2 -2
  13. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/nightly.txt +6 -6
  14. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/data.py +7 -4
  15. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/io/cif.py +69 -2
  16. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/io/geant4.py +2 -1
  17. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/io/nexus.py +11 -2
  18. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/parameters.py +9 -5
  19. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/workflow.py +24 -5
  20. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/conversion.py +20 -4
  21. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/correction.py +29 -6
  22. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/types.py +33 -21
  23. {essdiffraction-25.5.0 → essdiffraction-25.5.1/src/essdiffraction.egg-info}/PKG-INFO +2 -2
  24. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/essdiffraction.egg-info/requires.txt +1 -1
  25. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/dream/geant4_reduction_test.py +53 -19
  26. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/dream/io/cif_test.py +2 -2
  27. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/dream/io/nexus_test.py +3 -3
  28. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/snspowder/powgen/powgen_reduction_test.py +7 -7
  29. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tools/docs/dream-thumbnails.ipynb +2 -2
  30. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.copier-answers.ess.yml +0 -0
  31. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.copier-answers.yml +0 -0
  32. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -0
  33. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/dependabot.yml +0 -0
  34. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/ci.yml +0 -0
  35. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/docs.yml +0 -0
  36. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/nightly_at_main.yml +0 -0
  37. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/nightly_at_release.yml +0 -0
  38. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/python-version-ci +0 -0
  39. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/release.yml +0 -0
  40. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/test.yml +0 -0
  41. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/unpinned.yml +0 -0
  42. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.github/workflows/weekly_windows_macos.yml +0 -0
  43. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.gitignore +0 -0
  44. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.pre-commit-config.yaml +0 -0
  45. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/.python-version +0 -0
  46. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/CODE_OF_CONDUCT.md +0 -0
  47. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/CONTRIBUTING.md +0 -0
  48. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/LICENSE +0 -0
  49. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/MANIFEST.in +0 -0
  50. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/README.md +0 -0
  51. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/conda/meta.yaml +0 -0
  52. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/anaconda-icon.js +0 -0
  53. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/favicon.svg +0 -0
  54. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/logo-dark.svg +0 -0
  55. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/logo.svg +0 -0
  56. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/thumbnails/dream_advanced_powder_reduction_dark.svg +0 -0
  57. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/thumbnails/dream_advanced_powder_reduction_light.svg +0 -0
  58. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/thumbnails/dream_basic_powder_reduction_dark.svg +0 -0
  59. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_static/thumbnails/dream_basic_powder_reduction_light.svg +0 -0
  60. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_templates/class-template.rst +0 -0
  61. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_templates/doc_version.html +0 -0
  62. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/_templates/module-template.rst +0 -0
  63. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/about/bibliography.rst +0 -0
  64. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/about/index.md +0 -0
  65. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/api-reference/index.md +0 -0
  66. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/bibliography.bib +0 -0
  67. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/conf.py +0 -0
  68. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/developer/coding-conventions.md +0 -0
  69. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/developer/dependency-management.md +0 -0
  70. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/developer/getting-started.md +0 -0
  71. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/developer/index.md +0 -0
  72. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/index.md +0 -0
  73. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/common/index.md +0 -0
  74. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/common/vanadium_processing.ipynb +0 -0
  75. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/dream-detector-diagnostics.ipynb +0 -0
  76. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/dream-instrument-view.ipynb +0 -0
  77. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/dream-visualize-absorption.ipynb +0 -0
  78. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/dream/index.md +0 -0
  79. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/index.md +0 -0
  80. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/installation.md +0 -0
  81. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/docs/user-guide/sns-instruments/index.md +0 -0
  82. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/basetest.in +0 -0
  83. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/ci.in +0 -0
  84. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/dev.in +0 -0
  85. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/docs.in +0 -0
  86. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/make_base.py +0 -0
  87. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/mypy.in +0 -0
  88. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/mypy.txt +0 -0
  89. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/nightly.in +0 -0
  90. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/static.in +0 -0
  91. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/static.txt +0 -0
  92. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/test.in +0 -0
  93. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/test.txt +0 -0
  94. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/wheels.in +0 -0
  95. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/requirements/wheels.txt +0 -0
  96. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/resources/logo.svg +0 -0
  97. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/setup.cfg +0 -0
  98. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/diffraction/__init__.py +0 -0
  99. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/diffraction/py.typed +0 -0
  100. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/__init__.py +0 -0
  101. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/beamline.py +0 -0
  102. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/diagnostics.py +0 -0
  103. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/instrument_view.py +0 -0
  104. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/io/__init__.py +0 -0
  105. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/dream/py.typed +0 -0
  106. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/__init__.py +0 -0
  107. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/_util.py +0 -0
  108. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/calibration.py +0 -0
  109. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/filtering.py +0 -0
  110. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/grouping.py +0 -0
  111. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/logging.py +0 -0
  112. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/masking.py +0 -0
  113. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/py.typed +0 -0
  114. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/smoothing.py +0 -0
  115. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/powder/transform.py +0 -0
  116. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/__init__.py +0 -0
  117. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/beamline.py +0 -0
  118. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/calibration.py +0 -0
  119. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/data.py +0 -0
  120. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/instrument_view.py +0 -0
  121. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/peaks.py +0 -0
  122. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/ess/snspowder/powgen/workflow.py +0 -0
  123. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/essdiffraction.egg-info/SOURCES.txt +0 -0
  124. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/essdiffraction.egg-info/dependency_links.txt +0 -0
  125. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/src/essdiffraction.egg-info/top_level.txt +0 -0
  126. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/conftest.py +0 -0
  127. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/dream/diagnostics_test.py +0 -0
  128. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/dream/instrument_view_test.py +0 -0
  129. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/dream/io/geant4_test.py +0 -0
  130. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/package_test.py +0 -0
  131. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/powder/conversion_test.py +0 -0
  132. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/powder/correction_test.py +0 -0
  133. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/powder/filtering_test.py +0 -0
  134. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/powder/transform_test.py +0 -0
  135. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tests/snspowder/powgen/load_test.py +0 -0
  136. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tools/dream-make-tof-lookup-table.ipynb +0 -0
  137. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tools/preprocess_pg3_files.ipynb +0 -0
  138. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tools/shrink_nexus.py +0 -0
  139. {essdiffraction-25.5.0 → essdiffraction-25.5.1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: essdiffraction
3
- Version: 25.5.0
3
+ Version: 25.5.1
4
4
  Summary: Diffraction data reduction for the European Spallation Source
5
5
  Author: Scipp contributors
6
6
  License-Expression: BSD-3-Clause
@@ -22,7 +22,7 @@ Requires-Python: >=3.10
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: dask
25
- Requires-Dist: essreduce>=25.05.1
25
+ Requires-Dist: essreduce>=25.05.2
26
26
  Requires-Dist: graphviz
27
27
  Requires-Dist: numpy
28
28
  Requires-Dist: plopp>=25.03.0
@@ -56,12 +56,12 @@
56
56
  "\n",
57
57
  "workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
58
58
  "workflow[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
59
- "workflow[Filename[BackgroundRun]] = dream.data.simulated_empty_can()\n",
59
+ "workflow[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
60
60
  "workflow[CalibrationFilename] = None\n",
61
61
  "\n",
62
62
  "workflow[MonitorFilename[SampleRun]] = dream.data.simulated_monitor_diamond_sample()\n",
63
63
  "workflow[MonitorFilename[VanadiumRun]] = dream.data.simulated_monitor_vanadium_sample()\n",
64
- "workflow[MonitorFilename[BackgroundRun]] = dream.data.simulated_monitor_empty_can()\n",
64
+ "workflow[MonitorFilename[EmptyCanRun]] = dream.data.simulated_monitor_empty_can()\n",
65
65
  "workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
66
66
  "\n",
67
67
  "workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux\n",
@@ -111,7 +111,7 @@
111
111
  "metadata": {},
112
112
  "outputs": [],
113
113
  "source": [
114
- "workflow.visualize(IofDspacingTwoTheta, graph_attr={\"rankdir\": \"LR\"})"
114
+ "workflow.visualize(IofDspacingTwoTheta[SampleRun], graph_attr={\"rankdir\": \"LR\"})"
115
115
  ]
116
116
  },
117
117
  {
@@ -129,7 +129,7 @@
129
129
  "metadata": {},
130
130
  "outputs": [],
131
131
  "source": [
132
- "grouped_dspacing = workflow.compute(IofDspacingTwoTheta)\n",
132
+ "grouped_dspacing = workflow.compute(IofDspacingTwoTheta[SampleRun])\n",
133
133
  "grouped_dspacing"
134
134
  ]
135
135
  },
@@ -174,12 +174,12 @@
174
174
  "\n",
175
175
  "workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
176
176
  "workflow[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
177
- "workflow[Filename[BackgroundRun]] = dream.data.simulated_empty_can()\n",
177
+ "workflow[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
178
178
  "workflow[CalibrationFilename] = None\n",
179
179
  "\n",
180
180
  "workflow[MonitorFilename[SampleRun]] = dream.data.simulated_monitor_diamond_sample()\n",
181
181
  "workflow[MonitorFilename[VanadiumRun]] = dream.data.simulated_monitor_vanadium_sample()\n",
182
- "workflow[MonitorFilename[BackgroundRun]] = dream.data.simulated_monitor_empty_can()\n",
182
+ "workflow[MonitorFilename[EmptyCanRun]] = dream.data.simulated_monitor_empty_can()\n",
183
183
  "workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
184
184
  "\n",
185
185
  "workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux\n",
@@ -209,7 +209,7 @@
209
209
  "metadata": {},
210
210
  "outputs": [],
211
211
  "source": [
212
- "workflow.visualize(IofDspacing, graph_attr={\"rankdir\": \"LR\"})"
212
+ "workflow.visualize(IofDspacing[SampleRun], graph_attr={\"rankdir\": \"LR\"})"
213
213
  ]
214
214
  },
215
215
  {
@@ -227,7 +227,7 @@
227
227
  "metadata": {},
228
228
  "outputs": [],
229
229
  "source": [
230
- "result = workflow.compute(IofDspacing)\n",
230
+ "result = workflow.compute(IofDspacing[SampleRun])\n",
231
231
  "result.hist().plot(title=result.coords['detector'].value.capitalize())"
232
232
  ]
233
233
  },
@@ -254,7 +254,7 @@
254
254
  "\n",
255
255
  "workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
256
256
  "workflow[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
257
- "workflow[Filename[BackgroundRun]] = dream.data.simulated_empty_can()\n",
257
+ "workflow[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
258
258
  "workflow[CalibrationFilename] = None\n",
259
259
  "\n",
260
260
  "workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux\n",
@@ -285,7 +285,7 @@
285
285
  "metadata": {},
286
286
  "outputs": [],
287
287
  "source": [
288
- "workflow.visualize(IofDspacing, graph_attr={\"rankdir\": \"LR\"})"
288
+ "workflow.visualize(IofDspacing[SampleRun], graph_attr={\"rankdir\": \"LR\"})"
289
289
  ]
290
290
  },
291
291
  {
@@ -303,7 +303,7 @@
303
303
  "metadata": {},
304
304
  "outputs": [],
305
305
  "source": [
306
- "result = workflow.compute(IofDspacing)\n",
306
+ "result = workflow.compute(IofDspacing[SampleRun])\n",
307
307
  "result.hist().plot(title=result.coords['detector'].value.capitalize())"
308
308
  ]
309
309
  },
@@ -374,7 +374,7 @@
374
374
  "\n",
375
375
  "workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
376
376
  "workflow[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
377
- "workflow[Filename[BackgroundRun]] = dream.data.simulated_empty_can()\n",
377
+ "workflow[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
378
378
  "workflow[CalibrationFilename] = None\n",
379
379
  "\n",
380
380
  "workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux\n",
@@ -424,8 +424,10 @@
424
424
  ").rename_axis(index='detector')\n",
425
425
  "\n",
426
426
  "all_detector_workflow = workflow.copy()\n",
427
- "mapped = all_detector_workflow[IofDspacing].map(parameter_table)\n",
428
- "all_detector_workflow[IofDspacing] = mapped.reduce(func=powder.grouping.collect_detectors)"
427
+ "mapped = all_detector_workflow[EmptyCanSubtractedIofDspacing[SampleRun]].map(parameter_table)\n",
428
+ "all_detector_workflow[EmptyCanSubtractedIofDspacing[SampleRun]] = mapped.reduce(\n",
429
+ " func=powder.grouping.collect_detectors\n",
430
+ ")"
429
431
  ]
430
432
  },
431
433
  {
@@ -443,7 +445,11 @@
443
445
  "metadata": {},
444
446
  "outputs": [],
445
447
  "source": [
446
- "all_detector_workflow.visualize(IofDspacing, graph_attr={\"rankdir\": \"LR\"}, compact=True)"
448
+ "all_detector_workflow.visualize(\n",
449
+ " EmptyCanSubtractedIofDspacing[SampleRun],\n",
450
+ " graph_attr={\"rankdir\": \"LR\"},\n",
451
+ " compact=True\n",
452
+ ")"
447
453
  ]
448
454
  },
449
455
  {
@@ -461,7 +467,7 @@
461
467
  "metadata": {},
462
468
  "outputs": [],
463
469
  "source": [
464
- "result = all_detector_workflow.compute(IofDspacing)"
470
+ "result = all_detector_workflow.compute(EmptyCanSubtractedIofDspacing[SampleRun])"
465
471
  ]
466
472
  },
467
473
  {
@@ -534,8 +540,10 @@
534
540
  ").rename_axis(index='detector')\n",
535
541
  "\n",
536
542
  "all_detector_workflow = workflow.copy()\n",
537
- "mapped = all_detector_workflow[IofDspacingTwoTheta].map(parameter_table)\n",
538
- "all_detector_workflow[IofDspacingTwoTheta] = mapped.reduce(func=powder.grouping.collect_detectors)"
543
+ "mapped = all_detector_workflow[EmptyCanSubtractedIofDspacingTwoTheta[SampleRun]].map(parameter_table)\n",
544
+ "all_detector_workflow[EmptyCanSubtractedIofDspacingTwoTheta[SampleRun]] = mapped.reduce(\n",
545
+ " func=powder.grouping.collect_detectors\n",
546
+ ")"
539
547
  ]
540
548
  },
541
549
  {
@@ -545,7 +553,11 @@
545
553
  "metadata": {},
546
554
  "outputs": [],
547
555
  "source": [
548
- "all_detector_workflow.visualize(IofDspacing, graph_attr={\"rankdir\": \"LR\"}, compact=True)"
556
+ "all_detector_workflow.visualize(\n",
557
+ " EmptyCanSubtractedIofDspacingTwoTheta[SampleRun],\n",
558
+ " graph_attr={\"rankdir\": \"LR\"},\n",
559
+ " compact=True\n",
560
+ ")"
549
561
  ]
550
562
  },
551
563
  {
@@ -555,7 +567,7 @@
555
567
  "metadata": {},
556
568
  "outputs": [],
557
569
  "source": [
558
- "result = all_detector_workflow.compute(IofDspacingTwoTheta)"
570
+ "result = all_detector_workflow.compute(EmptyCanSubtractedIofDspacingTwoTheta[SampleRun])"
559
571
  ]
560
572
  },
561
573
  {
@@ -592,7 +604,12 @@
592
604
  "metadata": {},
593
605
  "outputs": [],
594
606
  "source": [
595
- "pp.imagefigure(*(pp.Node(da.hist()) for da in result.values()), norm='log', cbar=True)"
607
+ "pp.imagefigure(\n",
608
+ " *(pp.Node(da.hist()) for da in result.values()),\n",
609
+ " norm='log',\n",
610
+ " cbar=True,\n",
611
+ " vmin=1e-3,\n",
612
+ ")"
596
613
  ]
597
614
  }
598
615
  ],
@@ -56,7 +56,9 @@
56
56
  "metadata": {},
57
57
  "outputs": [],
58
58
  "source": [
59
- "workflow = dream.DreamGeant4Workflow(run_norm=powder.RunNormalization.monitor_histogram)"
59
+ "workflow = dream.DreamGeant4Workflow(\n",
60
+ " run_norm=powder.RunNormalization.monitor_histogram,\n",
61
+ ")"
60
62
  ]
61
63
  },
62
64
  {
@@ -77,12 +79,12 @@
77
79
  "source": [
78
80
  "workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
79
81
  "workflow[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
80
- "workflow[Filename[BackgroundRun]] = dream.data.simulated_empty_can()\n",
82
+ "workflow[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
81
83
  "workflow[CalibrationFilename] = None\n",
82
84
  "\n",
83
85
  "workflow[MonitorFilename[SampleRun]] = dream.data.simulated_monitor_diamond_sample()\n",
84
86
  "workflow[MonitorFilename[VanadiumRun]] = dream.data.simulated_monitor_vanadium_sample()\n",
85
- "workflow[MonitorFilename[BackgroundRun]] = dream.data.simulated_monitor_empty_can()\n",
87
+ "workflow[MonitorFilename[EmptyCanRun]] = dream.data.simulated_monitor_empty_can()\n",
86
88
  "workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
87
89
  "\n",
88
90
  "workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux\n",
@@ -105,8 +107,11 @@
105
107
  "## Use the reduction workflow\n",
106
108
  "\n",
107
109
  "We then call [workflow.compute(target)](https://scipp.github.io/sciline/generated/classes/sciline.Pipeline.html#sciline.Pipeline.compute) to compute the result.\n",
108
- "`IofDspacing` is the normalized intensity as a function of $d$-spacing.\n",
109
- "`ReducedTofCIF` encode the same data but converted back to time-of-flight and ready to be written to a CIF file."
110
+ "\n",
111
+ "- `EmptyCanSubtractedIofDspacing` is the normalized intensity as a function of $d$-spacing.\n",
112
+ "- `ReducedEmptyCanSubtractedTofCIF` encode the same data but converted back to time-of-flight and ready to be written to a CIF file.\n",
113
+ "\n",
114
+ "If we didn't want to subtract an empty can measurement from the sample measurement, we would instead request `IofDspacing[SampleRun]` and `ReducedTofCIF`."
110
115
  ]
111
116
  },
112
117
  {
@@ -116,9 +121,12 @@
116
121
  "metadata": {},
117
122
  "outputs": [],
118
123
  "source": [
119
- "results = workflow.compute([IofDspacing, ReducedTofCIF])\n",
120
- "intensity = results[IofDspacing]\n",
121
- "cif_data = results[ReducedTofCIF]"
124
+ "results = workflow.compute([\n",
125
+ " EmptyCanSubtractedIofDspacing[SampleRun],\n",
126
+ " ReducedEmptyCanSubtractedTofCIF\n",
127
+ "])\n",
128
+ "intensity = results[EmptyCanSubtractedIofDspacing[SampleRun]]\n",
129
+ "cif_data = results[ReducedEmptyCanSubtractedTofCIF]"
122
130
  ]
123
131
  },
124
132
  {
@@ -182,7 +190,7 @@
182
190
  "metadata": {},
183
191
  "outputs": [],
184
192
  "source": [
185
- "workflow.visualize(ReducedTofCIF, graph_attr={\"rankdir\": \"LR\"})"
193
+ "workflow.visualize(ReducedEmptyCanSubtractedTofCIF, graph_attr={\"rankdir\": \"LR\"})"
186
194
  ]
187
195
  },
188
196
  {
@@ -59,7 +59,7 @@
59
59
  "wfw = widget.children[1].children[0]\n",
60
60
  "outputs = wfw.output_selection_box.typical_outputs_widget\n",
61
61
  "keys, values = zip(*outputs.options, strict=True)\n",
62
- "ind = keys.index(\"IofTof\")\n",
62
+ "ind = keys.index(\"IofDspacing[SampleRun]\")\n",
63
63
  "outputs.value = (values[ind],)\n",
64
64
  "# Refresh parameters\n",
65
65
  "pbox = wfw.parameter_box\n",
@@ -116,7 +116,7 @@
116
116
  "outputs": [],
117
117
  "source": [
118
118
  "(da,) = results.values()\n",
119
- "da.hist(tof=200).plot()"
119
+ "da.hist(dspacing=200).plot()"
120
120
  ]
121
121
  }
122
122
  ],
@@ -106,7 +106,7 @@
106
106
  "metadata": {},
107
107
  "outputs": [],
108
108
  "source": [
109
- "IofDspacing in workflow.get(IofDspacing).keys()"
109
+ "IofDspacing[SampleRun] in workflow.get(IofDspacing[SampleRun]).keys()"
110
110
  ]
111
111
  },
112
112
  {
@@ -116,7 +116,7 @@
116
116
  "metadata": {},
117
117
  "outputs": [],
118
118
  "source": [
119
- "workflow.visualize(IofDspacing, graph_attr={\"rankdir\": \"LR\"})"
119
+ "workflow.visualize(IofDspacing[SampleRun], graph_attr={\"rankdir\": \"LR\"})"
120
120
  ]
121
121
  },
122
122
  {
@@ -134,7 +134,7 @@
134
134
  "metadata": {},
135
135
  "outputs": [],
136
136
  "source": [
137
- "result = workflow.compute(IofDspacing)\n",
137
+ "result = workflow.compute(IofDspacing[SampleRun])\n",
138
138
  "result"
139
139
  ]
140
140
  },
@@ -172,7 +172,7 @@
172
172
  "outputs": [],
173
173
  "source": [
174
174
  "def save_xye(\n",
175
- " reduced_data: IofDspacing,\n",
175
+ " reduced_data: IofDspacing[SampleRun],\n",
176
176
  " out_filename: OutFilename,\n",
177
177
  ") -> None:\n",
178
178
  " data = reduced_data.hist()\n",
@@ -319,7 +319,7 @@
319
319
  "metadata": {},
320
320
  "outputs": [],
321
321
  "source": [
322
- "workflow.visualize(IofDspacingTwoTheta, graph_attr={\"rankdir\": \"LR\"})"
322
+ "workflow.visualize(IofDspacingTwoTheta[SampleRun], graph_attr={\"rankdir\": \"LR\"})"
323
323
  ]
324
324
  },
325
325
  {
@@ -337,7 +337,7 @@
337
337
  "metadata": {},
338
338
  "outputs": [],
339
339
  "source": [
340
- "grouped_dspacing = workflow.compute(IofDspacingTwoTheta)\n",
340
+ "grouped_dspacing = workflow.compute(IofDspacingTwoTheta[SampleRun])\n",
341
341
  "grouped_dspacing"
342
342
  ]
343
343
  },
@@ -32,7 +32,7 @@ requires-python = ">=3.10"
32
32
  # Make sure to list one dependency per line.
33
33
  dependencies = [
34
34
  "dask",
35
- "essreduce>=25.05.1",
35
+ "essreduce>=25.05.2",
36
36
  "graphviz",
37
37
  "numpy",
38
38
  "plopp>=25.03.0",
@@ -3,7 +3,7 @@
3
3
  # --- END OF CUSTOM SECTION ---
4
4
  # The following was generated by 'tox -e deps', DO NOT EDIT MANUALLY!
5
5
  dask
6
- essreduce>=25.05.1
6
+ essreduce>=25.05.2
7
7
  graphviz
8
8
  numpy
9
9
  plopp>=25.03.0
@@ -1,4 +1,4 @@
1
- # SHA1:9fd92aa14a70d874a87640e7dbb332600b0c2ac7
1
+ # SHA1:60cb3370153cfec27ffbe68c100df7aa10faaed0
2
2
  #
3
3
  # This file was generated by pip-compile-multi.
4
4
  # To update, run:
@@ -9,7 +9,7 @@ annotated-types==0.7.0
9
9
  # via pydantic
10
10
  asttokens==3.0.0
11
11
  # via stack-data
12
- click==8.2.0
12
+ click==8.2.1
13
13
  # via dask
14
14
  cloudpickle==3.1.1
15
15
  # via dask
@@ -21,7 +21,7 @@ cyclebane==24.10.0
21
21
  # via sciline
22
22
  cycler==0.12.1
23
23
  # via matplotlib
24
- dask==2025.5.0
24
+ dask==2025.5.1
25
25
  # via -r base.in
26
26
  decorator==5.2.1
27
27
  # via ipython
@@ -29,7 +29,7 @@ dnspython==2.7.0
29
29
  # via email-validator
30
30
  email-validator==2.2.0
31
31
  # via scippneutron
32
- essreduce==25.5.1
32
+ essreduce==25.5.2
33
33
  # via -r base.in
34
34
  exceptiongroup==1.3.0
35
35
  # via ipython
@@ -37,7 +37,7 @@ executing==2.2.0
37
37
  # via stack-data
38
38
  fonttools==4.58.0
39
39
  # via matplotlib
40
- fsspec==2025.3.2
40
+ fsspec==2025.5.0
41
41
  # via dask
42
42
  graphviz==0.20.3
43
43
  # via -r base.in
@@ -80,7 +80,7 @@ mpltoolbox==25.4.0
80
80
  # via scippneutron
81
81
  networkx==3.4.2
82
82
  # via cyclebane
83
- numpy==2.2.5
83
+ numpy==2.2.6
84
84
  # via
85
85
  # -r base.in
86
86
  # contourpy
@@ -104,7 +104,7 @@ pexpect==4.9.0
104
104
  # via ipython
105
105
  pillow==11.2.1
106
106
  # via matplotlib
107
- plopp==25.4.1
107
+ plopp==25.5.0
108
108
  # via
109
109
  # -r base.in
110
110
  # scippneutron
@@ -132,7 +132,7 @@ pythreejs==2.4.2
132
132
  # via -r base.in
133
133
  pyyaml==6.0.2
134
134
  # via dask
135
- sciline==25.5.1
135
+ sciline==25.5.2
136
136
  # via
137
137
  # -r base.in
138
138
  # essreduce
@@ -185,7 +185,7 @@ typing-extensions==4.13.2
185
185
  # pydantic-core
186
186
  # sciline
187
187
  # typing-inspection
188
- typing-inspection==0.4.0
188
+ typing-inspection==0.4.1
189
189
  # via pydantic
190
190
  wcwidth==0.2.13
191
191
  # via prompt-toolkit
@@ -15,7 +15,7 @@ idna==3.10
15
15
  # via requests
16
16
  iniconfig==2.1.0
17
17
  # via pytest
18
- numpy==2.2.5
18
+ numpy==2.2.6
19
19
  # via pandas
20
20
  packaging==25.0
21
21
  # via
@@ -25,7 +25,7 @@ pandas==2.2.3
25
25
  # via -r basetest.in
26
26
  platformdirs==4.3.8
27
27
  # via pooch
28
- pluggy==1.5.0
28
+ pluggy==1.6.0
29
29
  # via pytest
30
30
  pooch==1.8.2
31
31
  # via -r basetest.in
@@ -36,7 +36,7 @@ platformdirs==4.3.8
36
36
  # via
37
37
  # tox
38
38
  # virtualenv
39
- pluggy==1.5.0
39
+ pluggy==1.6.0
40
40
  # via tox
41
41
  pyproject-api==1.9.1
42
42
  # via tox
@@ -81,7 +81,7 @@ pip-tools==7.4.1
81
81
  # via pip-compile-multi
82
82
  plumbum==1.9.0
83
83
  # via copier
84
- prometheus-client==0.21.1
84
+ prometheus-client==0.22.0
85
85
  # via jupyter-server
86
86
  pycparser==2.22
87
87
  # via cffi
@@ -107,7 +107,7 @@ terminado==0.18.1
107
107
  # jupyter-server-terminals
108
108
  toposort==1.10
109
109
  # via pip-compile-multi
110
- types-python-dateutil==2.9.0.20241206
110
+ types-python-dateutil==2.9.0.20250516
111
111
  # via arrow
112
112
  uri-template==1.3.0
113
113
  # via jsonschema
@@ -138,7 +138,7 @@ requests==2.32.3
138
138
  # via
139
139
  # pooch
140
140
  # sphinx
141
- rpds-py==0.24.0
141
+ rpds-py==0.25.1
142
142
  # via
143
143
  # jsonschema
144
144
  # referencing
@@ -180,7 +180,7 @@ tinycss2==1.4.0
180
180
  # via bleach
181
181
  tomli==2.2.1
182
182
  # via sphinx
183
- tornado==6.4.2
183
+ tornado==6.5
184
184
  # via
185
185
  # ipykernel
186
186
  # jupyter-client
@@ -16,7 +16,7 @@ certifi==2025.4.26
16
16
  # via requests
17
17
  charset-normalizer==3.4.2
18
18
  # via requests
19
- click==8.2.0
19
+ click==8.2.1
20
20
  # via dask
21
21
  cloudpickle==3.1.1
22
22
  # via dask
@@ -28,7 +28,7 @@ cyclebane==24.10.0
28
28
  # via sciline
29
29
  cycler==0.12.1
30
30
  # via matplotlib
31
- dask==2025.5.0
31
+ dask==2025.5.1
32
32
  # via -r nightly.in
33
33
  decorator==5.2.1
34
34
  # via ipython
@@ -46,7 +46,7 @@ executing==2.2.0
46
46
  # via stack-data
47
47
  fonttools==4.58.0
48
48
  # via matplotlib
49
- fsspec==2025.3.2
49
+ fsspec==2025.5.0
50
50
  # via dask
51
51
  graphviz==0.20.3
52
52
  # via -r nightly.in
@@ -93,7 +93,7 @@ mpltoolbox==25.4.0
93
93
  # via scippneutron
94
94
  networkx==3.4.2
95
95
  # via cyclebane
96
- numpy==2.2.5
96
+ numpy==2.2.6
97
97
  # via
98
98
  # -r nightly.in
99
99
  # contourpy
@@ -129,7 +129,7 @@ plopp @ git+https://github.com/scipp/plopp@main
129
129
  # -r nightly.in
130
130
  # scippneutron
131
131
  # tof
132
- pluggy==1.5.0
132
+ pluggy==1.6.0
133
133
  # via pytest
134
134
  pooch==1.8.2
135
135
  # via -r nightly.in
@@ -218,7 +218,7 @@ typing-extensions==4.13.2
218
218
  # pydantic-core
219
219
  # sciline
220
220
  # typing-inspection
221
- typing-inspection==0.4.0
221
+ typing-inspection==0.4.1
222
222
  # via pydantic
223
223
  tzdata==2025.2
224
224
  # via pandas
@@ -29,9 +29,10 @@ def _make_pooch():
29
29
  "DREAM_simple_pwd_workflow/Cave_TOF_Monitor_vana_inc_coh.dat": "md5:701d66792f20eb283a4ce76bae0c8f8f", # noqa: E501
30
30
  "DREAM-high-flux-tof-lookup-table.h5": "md5:1b95a359fa7b0d8b4277806ece9bf279", # noqa: E501
31
31
  # Smaller files for unit tests
32
- "DREAM_simple_pwd_workflow/TEST_data_dream_diamond_vana_container_sample_union.csv.zip": "md5:018a87e0934c1dd0f07a708e9d497891", # noqa: E501
33
- "DREAM_simple_pwd_workflow/TEST_data_dream_vana_container_sample_union.csv.zip": "md5:d244126cd8012f9ed186f4e08a19f88d", # noqa: E501
34
- "DREAM_simple_pwd_workflow/TEST_data_dream_vanadium.csv.zip": "md5:178f9bea9f35dbdef693e38ff893c258", # noqa: E501
32
+ "DREAM_simple_pwd_workflow/TEST_data_dream_diamond_vana_container_sample_union.csv.zip": "md5:405df9b5ade9d61ab71fe8d8c19bb51b", # noqa: E501
33
+ "DREAM_simple_pwd_workflow/TEST_data_dream_vana_container_sample_union.csv.zip": "md5:20186119d1debfb0c2352f9db384cd0a", # noqa: E501
34
+ "DREAM_simple_pwd_workflow/TEST_data_dream_vanadium.csv.zip": "md5:e5624a973f30dfe440642319c5bf0da6", # noqa: E501
35
+ "DREAM_simple_pwd_workflow/TEST_data_dream_vanadium_inc_coh.csv.zip": "md5:a2e7756b264f65ab5ed7ff7fb5eca280", # noqa: E501
35
36
  "TEST_data_dream0_new_hkl_Si_pwd.csv.zip": "md5:df6c41f4b7b21e129915808f625828f6", # noqa: E501
36
37
  "TEST_data_dream_with_sectors.csv.zip": "md5:2a6b5e40e6b67f6c71b25373bf4b11a1", # noqa: E501
37
38
  # The TEST_DREAM_nexus_sorted-2023-12-07.nxs file was created using the
@@ -147,7 +148,9 @@ def simulated_vanadium_sample(*, small: bool = False) -> str:
147
148
  ```
148
149
  """
149
150
  prefix = "TEST_" if small else ""
150
- return get_path(f"DREAM_simple_pwd_workflow/{prefix}data_dream_vanadium.csv.zip")
151
+ return get_path(
152
+ f"DREAM_simple_pwd_workflow/{prefix}data_dream_vanadium_inc_coh.csv.zip"
153
+ )
151
154
 
152
155
 
153
156
  def simulated_vanadium_sample_incoherent(*, small: bool = False) -> str:
@@ -10,9 +10,11 @@ from ess.powder.calibration import OutputCalibrationData
10
10
  from ess.powder.types import (
11
11
  Beamline,
12
12
  CIFAuthors,
13
+ EmptyCanSubtractedIofTof,
13
14
  IofTof,
15
+ ReducedEmptyCanSubtractedTofCIF,
14
16
  ReducedTofCIF,
15
- ReducerSoftwares,
17
+ ReducerSoftware,
16
18
  Source,
17
19
  )
18
20
 
@@ -23,7 +25,7 @@ def prepare_reduced_tof_cif(
23
25
  authors: CIFAuthors,
24
26
  beamline: Beamline,
25
27
  source: Source,
26
- reducers: ReducerSoftwares,
28
+ reducers: ReducerSoftware,
27
29
  calibration: OutputCalibrationData,
28
30
  ) -> ReducedTofCIF:
29
31
  """Construct a CIF builder with reduced data in d-spacing.
@@ -53,6 +55,71 @@ def prepare_reduced_tof_cif(
53
55
  An object that contains the reduced data and metadata.
54
56
  Us its ``save`` method to write the CIF file.
55
57
  """
58
+ return _prepare_reduced_tof_cif_impl(
59
+ da,
60
+ authors=authors,
61
+ beamline=beamline,
62
+ source=source,
63
+ reducers=reducers,
64
+ calibration=calibration,
65
+ )
66
+
67
+
68
+ def prepare_reduced_empty_can_subtracted_tof_cif(
69
+ da: EmptyCanSubtractedIofTof,
70
+ *,
71
+ authors: CIFAuthors,
72
+ beamline: Beamline,
73
+ source: Source,
74
+ reducers: ReducerSoftware,
75
+ calibration: OutputCalibrationData,
76
+ ) -> ReducedEmptyCanSubtractedTofCIF:
77
+ """Construct a CIF builder with reduced data in d-spacing.
78
+
79
+ The object contains the d-spacing coordinate, intensities,
80
+ and some metadata.
81
+
82
+ Parameters
83
+ ----------
84
+ da:
85
+ Reduced 1d data with a ``'tof'`` dimension and coordinate.
86
+ authors:
87
+ List of authors to write to the file.
88
+ beamline:
89
+ Information about the beamline that the data was produced at.
90
+ source:
91
+ Information about the neutron source.
92
+ reducers:
93
+ List of software pieces used to reduce the data.
94
+ calibration:
95
+ Coefficients for conversion between d-spacing and final ToF.
96
+ See :meth:`scippneutron.io.cif.CIF.with_powder_calibration`.
97
+
98
+ Returns
99
+ -------
100
+ :
101
+ An object that contains the reduced data and metadata.
102
+ Us its ``save`` method to write the CIF file.
103
+ """
104
+ return _prepare_reduced_tof_cif_impl(
105
+ da,
106
+ authors=authors,
107
+ beamline=beamline,
108
+ source=source,
109
+ reducers=reducers,
110
+ calibration=calibration,
111
+ )
112
+
113
+
114
+ def _prepare_reduced_tof_cif_impl(
115
+ da: IofTof,
116
+ *,
117
+ authors: CIFAuthors,
118
+ beamline: Beamline,
119
+ source: Source,
120
+ reducers: ReducerSoftware,
121
+ calibration: OutputCalibrationData,
122
+ ) -> ReducedTofCIF:
56
123
  to_save = _prepare_data(da)
57
124
  return ReducedTofCIF(
58
125
  cif.CIF('reduced_tof')