essreduce 25.4.1__tar.gz → 25.5.0__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.0}/.copier-answers.yml +1 -1
- {essreduce-25.4.1/src/essreduce.egg-info → essreduce-25.5.0}/PKG-INFO +2 -2
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/conf.py +3 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/tof/dream.ipynb +63 -47
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/tof/frame-unwrapping.ipynb +20 -24
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/tof/wfm.ipynb +11 -13
- {essreduce-25.4.1 → essreduce-25.5.0}/pyproject.toml +1 -1
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/base.txt +12 -13
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/basetest.in +1 -1
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/basetest.txt +22 -22
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/ci.txt +7 -7
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/dev.txt +7 -7
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/docs.txt +17 -17
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/mypy.txt +3 -3
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/nightly.txt +20 -22
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/static.txt +3 -3
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/test.txt +2 -2
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/wheels.txt +3 -3
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/nexus/workflow.py +2 -28
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/__init__.py +22 -10
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/eto_to_tof.py +244 -150
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/fakes.py +2 -2
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/interpolator_numba.py +32 -61
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/interpolator_scipy.py +13 -14
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/types.py +53 -27
- essreduce-25.5.0/src/ess/reduce/time_of_flight/workflow.py +61 -0
- essreduce-25.5.0/src/ess/reduce/utils.py +36 -0
- {essreduce-25.4.1 → essreduce-25.5.0/src/essreduce.egg-info}/PKG-INFO +2 -2
- {essreduce-25.4.1 → essreduce-25.5.0}/src/essreduce.egg-info/SOURCES.txt +2 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/essreduce.egg-info/requires.txt +1 -1
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/streaming_test.py +9 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/time_of_flight/interpolator_test.py +31 -26
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/time_of_flight/unwrap_test.py +25 -21
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/time_of_flight/wfm_test.py +10 -9
- {essreduce-25.4.1 → essreduce-25.5.0}/.copier-answers.ess.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/ISSUE_TEMPLATE/blank.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/dependabot.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/ci.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/docs.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/nightly_at_main.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/nightly_at_release.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/python-version-ci +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/release.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/test.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/unpinned.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.github/workflows/weekly_windows_macos.yml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.gitignore +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.pre-commit-config.yaml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/.python-version +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/CODE_OF_CONDUCT.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/CONTRIBUTING.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/LICENSE +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/MANIFEST.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/README.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/conda/meta.yaml +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_static/anaconda-icon.js +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_static/favicon.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_static/logo-dark.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_static/logo.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_templates/class-template.rst +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_templates/doc_version.html +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/_templates/module-template.rst +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/about/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/api-reference/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/developer/coding-conventions.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/developer/dependency-management.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/developer/getting-started.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/developer/gui.ipynb +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/developer/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/installation.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/reduction-workflow-guidelines.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/tof/index.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/docs/user-guide/widget.md +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/base.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/ci.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/dev.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/docs.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/make_base.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/mypy.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/nightly.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/static.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/test.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/requirements/wheels.in +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/resources/logo.svg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/setup.cfg +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/data.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/live/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/live/raw.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/live/roi.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/live/workflow.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/logging.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/nexus/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/nexus/_nexus_loader.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/nexus/json_generator.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/nexus/json_nexus.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/nexus/types.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/parameter.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/py.typed +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/scripts/grow_nexus.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/streaming.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/simulation.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/time_of_flight/to_events.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/ui.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/uncertainty.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/__init__.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_base.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_binedges_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_bounds_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_config.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_filename_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_linspace_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_optional_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_spinner.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_string_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_switchable_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/widgets/_vector_widget.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/ess/reduce/workflow.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/essreduce.egg-info/dependency_links.txt +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/essreduce.egg-info/entry_points.txt +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/src/essreduce.egg-info/top_level.txt +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/live/raw_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/live/roi_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_generator_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/array_dataset.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/dataset.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/detector.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/entry.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/event_data.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/instrument.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_examples/log.json +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/json_nexus_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/nexus_loader_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/nexus/workflow_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/package_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/scripts/test_grow_nexus.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/time_of_flight/to_events_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/uncertainty_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/tests/widget_test.py +0 -0
- {essreduce-25.4.1 → essreduce-25.5.0}/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.0
|
|
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,15 @@
|
|
|
305
305
|
"metadata": {},
|
|
306
306
|
"outputs": [],
|
|
307
307
|
"source": [
|
|
308
|
-
"
|
|
309
|
-
"
|
|
310
|
-
"
|
|
311
|
-
"
|
|
312
|
-
"workflow[time_of_flight.Ltotal] = Ltotal\n",
|
|
313
|
-
"workflow[time_of_flight.LtotalRange] = (\n",
|
|
308
|
+
"wf = time_of_flight.GenericTofWorkflow()\n",
|
|
309
|
+
"wf[DetectorData[SampleRun]] = raw_data\n",
|
|
310
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
311
|
+
"wf[time_of_flight.LtotalRange] = (\n",
|
|
314
312
|
" sc.scalar(75.5, unit=\"m\"),\n",
|
|
315
313
|
" sc.scalar(78.0, unit=\"m\"),\n",
|
|
316
314
|
")\n",
|
|
317
315
|
"\n",
|
|
318
|
-
"
|
|
316
|
+
"wf.visualize(time_of_flight.DetectorTofData[SampleRun])"
|
|
319
317
|
]
|
|
320
318
|
},
|
|
321
319
|
{
|
|
@@ -335,7 +333,7 @@
|
|
|
335
333
|
"metadata": {},
|
|
336
334
|
"outputs": [],
|
|
337
335
|
"source": [
|
|
338
|
-
"
|
|
336
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
339
337
|
" choppers=disk_choppers, source_position=source_position, neutrons=2_000_000\n",
|
|
340
338
|
")"
|
|
341
339
|
]
|
|
@@ -363,7 +361,7 @@
|
|
|
363
361
|
"metadata": {},
|
|
364
362
|
"outputs": [],
|
|
365
363
|
"source": [
|
|
366
|
-
"sim =
|
|
364
|
+
"sim = wf.compute(time_of_flight.SimulationResults)\n",
|
|
367
365
|
"\n",
|
|
368
366
|
"\n",
|
|
369
367
|
"def to_event_time_offset(sim):\n",
|
|
@@ -402,17 +400,35 @@
|
|
|
402
400
|
"metadata": {},
|
|
403
401
|
"outputs": [],
|
|
404
402
|
"source": [
|
|
405
|
-
"table =
|
|
403
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
406
404
|
"\n",
|
|
407
405
|
"# Overlay mean on the figure above\n",
|
|
408
406
|
"table[\"distance\", 13].plot(ax=fig2.ax, color=\"C1\", ls=\"-\", marker=None)"
|
|
409
407
|
]
|
|
410
408
|
},
|
|
411
409
|
{
|
|
412
|
-
"attachments": {},
|
|
413
410
|
"cell_type": "markdown",
|
|
414
411
|
"id": "27",
|
|
415
412
|
"metadata": {},
|
|
413
|
+
"source": [
|
|
414
|
+
"The full table covers a range of distances, and looks like"
|
|
415
|
+
]
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"cell_type": "code",
|
|
419
|
+
"execution_count": null,
|
|
420
|
+
"id": "28",
|
|
421
|
+
"metadata": {},
|
|
422
|
+
"outputs": [],
|
|
423
|
+
"source": [
|
|
424
|
+
"table.plot()"
|
|
425
|
+
]
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"attachments": {},
|
|
429
|
+
"cell_type": "markdown",
|
|
430
|
+
"id": "29",
|
|
431
|
+
"metadata": {},
|
|
416
432
|
"source": [
|
|
417
433
|
"### Computing a time-of-flight coordinate\n",
|
|
418
434
|
"\n",
|
|
@@ -422,17 +438,17 @@
|
|
|
422
438
|
{
|
|
423
439
|
"cell_type": "code",
|
|
424
440
|
"execution_count": null,
|
|
425
|
-
"id": "
|
|
441
|
+
"id": "30",
|
|
426
442
|
"metadata": {},
|
|
427
443
|
"outputs": [],
|
|
428
444
|
"source": [
|
|
429
|
-
"tofs =
|
|
445
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
430
446
|
"tofs"
|
|
431
447
|
]
|
|
432
448
|
},
|
|
433
449
|
{
|
|
434
450
|
"cell_type": "markdown",
|
|
435
|
-
"id": "
|
|
451
|
+
"id": "31",
|
|
436
452
|
"metadata": {},
|
|
437
453
|
"source": [
|
|
438
454
|
"Histogramming the data for a plot should show a profile with 6 bumps that correspond to the frames:"
|
|
@@ -441,7 +457,7 @@
|
|
|
441
457
|
{
|
|
442
458
|
"cell_type": "code",
|
|
443
459
|
"execution_count": null,
|
|
444
|
-
"id": "
|
|
460
|
+
"id": "32",
|
|
445
461
|
"metadata": {},
|
|
446
462
|
"outputs": [],
|
|
447
463
|
"source": [
|
|
@@ -450,7 +466,7 @@
|
|
|
450
466
|
},
|
|
451
467
|
{
|
|
452
468
|
"cell_type": "markdown",
|
|
453
|
-
"id": "
|
|
469
|
+
"id": "33",
|
|
454
470
|
"metadata": {},
|
|
455
471
|
"source": [
|
|
456
472
|
"### Converting to wavelength\n",
|
|
@@ -461,7 +477,7 @@
|
|
|
461
477
|
{
|
|
462
478
|
"cell_type": "code",
|
|
463
479
|
"execution_count": null,
|
|
464
|
-
"id": "
|
|
480
|
+
"id": "34",
|
|
465
481
|
"metadata": {},
|
|
466
482
|
"outputs": [],
|
|
467
483
|
"source": [
|
|
@@ -481,7 +497,7 @@
|
|
|
481
497
|
},
|
|
482
498
|
{
|
|
483
499
|
"cell_type": "markdown",
|
|
484
|
-
"id": "
|
|
500
|
+
"id": "35",
|
|
485
501
|
"metadata": {},
|
|
486
502
|
"source": [
|
|
487
503
|
"### Comparing to the ground truth\n",
|
|
@@ -493,7 +509,7 @@
|
|
|
493
509
|
{
|
|
494
510
|
"cell_type": "code",
|
|
495
511
|
"execution_count": null,
|
|
496
|
-
"id": "
|
|
512
|
+
"id": "36",
|
|
497
513
|
"metadata": {},
|
|
498
514
|
"outputs": [],
|
|
499
515
|
"source": [
|
|
@@ -510,7 +526,7 @@
|
|
|
510
526
|
},
|
|
511
527
|
{
|
|
512
528
|
"cell_type": "markdown",
|
|
513
|
-
"id": "
|
|
529
|
+
"id": "37",
|
|
514
530
|
"metadata": {},
|
|
515
531
|
"source": [
|
|
516
532
|
"## Multiple detector pixels\n",
|
|
@@ -526,7 +542,7 @@
|
|
|
526
542
|
{
|
|
527
543
|
"cell_type": "code",
|
|
528
544
|
"execution_count": null,
|
|
529
|
-
"id": "
|
|
545
|
+
"id": "38",
|
|
530
546
|
"metadata": {},
|
|
531
547
|
"outputs": [],
|
|
532
548
|
"source": [
|
|
@@ -544,7 +560,7 @@
|
|
|
544
560
|
},
|
|
545
561
|
{
|
|
546
562
|
"cell_type": "markdown",
|
|
547
|
-
"id": "
|
|
563
|
+
"id": "39",
|
|
548
564
|
"metadata": {},
|
|
549
565
|
"source": [
|
|
550
566
|
"Our raw data has now a `detector_number` dimension of length 2.\n",
|
|
@@ -555,7 +571,7 @@
|
|
|
555
571
|
{
|
|
556
572
|
"cell_type": "code",
|
|
557
573
|
"execution_count": null,
|
|
558
|
-
"id": "
|
|
574
|
+
"id": "40",
|
|
559
575
|
"metadata": {},
|
|
560
576
|
"outputs": [],
|
|
561
577
|
"source": [
|
|
@@ -570,7 +586,7 @@
|
|
|
570
586
|
},
|
|
571
587
|
{
|
|
572
588
|
"cell_type": "markdown",
|
|
573
|
-
"id": "
|
|
589
|
+
"id": "41",
|
|
574
590
|
"metadata": {},
|
|
575
591
|
"source": [
|
|
576
592
|
"Computing time-of-flight is done in the same way as above.\n",
|
|
@@ -580,16 +596,16 @@
|
|
|
580
596
|
{
|
|
581
597
|
"cell_type": "code",
|
|
582
598
|
"execution_count": null,
|
|
583
|
-
"id": "
|
|
599
|
+
"id": "42",
|
|
584
600
|
"metadata": {},
|
|
585
601
|
"outputs": [],
|
|
586
602
|
"source": [
|
|
587
603
|
"# Update workflow\n",
|
|
588
|
-
"
|
|
589
|
-
"
|
|
604
|
+
"wf[DetectorData[SampleRun]] = raw_data\n",
|
|
605
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
590
606
|
"\n",
|
|
591
607
|
"# Compute tofs and wavelengths\n",
|
|
592
|
-
"tofs =
|
|
608
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
593
609
|
"wav_wfm = tofs.transform_coords(\"wavelength\", graph=graph)\n",
|
|
594
610
|
"\n",
|
|
595
611
|
"# Compare in plot\n",
|
|
@@ -614,7 +630,7 @@
|
|
|
614
630
|
},
|
|
615
631
|
{
|
|
616
632
|
"cell_type": "markdown",
|
|
617
|
-
"id": "
|
|
633
|
+
"id": "43",
|
|
618
634
|
"metadata": {},
|
|
619
635
|
"source": [
|
|
620
636
|
"## Handling time overlap between subframes\n",
|
|
@@ -634,7 +650,7 @@
|
|
|
634
650
|
{
|
|
635
651
|
"cell_type": "code",
|
|
636
652
|
"execution_count": null,
|
|
637
|
-
"id": "
|
|
653
|
+
"id": "44",
|
|
638
654
|
"metadata": {},
|
|
639
655
|
"outputs": [],
|
|
640
656
|
"source": [
|
|
@@ -665,7 +681,7 @@
|
|
|
665
681
|
},
|
|
666
682
|
{
|
|
667
683
|
"cell_type": "markdown",
|
|
668
|
-
"id": "
|
|
684
|
+
"id": "45",
|
|
669
685
|
"metadata": {},
|
|
670
686
|
"source": [
|
|
671
687
|
"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 +693,18 @@
|
|
|
677
693
|
{
|
|
678
694
|
"cell_type": "code",
|
|
679
695
|
"execution_count": null,
|
|
680
|
-
"id": "
|
|
696
|
+
"id": "46",
|
|
681
697
|
"metadata": {},
|
|
682
698
|
"outputs": [],
|
|
683
699
|
"source": [
|
|
684
700
|
"# Update workflow\n",
|
|
685
|
-
"
|
|
701
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
686
702
|
" choppers=disk_choppers, source_position=source_position, neutrons=2_000_000\n",
|
|
687
703
|
")\n",
|
|
688
|
-
"
|
|
689
|
-
"
|
|
704
|
+
"wf[DetectorData[SampleRun]] = ess_beamline.get_monitor(\"detector\")[0]\n",
|
|
705
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
690
706
|
"\n",
|
|
691
|
-
"sim =
|
|
707
|
+
"sim = wf.compute(time_of_flight.SimulationResults)\n",
|
|
692
708
|
"\n",
|
|
693
709
|
"events = to_event_time_offset(sim)\n",
|
|
694
710
|
"events.hist(wavelength=300, event_time_offset=300).plot(norm=\"log\")"
|
|
@@ -696,7 +712,7 @@
|
|
|
696
712
|
},
|
|
697
713
|
{
|
|
698
714
|
"cell_type": "markdown",
|
|
699
|
-
"id": "
|
|
715
|
+
"id": "47",
|
|
700
716
|
"metadata": {},
|
|
701
717
|
"source": [
|
|
702
718
|
"The data in the lookup table contains both the mean time-of-flight for each distance and time-of-arrival bin,\n",
|
|
@@ -713,17 +729,17 @@
|
|
|
713
729
|
{
|
|
714
730
|
"cell_type": "code",
|
|
715
731
|
"execution_count": null,
|
|
716
|
-
"id": "
|
|
732
|
+
"id": "48",
|
|
717
733
|
"metadata": {},
|
|
718
734
|
"outputs": [],
|
|
719
735
|
"source": [
|
|
720
|
-
"table =
|
|
736
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
721
737
|
"table.plot() / (sc.stddevs(table) / sc.values(table)).plot(norm=\"log\")"
|
|
722
738
|
]
|
|
723
739
|
},
|
|
724
740
|
{
|
|
725
741
|
"cell_type": "markdown",
|
|
726
|
-
"id": "
|
|
742
|
+
"id": "49",
|
|
727
743
|
"metadata": {},
|
|
728
744
|
"source": [
|
|
729
745
|
"The workflow has a parameter which is used to mask out regions where the standard deviation is above a certain threshold.\n",
|
|
@@ -737,18 +753,18 @@
|
|
|
737
753
|
{
|
|
738
754
|
"cell_type": "code",
|
|
739
755
|
"execution_count": null,
|
|
740
|
-
"id": "
|
|
756
|
+
"id": "50",
|
|
741
757
|
"metadata": {},
|
|
742
758
|
"outputs": [],
|
|
743
759
|
"source": [
|
|
744
|
-
"
|
|
760
|
+
"wf[time_of_flight.LookupTableRelativeErrorThreshold] = 0.01\n",
|
|
745
761
|
"\n",
|
|
746
|
-
"
|
|
762
|
+
"wf.compute(time_of_flight.TimeOfFlightLookupTable).plot()"
|
|
747
763
|
]
|
|
748
764
|
},
|
|
749
765
|
{
|
|
750
766
|
"cell_type": "markdown",
|
|
751
|
-
"id": "
|
|
767
|
+
"id": "51",
|
|
752
768
|
"metadata": {},
|
|
753
769
|
"source": [
|
|
754
770
|
"We can now see that the central region is masked out.\n",
|
|
@@ -763,12 +779,12 @@
|
|
|
763
779
|
{
|
|
764
780
|
"cell_type": "code",
|
|
765
781
|
"execution_count": null,
|
|
766
|
-
"id": "
|
|
782
|
+
"id": "52",
|
|
767
783
|
"metadata": {},
|
|
768
784
|
"outputs": [],
|
|
769
785
|
"source": [
|
|
770
786
|
"# Compute time-of-flight\n",
|
|
771
|
-
"tofs =
|
|
787
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
772
788
|
"# Compute wavelength\n",
|
|
773
789
|
"wav_wfm = tofs.transform_coords(\"wavelength\", graph=graph)\n",
|
|
774
790
|
"\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,12 @@
|
|
|
159
159
|
"metadata": {},
|
|
160
160
|
"outputs": [],
|
|
161
161
|
"source": [
|
|
162
|
-
"
|
|
163
|
-
" time_of_flight.providers(), params=time_of_flight.default_parameters()\n",
|
|
164
|
-
")\n",
|
|
162
|
+
"wf = time_of_flight.GenericTofWorkflow()\n",
|
|
165
163
|
"\n",
|
|
166
|
-
"
|
|
167
|
-
"
|
|
168
|
-
"
|
|
169
|
-
"
|
|
164
|
+
"wf[DetectorData[SampleRun]] = nxevent_data\n",
|
|
165
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = nxevent_data.coords[\"Ltotal\"]\n",
|
|
166
|
+
"wf[time_of_flight.LtotalRange] = detectors[0].distance, detectors[-1].distance\n",
|
|
167
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
170
168
|
" choppers={\n",
|
|
171
169
|
" \"chopper\": DiskChopper(\n",
|
|
172
170
|
" frequency=-chopper.frequency,\n",
|
|
@@ -184,7 +182,7 @@
|
|
|
184
182
|
" source_position=sc.vector([0, 0, 0], unit=chopper.distance.unit),\n",
|
|
185
183
|
")\n",
|
|
186
184
|
"\n",
|
|
187
|
-
"
|
|
185
|
+
"wf.visualize(time_of_flight.DetectorTofData[SampleRun])"
|
|
188
186
|
]
|
|
189
187
|
},
|
|
190
188
|
{
|
|
@@ -225,7 +223,7 @@
|
|
|
225
223
|
"metadata": {},
|
|
226
224
|
"outputs": [],
|
|
227
225
|
"source": [
|
|
228
|
-
"table =
|
|
226
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
229
227
|
"table.plot()"
|
|
230
228
|
]
|
|
231
229
|
},
|
|
@@ -246,7 +244,7 @@
|
|
|
246
244
|
"metadata": {},
|
|
247
245
|
"outputs": [],
|
|
248
246
|
"source": [
|
|
249
|
-
"tofs =
|
|
247
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
250
248
|
"\n",
|
|
251
249
|
"tof_hist = tofs.hist(tof=sc.scalar(500.0, unit=\"us\"))\n",
|
|
252
250
|
"pp.plot({det.name: tof_hist[\"detector_number\", i] for i, det in enumerate(detectors)})"
|
|
@@ -370,17 +368,15 @@
|
|
|
370
368
|
"metadata": {},
|
|
371
369
|
"outputs": [],
|
|
372
370
|
"source": [
|
|
373
|
-
"
|
|
374
|
-
" time_of_flight.providers(), params=time_of_flight.default_parameters()\n",
|
|
375
|
-
")\n",
|
|
371
|
+
"wf = time_of_flight.GenericTofWorkflow()\n",
|
|
376
372
|
"\n",
|
|
377
373
|
"nxevent_data = results.to_nxevent_data()\n",
|
|
378
374
|
"\n",
|
|
379
|
-
"
|
|
380
|
-
"
|
|
381
|
-
"
|
|
382
|
-
"
|
|
383
|
-
"
|
|
375
|
+
"wf[time_of_flight.PulseStride] = 2\n",
|
|
376
|
+
"wf[DetectorData[SampleRun]] = nxevent_data\n",
|
|
377
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = nxevent_data.coords[\"Ltotal\"]\n",
|
|
378
|
+
"wf[time_of_flight.LtotalRange] = detectors[0].distance, detectors[-1].distance\n",
|
|
379
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
384
380
|
" choppers={\n",
|
|
385
381
|
" ch.name: DiskChopper(\n",
|
|
386
382
|
" frequency=-ch.frequency,\n",
|
|
@@ -399,8 +395,8 @@
|
|
|
399
395
|
" source_position=sc.vector([0, 0, 0], unit=chopper.distance.unit),\n",
|
|
400
396
|
")\n",
|
|
401
397
|
"\n",
|
|
402
|
-
"
|
|
403
|
-
"
|
|
398
|
+
"wf[time_of_flight.DistanceResolution] = sc.scalar(0.5, unit=\"m\")\n",
|
|
399
|
+
"wf[time_of_flight.LookupTableRelativeErrorThreshold] = 0.1"
|
|
404
400
|
]
|
|
405
401
|
},
|
|
406
402
|
{
|
|
@@ -418,9 +414,9 @@
|
|
|
418
414
|
"metadata": {},
|
|
419
415
|
"outputs": [],
|
|
420
416
|
"source": [
|
|
421
|
-
"table =
|
|
417
|
+
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
|
|
422
418
|
"\n",
|
|
423
|
-
"table
|
|
419
|
+
"table.plot()"
|
|
424
420
|
]
|
|
425
421
|
},
|
|
426
422
|
{
|
|
@@ -438,7 +434,7 @@
|
|
|
438
434
|
"metadata": {},
|
|
439
435
|
"outputs": [],
|
|
440
436
|
"source": [
|
|
441
|
-
"tofs =
|
|
437
|
+
"tofs = wf.compute(time_of_flight.DetectorTofData[SampleRun])\n",
|
|
442
438
|
"\n",
|
|
443
439
|
"tof_hist = tofs.hist(tof=sc.scalar(500.0, unit=\"us\"))\n",
|
|
444
440
|
"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,13 @@
|
|
|
326
326
|
"metadata": {},
|
|
327
327
|
"outputs": [],
|
|
328
328
|
"source": [
|
|
329
|
-
"
|
|
330
|
-
"
|
|
331
|
-
"
|
|
332
|
-
"
|
|
333
|
-
"
|
|
334
|
-
"workflow[time_of_flight.LtotalRange] = Ltotal, Ltotal\n",
|
|
335
|
-
"workflow[time_of_flight.LookupTableRelativeErrorThreshold] = 0.1\n",
|
|
329
|
+
"wf = time_of_flight.GenericTofWorkflow()\n",
|
|
330
|
+
"wf[DetectorData[SampleRun]] = raw_data\n",
|
|
331
|
+
"wf[time_of_flight.DetectorLtotal[SampleRun]] = Ltotal\n",
|
|
332
|
+
"wf[time_of_flight.LtotalRange] = Ltotal, Ltotal\n",
|
|
333
|
+
"wf[time_of_flight.LookupTableRelativeErrorThreshold] = 0.1\n",
|
|
336
334
|
"\n",
|
|
337
|
-
"
|
|
335
|
+
"wf.visualize(time_of_flight.DetectorTofData[SampleRun])"
|
|
338
336
|
]
|
|
339
337
|
},
|
|
340
338
|
{
|
|
@@ -354,7 +352,7 @@
|
|
|
354
352
|
"metadata": {},
|
|
355
353
|
"outputs": [],
|
|
356
354
|
"source": [
|
|
357
|
-
"
|
|
355
|
+
"wf[time_of_flight.SimulationResults] = time_of_flight.simulate_beamline(\n",
|
|
358
356
|
" choppers=disk_choppers,\n",
|
|
359
357
|
" source_position=source_position,\n",
|
|
360
358
|
" neutrons=3_000_000\n",
|
|
@@ -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
|