essreduce 25.4.1__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.
- {essreduce-25.4.1 → essreduce-25.5.1}/.copier-answers.yml +1 -1
- {essreduce-25.4.1/src/essreduce.egg-info → essreduce-25.5.1}/PKG-INFO +2 -2
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/conf.py +3 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/tof/dream.ipynb +64 -46
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/tof/frame-unwrapping.ipynb +22 -22
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/tof/wfm.ipynb +13 -15
- {essreduce-25.4.1 → essreduce-25.5.1}/pyproject.toml +1 -1
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/base.txt +12 -13
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/basetest.in +1 -1
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/basetest.txt +22 -22
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/ci.txt +7 -7
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/dev.txt +7 -7
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/docs.txt +17 -17
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/mypy.txt +3 -3
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/nightly.txt +20 -22
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/static.txt +3 -3
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/test.txt +2 -2
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/wheels.txt +3 -3
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/nexus/types.py +0 -7
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/nexus/workflow.py +2 -40
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/__init__.py +25 -10
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/eto_to_tof.py +245 -152
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/fakes.py +2 -2
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/interpolator_numba.py +32 -61
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/interpolator_scipy.py +13 -14
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/simulation.py +25 -1
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/types.py +63 -27
- essreduce-25.5.1/src/ess/reduce/time_of_flight/workflow.py +94 -0
- essreduce-25.5.1/src/ess/reduce/utils.py +36 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/workflow.py +4 -2
- {essreduce-25.4.1 → essreduce-25.5.1/src/essreduce.egg-info}/PKG-INFO +2 -2
- {essreduce-25.4.1 → essreduce-25.5.1}/src/essreduce.egg-info/SOURCES.txt +4 -1
- {essreduce-25.4.1 → essreduce-25.5.1}/src/essreduce.egg-info/requires.txt +1 -1
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/nexus_loader_test.py +0 -41
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/workflow_test.py +0 -19
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/streaming_test.py +9 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/time_of_flight/interpolator_test.py +31 -26
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/time_of_flight/unwrap_test.py +25 -21
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/time_of_flight/wfm_test.py +10 -9
- essreduce-25.5.1/tests/time_of_flight/workflow_test.py +136 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.copier-answers.ess.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/ISSUE_TEMPLATE/blank.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/dependabot.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/ci.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/docs.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/nightly_at_main.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/nightly_at_release.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/python-version-ci +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/release.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/test.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/unpinned.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.github/workflows/weekly_windows_macos.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.gitignore +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.pre-commit-config.yaml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/.python-version +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/CODE_OF_CONDUCT.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/CONTRIBUTING.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/LICENSE +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/MANIFEST.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/README.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/conda/meta.yaml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_static/anaconda-icon.js +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_static/favicon.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_static/logo-dark.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_static/logo.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_templates/class-template.rst +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_templates/doc_version.html +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/_templates/module-template.rst +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/about/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/api-reference/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/developer/coding-conventions.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/developer/dependency-management.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/developer/getting-started.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/developer/gui.ipynb +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/developer/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/installation.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/reduction-workflow-guidelines.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/tof/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/docs/user-guide/widget.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/base.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/ci.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/dev.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/docs.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/make_base.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/mypy.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/nightly.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/static.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/test.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/requirements/wheels.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/resources/logo.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/setup.cfg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/data.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/live/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/live/raw.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/live/roi.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/live/workflow.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/logging.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/nexus/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/nexus/_nexus_loader.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/nexus/json_generator.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/nexus/json_nexus.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/parameter.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/py.typed +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/scripts/grow_nexus.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/streaming.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/time_of_flight/to_events.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/ui.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/uncertainty.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_base.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_binedges_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_bounds_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_config.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_filename_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_linspace_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_optional_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_spinner.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_string_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_switchable_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/ess/reduce/widgets/_vector_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/essreduce.egg-info/dependency_links.txt +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/essreduce.egg-info/entry_points.txt +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/src/essreduce.egg-info/top_level.txt +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/live/raw_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/live/roi_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_generator_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/array_dataset.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/dataset.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/detector.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/entry.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/event_data.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/instrument.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_examples/log.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/nexus/json_nexus_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/package_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/scripts/test_grow_nexus.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/time_of_flight/to_events_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/uncertainty_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tests/widget_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.1}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: essreduce
|
|
3
|
-
Version: 25.
|
|
3
|
+
Version: 25.5.1
|
|
4
4
|
Summary: Common data reduction tools for the ESS facility
|
|
5
5
|
Author: Scipp contributors
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -61,7 +61,7 @@ Requires-Dist: numba; extra == "test"
|
|
|
61
61
|
Requires-Dist: pooch; extra == "test"
|
|
62
62
|
Requires-Dist: pytest; extra == "test"
|
|
63
63
|
Requires-Dist: scipy>=1.7.0; extra == "test"
|
|
64
|
-
Requires-Dist: tof>=25.
|
|
64
|
+
Requires-Dist: tof>=25.05.0; extra == "test"
|
|
65
65
|
Dynamic: license-file
|
|
66
66
|
|
|
67
67
|
[](CODE_OF_CONDUCT.md)
|
|
@@ -267,4 +267,7 @@ doctest_default_flags = (
|
|
|
267
267
|
linkcheck_ignore = [
|
|
268
268
|
# Specific lines in Github blobs cannot be found by linkcheck.
|
|
269
269
|
r'https?://github\.com/.*?/blob/[a-f0-9]+/.+?#',
|
|
270
|
+
# Linkcheck seems to be denied access by some DOI resolvers.
|
|
271
|
+
# Since DOIs are supposed to be permanent, we don't need to check them.'
|
|
272
|
+
r'https://doi\.org/',
|
|
270
273
|
]
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"source": [
|
|
24
24
|
"import plopp as pp\n",
|
|
25
25
|
"import scipp as sc\n",
|
|
26
|
-
"import sciline as sl\n",
|
|
27
26
|
"from scippneutron.chopper import DiskChopper\n",
|
|
27
|
+
"from ess.reduce.nexus.types import DetectorData, SampleRun\n",
|
|
28
28
|
"from ess.reduce import time_of_flight"
|
|
29
29
|
]
|
|
30
30
|
},
|
|
@@ -305,17 +305,17 @@
|
|
|
305
305
|
"metadata": {},
|
|
306
306
|
"outputs": [],
|
|
307
307
|
"source": [
|
|
308
|
-
"
|
|
309
|
-
"
|
|
308
|
+
"wf = time_of_flight.GenericTofWorkflow(\n",
|
|
309
|
+
" tof_lut_provider=time_of_flight.TofLutProvider.TOF\n",
|
|
310
310
|
")\n",
|
|
311
|
-
"
|
|
312
|
-
"
|
|
313
|
-
"
|
|
311
|
+
"wf[DetectorData[SampleRun]] = raw_data\n",
|
|
312
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
313
|
+
"wf[time_of_flight.LtotalRange] = (\n",
|
|
314
314
|
" sc.scalar(75.5, unit=\"m\"),\n",
|
|
315
315
|
" sc.scalar(78.0, unit=\"m\"),\n",
|
|
316
316
|
")\n",
|
|
317
317
|
"\n",
|
|
318
|
-
"
|
|
318
|
+
"wf.visualize(time_of_flight.DetectorTofData[SampleRun])"
|
|
319
319
|
]
|
|
320
320
|
},
|
|
321
321
|
{
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
"metadata": {},
|
|
336
336
|
"outputs": [],
|
|
337
337
|
"source": [
|
|
338
|
-
"
|
|
338
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
339
339
|
" choppers=disk_choppers, source_position=source_position, neutrons=2_000_000\n",
|
|
340
340
|
")"
|
|
341
341
|
]
|
|
@@ -363,7 +363,7 @@
|
|
|
363
363
|
"metadata": {},
|
|
364
364
|
"outputs": [],
|
|
365
365
|
"source": [
|
|
366
|
-
"sim =
|
|
366
|
+
"sim = wf.compute(time_of_flight.SimulationResults)\n",
|
|
367
367
|
"\n",
|
|
368
368
|
"\n",
|
|
369
369
|
"def to_event_time_offset(sim):\n",
|
|
@@ -402,17 +402,35 @@
|
|
|
402
402
|
"metadata": {},
|
|
403
403
|
"outputs": [],
|
|
404
404
|
"source": [
|
|
405
|
-
"table =
|
|
405
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
406
406
|
"\n",
|
|
407
407
|
"# Overlay mean on the figure above\n",
|
|
408
408
|
"table[\"distance\", 13].plot(ax=fig2.ax, color=\"C1\", ls=\"-\", marker=None)"
|
|
409
409
|
]
|
|
410
410
|
},
|
|
411
411
|
{
|
|
412
|
-
"attachments": {},
|
|
413
412
|
"cell_type": "markdown",
|
|
414
413
|
"id": "27",
|
|
415
414
|
"metadata": {},
|
|
415
|
+
"source": [
|
|
416
|
+
"The full table covers a range of distances, and looks like"
|
|
417
|
+
]
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"cell_type": "code",
|
|
421
|
+
"execution_count": null,
|
|
422
|
+
"id": "28",
|
|
423
|
+
"metadata": {},
|
|
424
|
+
"outputs": [],
|
|
425
|
+
"source": [
|
|
426
|
+
"table.plot()"
|
|
427
|
+
]
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"attachments": {},
|
|
431
|
+
"cell_type": "markdown",
|
|
432
|
+
"id": "29",
|
|
433
|
+
"metadata": {},
|
|
416
434
|
"source": [
|
|
417
435
|
"### Computing a time-of-flight coordinate\n",
|
|
418
436
|
"\n",
|
|
@@ -422,17 +440,17 @@
|
|
|
422
440
|
{
|
|
423
441
|
"cell_type": "code",
|
|
424
442
|
"execution_count": null,
|
|
425
|
-
"id": "
|
|
443
|
+
"id": "30",
|
|
426
444
|
"metadata": {},
|
|
427
445
|
"outputs": [],
|
|
428
446
|
"source": [
|
|
429
|
-
"tofs =
|
|
447
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
430
448
|
"tofs"
|
|
431
449
|
]
|
|
432
450
|
},
|
|
433
451
|
{
|
|
434
452
|
"cell_type": "markdown",
|
|
435
|
-
"id": "
|
|
453
|
+
"id": "31",
|
|
436
454
|
"metadata": {},
|
|
437
455
|
"source": [
|
|
438
456
|
"Histogramming the data for a plot should show a profile with 6 bumps that correspond to the frames:"
|
|
@@ -441,7 +459,7 @@
|
|
|
441
459
|
{
|
|
442
460
|
"cell_type": "code",
|
|
443
461
|
"execution_count": null,
|
|
444
|
-
"id": "
|
|
462
|
+
"id": "32",
|
|
445
463
|
"metadata": {},
|
|
446
464
|
"outputs": [],
|
|
447
465
|
"source": [
|
|
@@ -450,7 +468,7 @@
|
|
|
450
468
|
},
|
|
451
469
|
{
|
|
452
470
|
"cell_type": "markdown",
|
|
453
|
-
"id": "
|
|
471
|
+
"id": "33",
|
|
454
472
|
"metadata": {},
|
|
455
473
|
"source": [
|
|
456
474
|
"### Converting to wavelength\n",
|
|
@@ -461,7 +479,7 @@
|
|
|
461
479
|
{
|
|
462
480
|
"cell_type": "code",
|
|
463
481
|
"execution_count": null,
|
|
464
|
-
"id": "
|
|
482
|
+
"id": "34",
|
|
465
483
|
"metadata": {},
|
|
466
484
|
"outputs": [],
|
|
467
485
|
"source": [
|
|
@@ -481,7 +499,7 @@
|
|
|
481
499
|
},
|
|
482
500
|
{
|
|
483
501
|
"cell_type": "markdown",
|
|
484
|
-
"id": "
|
|
502
|
+
"id": "35",
|
|
485
503
|
"metadata": {},
|
|
486
504
|
"source": [
|
|
487
505
|
"### Comparing to the ground truth\n",
|
|
@@ -493,7 +511,7 @@
|
|
|
493
511
|
{
|
|
494
512
|
"cell_type": "code",
|
|
495
513
|
"execution_count": null,
|
|
496
|
-
"id": "
|
|
514
|
+
"id": "36",
|
|
497
515
|
"metadata": {},
|
|
498
516
|
"outputs": [],
|
|
499
517
|
"source": [
|
|
@@ -510,7 +528,7 @@
|
|
|
510
528
|
},
|
|
511
529
|
{
|
|
512
530
|
"cell_type": "markdown",
|
|
513
|
-
"id": "
|
|
531
|
+
"id": "37",
|
|
514
532
|
"metadata": {},
|
|
515
533
|
"source": [
|
|
516
534
|
"## Multiple detector pixels\n",
|
|
@@ -526,7 +544,7 @@
|
|
|
526
544
|
{
|
|
527
545
|
"cell_type": "code",
|
|
528
546
|
"execution_count": null,
|
|
529
|
-
"id": "
|
|
547
|
+
"id": "38",
|
|
530
548
|
"metadata": {},
|
|
531
549
|
"outputs": [],
|
|
532
550
|
"source": [
|
|
@@ -544,7 +562,7 @@
|
|
|
544
562
|
},
|
|
545
563
|
{
|
|
546
564
|
"cell_type": "markdown",
|
|
547
|
-
"id": "
|
|
565
|
+
"id": "39",
|
|
548
566
|
"metadata": {},
|
|
549
567
|
"source": [
|
|
550
568
|
"Our raw data has now a `detector_number` dimension of length 2.\n",
|
|
@@ -555,7 +573,7 @@
|
|
|
555
573
|
{
|
|
556
574
|
"cell_type": "code",
|
|
557
575
|
"execution_count": null,
|
|
558
|
-
"id": "
|
|
576
|
+
"id": "40",
|
|
559
577
|
"metadata": {},
|
|
560
578
|
"outputs": [],
|
|
561
579
|
"source": [
|
|
@@ -570,7 +588,7 @@
|
|
|
570
588
|
},
|
|
571
589
|
{
|
|
572
590
|
"cell_type": "markdown",
|
|
573
|
-
"id": "
|
|
591
|
+
"id": "41",
|
|
574
592
|
"metadata": {},
|
|
575
593
|
"source": [
|
|
576
594
|
"Computing time-of-flight is done in the same way as above.\n",
|
|
@@ -580,16 +598,16 @@
|
|
|
580
598
|
{
|
|
581
599
|
"cell_type": "code",
|
|
582
600
|
"execution_count": null,
|
|
583
|
-
"id": "
|
|
601
|
+
"id": "42",
|
|
584
602
|
"metadata": {},
|
|
585
603
|
"outputs": [],
|
|
586
604
|
"source": [
|
|
587
605
|
"# Update workflow\n",
|
|
588
|
-
"
|
|
589
|
-
"
|
|
606
|
+
"wf[DetectorData[SampleRun]] = raw_data\n",
|
|
607
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
590
608
|
"\n",
|
|
591
609
|
"# Compute tofs and wavelengths\n",
|
|
592
|
-
"tofs =
|
|
610
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
593
611
|
"wav_wfm = tofs.transform_coords(\"wavelength\", graph=graph)\n",
|
|
594
612
|
"\n",
|
|
595
613
|
"# Compare in plot\n",
|
|
@@ -614,7 +632,7 @@
|
|
|
614
632
|
},
|
|
615
633
|
{
|
|
616
634
|
"cell_type": "markdown",
|
|
617
|
-
"id": "
|
|
635
|
+
"id": "43",
|
|
618
636
|
"metadata": {},
|
|
619
637
|
"source": [
|
|
620
638
|
"## Handling time overlap between subframes\n",
|
|
@@ -634,7 +652,7 @@
|
|
|
634
652
|
{
|
|
635
653
|
"cell_type": "code",
|
|
636
654
|
"execution_count": null,
|
|
637
|
-
"id": "
|
|
655
|
+
"id": "44",
|
|
638
656
|
"metadata": {},
|
|
639
657
|
"outputs": [],
|
|
640
658
|
"source": [
|
|
@@ -665,7 +683,7 @@
|
|
|
665
683
|
},
|
|
666
684
|
{
|
|
667
685
|
"cell_type": "markdown",
|
|
668
|
-
"id": "
|
|
686
|
+
"id": "45",
|
|
669
687
|
"metadata": {},
|
|
670
688
|
"source": [
|
|
671
689
|
"We can now see that there is no longer a gap between the two frames at the center of each pulse (green region).\n",
|
|
@@ -677,18 +695,18 @@
|
|
|
677
695
|
{
|
|
678
696
|
"cell_type": "code",
|
|
679
697
|
"execution_count": null,
|
|
680
|
-
"id": "
|
|
698
|
+
"id": "46",
|
|
681
699
|
"metadata": {},
|
|
682
700
|
"outputs": [],
|
|
683
701
|
"source": [
|
|
684
702
|
"# Update workflow\n",
|
|
685
|
-
"
|
|
703
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
686
704
|
" choppers=disk_choppers, source_position=source_position, neutrons=2_000_000\n",
|
|
687
705
|
")\n",
|
|
688
|
-
"
|
|
689
|
-
"
|
|
706
|
+
"wf[DetectorData[SampleRun]] = ess_beamline.get_monitor(\"detector\")[0]\n",
|
|
707
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
690
708
|
"\n",
|
|
691
|
-
"sim =
|
|
709
|
+
"sim = wf.compute(time_of_flight.SimulationResults)\n",
|
|
692
710
|
"\n",
|
|
693
711
|
"events = to_event_time_offset(sim)\n",
|
|
694
712
|
"events.hist(wavelength=300, event_time_offset=300).plot(norm=\"log\")"
|
|
@@ -696,7 +714,7 @@
|
|
|
696
714
|
},
|
|
697
715
|
{
|
|
698
716
|
"cell_type": "markdown",
|
|
699
|
-
"id": "
|
|
717
|
+
"id": "47",
|
|
700
718
|
"metadata": {},
|
|
701
719
|
"source": [
|
|
702
720
|
"The data in the lookup table contains both the mean time-of-flight for each distance and time-of-arrival bin,\n",
|
|
@@ -713,17 +731,17 @@
|
|
|
713
731
|
{
|
|
714
732
|
"cell_type": "code",
|
|
715
733
|
"execution_count": null,
|
|
716
|
-
"id": "
|
|
734
|
+
"id": "48",
|
|
717
735
|
"metadata": {},
|
|
718
736
|
"outputs": [],
|
|
719
737
|
"source": [
|
|
720
|
-
"table =
|
|
738
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
721
739
|
"table.plot() / (sc.stddevs(table) / sc.values(table)).plot(norm=\"log\")"
|
|
722
740
|
]
|
|
723
741
|
},
|
|
724
742
|
{
|
|
725
743
|
"cell_type": "markdown",
|
|
726
|
-
"id": "
|
|
744
|
+
"id": "49",
|
|
727
745
|
"metadata": {},
|
|
728
746
|
"source": [
|
|
729
747
|
"The workflow has a parameter which is used to mask out regions where the standard deviation is above a certain threshold.\n",
|
|
@@ -737,18 +755,18 @@
|
|
|
737
755
|
{
|
|
738
756
|
"cell_type": "code",
|
|
739
757
|
"execution_count": null,
|
|
740
|
-
"id": "
|
|
758
|
+
"id": "50",
|
|
741
759
|
"metadata": {},
|
|
742
760
|
"outputs": [],
|
|
743
761
|
"source": [
|
|
744
|
-
"
|
|
762
|
+
"wf[time_of_flight.LookupTableRelativeErrorThreshold] = 0.01\n",
|
|
745
763
|
"\n",
|
|
746
|
-
"
|
|
764
|
+
"wf.compute(time_of_flight.TimeOfFlightLookupTable).plot()"
|
|
747
765
|
]
|
|
748
766
|
},
|
|
749
767
|
{
|
|
750
768
|
"cell_type": "markdown",
|
|
751
|
-
"id": "
|
|
769
|
+
"id": "51",
|
|
752
770
|
"metadata": {},
|
|
753
771
|
"source": [
|
|
754
772
|
"We can now see that the central region is masked out.\n",
|
|
@@ -763,12 +781,12 @@
|
|
|
763
781
|
{
|
|
764
782
|
"cell_type": "code",
|
|
765
783
|
"execution_count": null,
|
|
766
|
-
"id": "
|
|
784
|
+
"id": "52",
|
|
767
785
|
"metadata": {},
|
|
768
786
|
"outputs": [],
|
|
769
787
|
"source": [
|
|
770
788
|
"# Compute time-of-flight\n",
|
|
771
|
-
"tofs =
|
|
789
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
772
790
|
"# Compute wavelength\n",
|
|
773
791
|
"wav_wfm = tofs.transform_coords(\"wavelength\", graph=graph)\n",
|
|
774
792
|
"\n",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"source": [
|
|
32
32
|
"import plopp as pp\n",
|
|
33
33
|
"import scipp as sc\n",
|
|
34
|
-
"import sciline as sl\n",
|
|
35
34
|
"from scippneutron.chopper import DiskChopper\n",
|
|
35
|
+
"from ess.reduce.nexus.types import DetectorData, SampleRun\n",
|
|
36
36
|
"from ess.reduce import time_of_flight\n",
|
|
37
37
|
"import tof\n",
|
|
38
38
|
"\n",
|
|
@@ -159,14 +159,14 @@
|
|
|
159
159
|
"metadata": {},
|
|
160
160
|
"outputs": [],
|
|
161
161
|
"source": [
|
|
162
|
-
"
|
|
163
|
-
"
|
|
162
|
+
"wf = time_of_flight.GenericTofWorkflow(\n",
|
|
163
|
+
" tof_lut_provider=time_of_flight.TofLutProvider.TOF\n",
|
|
164
164
|
")\n",
|
|
165
165
|
"\n",
|
|
166
|
-
"
|
|
167
|
-
"
|
|
168
|
-
"
|
|
169
|
-
"
|
|
166
|
+
"wf[DetectorData[SampleRun]] = nxevent_data\n",
|
|
167
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = nxevent_data.coords[\"Ltotal\"]\n",
|
|
168
|
+
"wf[time_of_flight.LtotalRange] = detectors[0].distance, detectors[-1].distance\n",
|
|
169
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
170
170
|
" choppers={\n",
|
|
171
171
|
" \"chopper\": DiskChopper(\n",
|
|
172
172
|
" frequency=-chopper.frequency,\n",
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
" source_position=sc.vector([0, 0, 0], unit=chopper.distance.unit),\n",
|
|
185
185
|
")\n",
|
|
186
186
|
"\n",
|
|
187
|
-
"
|
|
187
|
+
"wf.visualize(time_of_flight.DetectorTofData[SampleRun])"
|
|
188
188
|
]
|
|
189
189
|
},
|
|
190
190
|
{
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
"metadata": {},
|
|
226
226
|
"outputs": [],
|
|
227
227
|
"source": [
|
|
228
|
-
"table =
|
|
228
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
229
229
|
"table.plot()"
|
|
230
230
|
]
|
|
231
231
|
},
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
"metadata": {},
|
|
247
247
|
"outputs": [],
|
|
248
248
|
"source": [
|
|
249
|
-
"tofs =
|
|
249
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
250
250
|
"\n",
|
|
251
251
|
"tof_hist = tofs.hist(tof=sc.scalar(500.0, unit=\"us\"))\n",
|
|
252
252
|
"pp.plot({det.name: tof_hist[\"detector_number\", i] for i, det in enumerate(detectors)})"
|
|
@@ -370,17 +370,17 @@
|
|
|
370
370
|
"metadata": {},
|
|
371
371
|
"outputs": [],
|
|
372
372
|
"source": [
|
|
373
|
-
"
|
|
374
|
-
"
|
|
373
|
+
"wf = time_of_flight.GenericTofWorkflow(\n",
|
|
374
|
+
" tof_lut_provider=time_of_flight.TofLutProvider.TOF\n",
|
|
375
375
|
")\n",
|
|
376
376
|
"\n",
|
|
377
377
|
"nxevent_data = results.to_nxevent_data()\n",
|
|
378
378
|
"\n",
|
|
379
|
-
"
|
|
380
|
-
"
|
|
381
|
-
"
|
|
382
|
-
"
|
|
383
|
-
"
|
|
379
|
+
"wf[time_of_flight.PulseStride] = 2\n",
|
|
380
|
+
"wf[DetectorData[SampleRun]] = nxevent_data\n",
|
|
381
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = nxevent_data.coords[\"Ltotal\"]\n",
|
|
382
|
+
"wf[time_of_flight.LtotalRange] = detectors[0].distance, detectors[-1].distance\n",
|
|
383
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
384
384
|
" choppers={\n",
|
|
385
385
|
" ch.name: DiskChopper(\n",
|
|
386
386
|
" frequency=-ch.frequency,\n",
|
|
@@ -399,8 +399,8 @@
|
|
|
399
399
|
" source_position=sc.vector([0, 0, 0], unit=chopper.distance.unit),\n",
|
|
400
400
|
")\n",
|
|
401
401
|
"\n",
|
|
402
|
-
"
|
|
403
|
-
"
|
|
402
|
+
"wf[time_of_flight.DistanceResolution] = sc.scalar(0.5, unit=\"m\")\n",
|
|
403
|
+
"wf[time_of_flight.LookupTableRelativeErrorThreshold] = 0.1"
|
|
404
404
|
]
|
|
405
405
|
},
|
|
406
406
|
{
|
|
@@ -418,9 +418,9 @@
|
|
|
418
418
|
"metadata": {},
|
|
419
419
|
"outputs": [],
|
|
420
420
|
"source": [
|
|
421
|
-
"table =
|
|
421
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
422
422
|
"\n",
|
|
423
|
-
"table
|
|
423
|
+
"table.plot()"
|
|
424
424
|
]
|
|
425
425
|
},
|
|
426
426
|
{
|
|
@@ -438,7 +438,7 @@
|
|
|
438
438
|
"metadata": {},
|
|
439
439
|
"outputs": [],
|
|
440
440
|
"source": [
|
|
441
|
-
"tofs =
|
|
441
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
442
442
|
"\n",
|
|
443
443
|
"tof_hist = tofs.hist(tof=sc.scalar(500.0, unit=\"us\"))\n",
|
|
444
444
|
"pp.plot({det.name: tof_hist[\"detector_number\", i] for i, det in enumerate(detectors)})"
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"import numpy as np\n",
|
|
25
25
|
"import plopp as pp\n",
|
|
26
26
|
"import scipp as sc\n",
|
|
27
|
-
"import sciline as sl\n",
|
|
28
27
|
"from scippneutron.chopper import DiskChopper\n",
|
|
28
|
+
"from ess.reduce.nexus.types import DetectorData, SampleRun\n",
|
|
29
29
|
"from ess.reduce import time_of_flight"
|
|
30
30
|
]
|
|
31
31
|
},
|
|
@@ -326,15 +326,15 @@
|
|
|
326
326
|
"metadata": {},
|
|
327
327
|
"outputs": [],
|
|
328
328
|
"source": [
|
|
329
|
-
"
|
|
330
|
-
"
|
|
329
|
+
"wf = time_of_flight.GenericTofWorkflow(\n",
|
|
330
|
+
" tof_lut_provider=time_of_flight.TofLutProvider.TOF\n",
|
|
331
331
|
")\n",
|
|
332
|
-
"
|
|
333
|
-
"
|
|
334
|
-
"
|
|
335
|
-
"
|
|
332
|
+
"wf[DetectorData[SampleRun]] = raw_data\n",
|
|
333
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
334
|
+
"wf[time_of_flight.LtotalRange] = Ltotal, Ltotal\n",
|
|
335
|
+
"wf[time_of_flight.LookupTableRelativeErrorThreshold] = 0.1\n",
|
|
336
336
|
"\n",
|
|
337
|
-
"
|
|
337
|
+
"wf.visualize(time_of_flight.DetectorTofData[SampleRun])"
|
|
338
338
|
]
|
|
339
339
|
},
|
|
340
340
|
{
|
|
@@ -354,10 +354,8 @@
|
|
|
354
354
|
"metadata": {},
|
|
355
355
|
"outputs": [],
|
|
356
356
|
"source": [
|
|
357
|
-
"
|
|
358
|
-
" choppers=disk_choppers
|
|
359
|
-
" source_position=source_position,\n",
|
|
360
|
-
" neutrons=3_000_000\n",
|
|
357
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
358
|
+
" choppers=disk_choppers, source_position=source_position, neutrons=3_000_000\n",
|
|
361
359
|
")"
|
|
362
360
|
]
|
|
363
361
|
},
|
|
@@ -384,7 +382,7 @@
|
|
|
384
382
|
"metadata": {},
|
|
385
383
|
"outputs": [],
|
|
386
384
|
"source": [
|
|
387
|
-
"sim =
|
|
385
|
+
"sim = wf.compute(time_of_flight.SimulationResults)\n",
|
|
388
386
|
"# Compute time-of-arrival at the detector\n",
|
|
389
387
|
"tarrival = sim.time_of_arrival + ((Ltotal - sim.distance) / sim.speed).to(unit=\"us\")\n",
|
|
390
388
|
"# Compute time-of-flight at the detector\n",
|
|
@@ -416,7 +414,7 @@
|
|
|
416
414
|
"metadata": {},
|
|
417
415
|
"outputs": [],
|
|
418
416
|
"source": [
|
|
419
|
-
"table =
|
|
417
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
420
418
|
"\n",
|
|
421
419
|
"# Overlay mean on the figure above\n",
|
|
422
420
|
"table[\"distance\", 1].plot(ax=fig2.ax, color=\"C1\", ls=\"-\", marker=None)\n",
|
|
@@ -450,7 +448,7 @@
|
|
|
450
448
|
"metadata": {},
|
|
451
449
|
"outputs": [],
|
|
452
450
|
"source": [
|
|
453
|
-
"tofs =
|
|
451
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
454
452
|
"tofs"
|
|
455
453
|
]
|
|
456
454
|
},
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# SHA1:082d6bf55d8a06cdc1dd3a0a78dd31c318c26424
|
|
2
2
|
#
|
|
3
|
-
# This file
|
|
3
|
+
# This file was generated by pip-compile-multi.
|
|
4
4
|
# To update, run:
|
|
5
5
|
#
|
|
6
|
-
#
|
|
6
|
+
# requirements upgrade
|
|
7
7
|
#
|
|
8
8
|
annotated-types==0.7.0
|
|
9
9
|
# via pydantic
|
|
10
|
-
contourpy==1.3.
|
|
10
|
+
contourpy==1.3.2
|
|
11
11
|
# via matplotlib
|
|
12
12
|
cyclebane==24.10.0
|
|
13
13
|
# via sciline
|
|
@@ -35,30 +35,29 @@ matplotlib==3.10.1
|
|
|
35
35
|
# via
|
|
36
36
|
# mpltoolbox
|
|
37
37
|
# plopp
|
|
38
|
-
mpltoolbox==
|
|
38
|
+
mpltoolbox==25.4.0
|
|
39
39
|
# via scippneutron
|
|
40
40
|
networkx==3.4.2
|
|
41
41
|
# via cyclebane
|
|
42
|
-
numpy==2.2.
|
|
42
|
+
numpy==2.2.5
|
|
43
43
|
# via
|
|
44
44
|
# contourpy
|
|
45
45
|
# h5py
|
|
46
46
|
# matplotlib
|
|
47
|
-
# mpltoolbox
|
|
48
47
|
# scipp
|
|
49
48
|
# scippneutron
|
|
50
49
|
# scipy
|
|
51
|
-
packaging==
|
|
50
|
+
packaging==25.0
|
|
52
51
|
# via
|
|
53
52
|
# lazy-loader
|
|
54
53
|
# matplotlib
|
|
55
|
-
pillow==11.1
|
|
54
|
+
pillow==11.2.1
|
|
56
55
|
# via matplotlib
|
|
57
|
-
plopp==25.
|
|
56
|
+
plopp==25.4.1
|
|
58
57
|
# via scippneutron
|
|
59
|
-
pydantic==2.11.
|
|
58
|
+
pydantic==2.11.4
|
|
60
59
|
# via scippneutron
|
|
61
|
-
pydantic-core==2.33.
|
|
60
|
+
pydantic-core==2.33.2
|
|
62
61
|
# via pydantic
|
|
63
62
|
pyparsing==3.2.3
|
|
64
63
|
# via matplotlib
|
|
@@ -69,7 +68,7 @@ python-dateutil==2.9.0.post0
|
|
|
69
68
|
# scippnexus
|
|
70
69
|
sciline==25.4.1
|
|
71
70
|
# via -r base.in
|
|
72
|
-
scipp==25.
|
|
71
|
+
scipp==25.5.0
|
|
73
72
|
# via
|
|
74
73
|
# -r base.in
|
|
75
74
|
# scippneutron
|
|
@@ -86,7 +85,7 @@ scipy==1.15.2
|
|
|
86
85
|
# scippnexus
|
|
87
86
|
six==1.17.0
|
|
88
87
|
# via python-dateutil
|
|
89
|
-
typing-extensions==4.13.
|
|
88
|
+
typing-extensions==4.13.2
|
|
90
89
|
# via
|
|
91
90
|
# pydantic
|
|
92
91
|
# pydantic-core
|