essdiffraction 26.4.0__tar.gz → 26.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.
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/LICENSE +1 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/PKG-INFO +17 -1
- essdiffraction-26.5.1/docs/_static/essdiffraction-search-logo.png +0 -0
- essdiffraction-26.5.1/docs/_templates/layout.html +5 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/beer/beer_modulation_mcstas.ipynb +23 -26
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/common/vanadium_processing.ipynb +2 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-powder-reduction.ipynb +1 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/workflow-widget-dream.ipynb +1 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/pyproject.toml +22 -46
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/clustering.py +2 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/conversions.py +64 -58
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/data.py +2 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/io.py +126 -52
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/types.py +2 -9
- essdiffraction-26.5.1/src/ess/beer/workflow.py +117 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/diffraction/__init__.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/io/cif.py +1 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/io/geant4.py +1 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/parameters.py +1 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/workflows.py +3 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/workflow.py +2 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/essdiffraction.egg-info/PKG-INFO +17 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/essdiffraction.egg-info/SOURCES.txt +3 -41
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/essdiffraction.egg-info/requires.txt +17 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/beer/mcstas_reduction_test.py +45 -12
- essdiffraction-26.4.0/tests/diffraction/test_peaks.py → essdiffraction-26.5.1/tests/diffraction/peaks_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/dream/instrument_view_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/dream/io/cif_test.py +3 -4
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/dream/io/geant4_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/powder/conversion_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/powder/correction_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/powder/filtering_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/powder/transform_test.py +1 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/snspowder/powgen/load_test.py +0 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/snspowder/powgen/powgen_reduction_test.py +6 -5
- essdiffraction-26.4.0/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -97
- essdiffraction-26.4.0/.github/dependabot.yml +0 -13
- essdiffraction-26.4.0/.github/workflows/ci.yml +0 -58
- essdiffraction-26.4.0/.github/workflows/docs.yml +0 -79
- essdiffraction-26.4.0/.github/workflows/nightly_at_main.yml +0 -35
- essdiffraction-26.4.0/.github/workflows/nightly_at_main_lower_bound.yml +0 -37
- essdiffraction-26.4.0/.github/workflows/nightly_at_release.yml +0 -42
- essdiffraction-26.4.0/.github/workflows/python-version-ci +0 -1
- essdiffraction-26.4.0/.github/workflows/release.yml +0 -73
- essdiffraction-26.4.0/.github/workflows/test.yml +0 -90
- essdiffraction-26.4.0/.github/workflows/unpinned.yml +0 -41
- essdiffraction-26.4.0/.github/workflows/weekly_windows_macos.yml +0 -42
- essdiffraction-26.4.0/.gitignore +0 -48
- essdiffraction-26.4.0/.pre-commit-config.yaml +0 -55
- essdiffraction-26.4.0/.python-version +0 -1
- essdiffraction-26.4.0/CODE_OF_CONDUCT.md +0 -134
- essdiffraction-26.4.0/CONTRIBUTING.md +0 -20
- essdiffraction-26.4.0/MANIFEST.in +0 -1
- essdiffraction-26.4.0/requirements/base.in +0 -17
- essdiffraction-26.4.0/requirements/base.txt +0 -227
- essdiffraction-26.4.0/requirements/basetest.in +0 -13
- essdiffraction-26.4.0/requirements/basetest.txt +0 -87
- essdiffraction-26.4.0/requirements/ci.in +0 -4
- essdiffraction-26.4.0/requirements/ci.txt +0 -56
- essdiffraction-26.4.0/requirements/dev.in +0 -11
- essdiffraction-26.4.0/requirements/dev.txt +0 -123
- essdiffraction-26.4.0/requirements/docs.in +0 -18
- essdiffraction-26.4.0/requirements/docs.txt +0 -181
- essdiffraction-26.4.0/requirements/make_base.py +0 -78
- essdiffraction-26.4.0/requirements/mypy.in +0 -2
- essdiffraction-26.4.0/requirements/mypy.txt +0 -16
- essdiffraction-26.4.0/requirements/nightly.in +0 -23
- essdiffraction-26.4.0/requirements/nightly.txt +0 -245
- essdiffraction-26.4.0/requirements/static.in +0 -1
- essdiffraction-26.4.0/requirements/static.txt +0 -31
- essdiffraction-26.4.0/requirements/test.in +0 -4
- essdiffraction-26.4.0/requirements/test.txt +0 -9
- essdiffraction-26.4.0/requirements/wheels.in +0 -1
- essdiffraction-26.4.0/requirements/wheels.txt +0 -13
- essdiffraction-26.4.0/src/ess/beer/workflow.py +0 -61
- essdiffraction-26.4.0/tox.ini +0 -76
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/.copier-answers.ess.yml +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/.copier-answers.yml +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/README.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/anaconda-icon.js +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/favicon.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/logo-dark.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/logo.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/thumbnails/beer_mcstas_dark.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/thumbnails/beer_mcstas_light.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/thumbnails/dream_advanced_powder_reduction_dark.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/thumbnails/dream_advanced_powder_reduction_light.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/thumbnails/dream_basic_powder_reduction_dark.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_static/thumbnails/dream_basic_powder_reduction_light.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_templates/class-template.rst +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_templates/doc_version.html +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/_templates/module-template.rst +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/about/bibliography.rst +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/about/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/api-reference/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/bibliography.bib +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/conf.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/developer/coding-conventions.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/developer/dependency-management.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/developer/getting-started.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/developer/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/beer/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/common/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-advanced-powder-reduction.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-detector-diagnostics.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-instrument-view.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-make-wavelength-lookup-table.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-visualize-absorption.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/installation.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/sns-instruments/POWGEN_data_reduction.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/sns-instruments/index.md +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/resources/logo.svg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/setup.cfg +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/__init__.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/beer/peakfinding.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/diffraction/peaks.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/diffraction/py.typed +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/__init__.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/beamline.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/data.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/diagnostics.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/instrument_view.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/io/__init__.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/dream/py.typed +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/__init__.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/_util.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/calibration.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/conversion.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/correction.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/filtering.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/grouping.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/logging.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/masking.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/py.typed +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/smoothing.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/transform.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/types.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/powder/workflow.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/__init__.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/beamline.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/calibration.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/data.py +1 -1
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/instrument_view.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/ess/snspowder/powgen/peaks.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/essdiffraction.egg-info/dependency_links.txt +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/src/essdiffraction.egg-info/top_level.txt +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/conftest.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/dream/diagnostics_test.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/dream/geant4_reduction_test.py +3 -3
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/dream/workflows/dream_generic_workflow_test.py +2 -2
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tests/package_test.py +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tools/docs/beer-thumbnails.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tools/docs/dream-thumbnails.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tools/preprocess_pg3_files.ipynb +0 -0
- {essdiffraction-26.4.0 → essdiffraction-26.5.1}/tools/shrink_nexus.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: essdiffraction
|
|
3
|
-
Version: 26.
|
|
3
|
+
Version: 26.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
|
|
@@ -38,6 +38,22 @@ Requires-Dist: pandas>=2.1.2; extra == "test"
|
|
|
38
38
|
Requires-Dist: pooch>=1.5; extra == "test"
|
|
39
39
|
Requires-Dist: pytest>=7.0; extra == "test"
|
|
40
40
|
Requires-Dist: ipywidgets>=8.1.7; extra == "test"
|
|
41
|
+
Provides-Extra: docs
|
|
42
|
+
Requires-Dist: autodoc-pydantic; extra == "docs"
|
|
43
|
+
Requires-Dist: ipykernel; extra == "docs"
|
|
44
|
+
Requires-Dist: ipympl; extra == "docs"
|
|
45
|
+
Requires-Dist: ipython!=8.7.0; extra == "docs"
|
|
46
|
+
Requires-Dist: myst-parser; extra == "docs"
|
|
47
|
+
Requires-Dist: nbsphinx; extra == "docs"
|
|
48
|
+
Requires-Dist: pandas; extra == "docs"
|
|
49
|
+
Requires-Dist: pooch; extra == "docs"
|
|
50
|
+
Requires-Dist: pydata-sphinx-theme>=0.14; extra == "docs"
|
|
51
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
52
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
53
|
+
Requires-Dist: sphinx-copybutton; extra == "docs"
|
|
54
|
+
Requires-Dist: sphinx-design; extra == "docs"
|
|
55
|
+
Requires-Dist: sphinxcontrib-bibtex; extra == "docs"
|
|
56
|
+
Requires-Dist: pyarrow; extra == "docs"
|
|
41
57
|
Dynamic: license-file
|
|
42
58
|
|
|
43
59
|
[](CODE_OF_CONDUCT.md)
|
|
Binary file
|
{essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/beer/beer_modulation_mcstas.ipynb
RENAMED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"from ess.beer import BeerModMcStasWorkflow, BeerModMcStasWorkflowKnownPeaks\n",
|
|
23
23
|
"from ess.beer.data import mcstas_silicon_medium_resolution, mcstas_duplex, duplex_peaks_array, silicon_peaks_array\n",
|
|
24
24
|
"from ess.beer.types import *\n",
|
|
25
|
+
"from ess.powder.types import *\n",
|
|
25
26
|
"\n",
|
|
26
27
|
"# Default bin edges for our d_hkl histograms\n",
|
|
27
28
|
"dspacing = sc.linspace('dspacing', 0.8, 2.2, 2000, unit='angstrom')\n",
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
"source": [
|
|
40
41
|
"## Beam modulation mode\n",
|
|
41
42
|
"\n",
|
|
42
|
-
"In the \"modulation mode\" the BEER instrument maximizes signal intensity while retaining wavelength resolution by utilizing choppers to create multiple pulses, each with well
|
|
43
|
+
"In the \"modulation mode\" the BEER instrument maximizes signal intensity while retaining wavelength resolution by utilizing choppers to create multiple pulses, each with well-defined wavelength, that reach the sample simultaneously.\n",
|
|
43
44
|
"The pulses can be distinguished in the detector data under the assumption that the peaks in $d_{hkl}$ are sufficiently well separated from each other.\n",
|
|
44
45
|
"\n",
|
|
45
46
|
"\n",
|
|
@@ -82,7 +83,7 @@
|
|
|
82
83
|
"\n",
|
|
83
84
|
"### Difference between modulation modes\n",
|
|
84
85
|
"\n",
|
|
85
|
-
"There are different modulation modes depending on the desired trade
|
|
86
|
+
"There are different modulation modes depending on the desired trade-off between resolution and intensity.\n",
|
|
86
87
|
"Below is a table describing the available modes.\n",
|
|
87
88
|
"\n",
|
|
88
89
|
"<table style=\"border-collapse: collapse; border: 1px solid #aaa; font-family: Arial, sans-serif; font-size: 14px;\">\n",
|
|
@@ -163,7 +164,8 @@
|
|
|
163
164
|
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
|
|
164
165
|
"wf[DetectorBank] = DetectorBank.north\n",
|
|
165
166
|
"wf[Filename[SampleRun]] = mcstas_silicon_medium_resolution()\n",
|
|
166
|
-
"
|
|
167
|
+
"wf[DHKLList] = silicon_peaks_array()\n",
|
|
168
|
+
"da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
167
169
|
"da.masks.clear()\n",
|
|
168
170
|
"da.hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
|
|
169
171
|
]
|
|
@@ -183,13 +185,12 @@
|
|
|
183
185
|
"metadata": {},
|
|
184
186
|
"outputs": [],
|
|
185
187
|
"source": [
|
|
186
|
-
"wf[DHKLList] = silicon_peaks_array()\n",
|
|
187
188
|
"wf[Filename[SampleRun]] = mcstas_silicon_medium_resolution()\n",
|
|
188
189
|
"\n",
|
|
189
190
|
"results = {}\n",
|
|
190
191
|
"for bank in DetectorBank:\n",
|
|
191
192
|
" wf[DetectorBank] = bank\n",
|
|
192
|
-
" da = wf.compute(
|
|
193
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
193
194
|
" results[bank] = (\n",
|
|
194
195
|
" da\n",
|
|
195
196
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -220,7 +221,7 @@
|
|
|
220
221
|
"results = {}\n",
|
|
221
222
|
"for bank in DetectorBank:\n",
|
|
222
223
|
" wf[DetectorBank] = bank\n",
|
|
223
|
-
" da = wf.compute(
|
|
224
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
224
225
|
" results[bank] = (\n",
|
|
225
226
|
" da\n",
|
|
226
227
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -279,7 +280,8 @@
|
|
|
279
280
|
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
|
|
280
281
|
"wf[DetectorBank] = DetectorBank.south\n",
|
|
281
282
|
"wf[Filename[SampleRun]] = mcstas_duplex(8)\n",
|
|
282
|
-
"wf
|
|
283
|
+
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
284
|
+
"wf.compute(WavelengthDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-2)"
|
|
283
285
|
]
|
|
284
286
|
},
|
|
285
287
|
{
|
|
@@ -297,12 +299,10 @@
|
|
|
297
299
|
"metadata": {},
|
|
298
300
|
"outputs": [],
|
|
299
301
|
"source": [
|
|
300
|
-
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
301
|
-
"\n",
|
|
302
302
|
"results = {}\n",
|
|
303
303
|
"for bank in DetectorBank:\n",
|
|
304
304
|
" wf[DetectorBank] = bank\n",
|
|
305
|
-
" da = wf.compute(
|
|
305
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
306
306
|
" results[bank] = (\n",
|
|
307
307
|
" da\n",
|
|
308
308
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -333,7 +333,7 @@
|
|
|
333
333
|
"results = {}\n",
|
|
334
334
|
"for bank in DetectorBank:\n",
|
|
335
335
|
" wf[DetectorBank] = bank\n",
|
|
336
|
-
" da = wf.compute(
|
|
336
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
337
337
|
" results[bank] = (\n",
|
|
338
338
|
" da\n",
|
|
339
339
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -392,7 +392,8 @@
|
|
|
392
392
|
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
|
|
393
393
|
"wf[DetectorBank] = DetectorBank.south\n",
|
|
394
394
|
"wf[Filename[SampleRun]] = mcstas_duplex(9)\n",
|
|
395
|
-
"wf
|
|
395
|
+
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
396
|
+
"wf.compute(WavelengthDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
|
|
396
397
|
]
|
|
397
398
|
},
|
|
398
399
|
{
|
|
@@ -410,12 +411,10 @@
|
|
|
410
411
|
"metadata": {},
|
|
411
412
|
"outputs": [],
|
|
412
413
|
"source": [
|
|
413
|
-
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
414
|
-
"\n",
|
|
415
414
|
"results = {}\n",
|
|
416
415
|
"for bank in DetectorBank:\n",
|
|
417
416
|
" wf[DetectorBank] = bank\n",
|
|
418
|
-
" da = wf.compute(
|
|
417
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
419
418
|
" results[bank] = (\n",
|
|
420
419
|
" da\n",
|
|
421
420
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -446,7 +445,7 @@
|
|
|
446
445
|
"results = {}\n",
|
|
447
446
|
"for bank in DetectorBank:\n",
|
|
448
447
|
" wf[DetectorBank] = bank\n",
|
|
449
|
-
" da = wf.compute(
|
|
448
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
450
449
|
" results[bank] = (\n",
|
|
451
450
|
" da\n",
|
|
452
451
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -505,7 +504,8 @@
|
|
|
505
504
|
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
|
|
506
505
|
"wf[DetectorBank] = DetectorBank.south\n",
|
|
507
506
|
"wf[Filename[SampleRun]] = mcstas_duplex(10)\n",
|
|
508
|
-
"wf
|
|
507
|
+
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
508
|
+
"wf.compute(WavelengthDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
|
|
509
509
|
]
|
|
510
510
|
},
|
|
511
511
|
{
|
|
@@ -523,12 +523,10 @@
|
|
|
523
523
|
"metadata": {},
|
|
524
524
|
"outputs": [],
|
|
525
525
|
"source": [
|
|
526
|
-
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
527
|
-
"\n",
|
|
528
526
|
"results = {}\n",
|
|
529
527
|
"for bank in DetectorBank:\n",
|
|
530
528
|
" wf[DetectorBank] = bank\n",
|
|
531
|
-
" da = wf.compute(
|
|
529
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
532
530
|
" results[bank] = (\n",
|
|
533
531
|
" da\n",
|
|
534
532
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -559,7 +557,7 @@
|
|
|
559
557
|
"results = {}\n",
|
|
560
558
|
"for bank in DetectorBank:\n",
|
|
561
559
|
" wf[DetectorBank] = bank\n",
|
|
562
|
-
" da = wf.compute(
|
|
560
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
563
561
|
" results[bank] = (\n",
|
|
564
562
|
" da\n",
|
|
565
563
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -618,7 +616,8 @@
|
|
|
618
616
|
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
|
|
619
617
|
"wf[DetectorBank] = DetectorBank.south\n",
|
|
620
618
|
"wf[Filename[SampleRun]] = mcstas_duplex(16)\n",
|
|
621
|
-
"wf
|
|
619
|
+
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
620
|
+
"wf.compute(WavelengthDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
|
|
622
621
|
]
|
|
623
622
|
},
|
|
624
623
|
{
|
|
@@ -636,12 +635,10 @@
|
|
|
636
635
|
"metadata": {},
|
|
637
636
|
"outputs": [],
|
|
638
637
|
"source": [
|
|
639
|
-
"wf[DHKLList] = duplex_peaks_array()\n",
|
|
640
|
-
"\n",
|
|
641
638
|
"results = {}\n",
|
|
642
639
|
"for bank in DetectorBank:\n",
|
|
643
640
|
" wf[DetectorBank] = bank\n",
|
|
644
|
-
" da = wf.compute(
|
|
641
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
645
642
|
" results[bank] = (\n",
|
|
646
643
|
" da\n",
|
|
647
644
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
|
@@ -672,7 +669,7 @@
|
|
|
672
669
|
"results = {}\n",
|
|
673
670
|
"for bank in DetectorBank:\n",
|
|
674
671
|
" wf[DetectorBank] = bank\n",
|
|
675
|
-
" da = wf.compute(
|
|
672
|
+
" da = wf.compute(WavelengthDetector[SampleRun])\n",
|
|
676
673
|
" results[bank] = (\n",
|
|
677
674
|
" da\n",
|
|
678
675
|
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
|
{essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/common/vanadium_processing.ipynb
RENAMED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"# Vanadium processing\n",
|
|
9
9
|
"\n",
|
|
10
10
|
"We normalize by vanadium measurements because vanadium scatters almost entirely incoherently.\n",
|
|
11
|
-
"But
|
|
11
|
+
"But vanadium does produce some coherent scattering peaks, and those need to be removed before normalization.\n",
|
|
12
12
|
"This notebook demonstrates how this can be done using ESSdiffraction and ScippNeutron.\n",
|
|
13
13
|
"It uses the same data as the [POWGEN_data_reduction](../sns-instruments/POWGEN_data_reduction.rst) workflow.\n",
|
|
14
14
|
"\n",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"Even though the peaks are small for vanadium, we need to remove them to extract pure incoherent scattering.\n",
|
|
131
131
|
"We can approximate the coherent scattering contribution by fitting functions to the peaks and subtracting those fitted functions.\n",
|
|
132
132
|
"[scippneutron.peaks](https://scipp.github.io/scippneutron/generated/modules/scippneutron.peaks.html) contains general functionality for fitting and removing peaks.\n",
|
|
133
|
-
"Here, we use it through [ess.snspowder.powgen.peaks](../../generated/modules/ess.snspowder.powgen.peaks.rst) which provides useful defaults for vanadium peaks at POWGEN.\n",
|
|
133
|
+
"Here, we use it through [ess.snspowder.powgen.peaks](../../generated/modules/ess.snspowder.powgen.peaks.rst), which provides useful defaults for vanadium peaks at POWGEN.\n",
|
|
134
134
|
"For example, it selects appropriate models for peaks (gaussian) and backgrounds (linear and quadratic).\n",
|
|
135
135
|
"\n",
|
|
136
136
|
"First, define estimates for the peaks based on the known crystal structure of vanadium:"
|
{essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/dream-powder-reduction.ipynb
RENAMED
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"\n",
|
|
208
208
|
"---\n",
|
|
209
209
|
"\n",
|
|
210
|
-
"Next, consider reading [DREAM advanced powder data reduction](./dream-advanced-powder-reduction.rst) guide which demonstrates some
|
|
210
|
+
"Next, consider reading the [DREAM advanced powder data reduction](./dream-advanced-powder-reduction.rst) guide, which demonstrates some built-in options for customizing the workflow and how to compute alternative results."
|
|
211
211
|
]
|
|
212
212
|
}
|
|
213
213
|
],
|
{essdiffraction-26.4.0 → essdiffraction-26.5.1}/docs/user-guide/dream/workflow-widget-dream.ipynb
RENAMED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"source": [
|
|
8
8
|
"# Workflow widgets example\n",
|
|
9
9
|
"\n",
|
|
10
|
-
"This notebook illustrates how we can use ESSreduce
|
|
10
|
+
"This notebook illustrates how we can use ESSreduce's [workflow widgets](https://scipp.github.io/essreduce/user-guide/widget.html) to generate a graphical interface for running the [DREAM GEANT4 workflow](./dream-powder-reduction.rst).\n",
|
|
11
11
|
"\n",
|
|
12
12
|
"## Initializing the GUI\n",
|
|
13
13
|
"\n",
|
|
@@ -10,7 +10,6 @@ name = "essdiffraction"
|
|
|
10
10
|
description = "Diffraction data reduction for the European Spallation Source"
|
|
11
11
|
authors = [{ name = "Scipp contributors" }]
|
|
12
12
|
license = "BSD-3-Clause"
|
|
13
|
-
license-files = ["LICENSE"]
|
|
14
13
|
readme = "README.md"
|
|
15
14
|
classifiers = [
|
|
16
15
|
"Intended Audience :: Science/Research",
|
|
@@ -54,6 +53,25 @@ test = [
|
|
|
54
53
|
"pytest>=7.0",
|
|
55
54
|
"ipywidgets>=8.1.7",
|
|
56
55
|
]
|
|
56
|
+
docs = [
|
|
57
|
+
"autodoc-pydantic",
|
|
58
|
+
"ipykernel",
|
|
59
|
+
"ipympl",
|
|
60
|
+
# Breaks syntax highlighting in Jupyter code cells.
|
|
61
|
+
"ipython!=8.7.0",
|
|
62
|
+
"myst-parser",
|
|
63
|
+
"nbsphinx",
|
|
64
|
+
"pandas",
|
|
65
|
+
"pooch",
|
|
66
|
+
"pydata-sphinx-theme>=0.14",
|
|
67
|
+
"sphinx",
|
|
68
|
+
"sphinx-autodoc-typehints",
|
|
69
|
+
"sphinx-copybutton",
|
|
70
|
+
"sphinx-design",
|
|
71
|
+
"sphinxcontrib-bibtex",
|
|
72
|
+
# needed by pandas < 3.0
|
|
73
|
+
"pyarrow",
|
|
74
|
+
]
|
|
57
75
|
|
|
58
76
|
[project.urls]
|
|
59
77
|
"Bug Tracker" = "https://github.com/scipp/essdiffraction/issues"
|
|
@@ -61,6 +79,9 @@ test = [
|
|
|
61
79
|
"Source" = "https://github.com/scipp/essdiffraction"
|
|
62
80
|
|
|
63
81
|
[tool.setuptools_scm]
|
|
82
|
+
root = "../.."
|
|
83
|
+
tag_regex = "^essdiffraction/(?P<version>[vV]?\\d+(?:\\.\\d+)*(?:[._-]?\\w+)*)$"
|
|
84
|
+
git_describe_command = ["git", "describe", "--dirty", "--tags", "--long", "--match", "essdiffraction/*[0-9]*"]
|
|
64
85
|
|
|
65
86
|
[tool.pytest.ini_options]
|
|
66
87
|
minversion = "7.0"
|
|
@@ -79,43 +100,6 @@ filterwarnings = [
|
|
|
79
100
|
'ignore:\s*Pyarrow will become a required dependency of pandas:DeprecationWarning',
|
|
80
101
|
]
|
|
81
102
|
|
|
82
|
-
[tool.ruff]
|
|
83
|
-
line-length = 88
|
|
84
|
-
extend-include = ["*.ipynb"]
|
|
85
|
-
extend-exclude = [
|
|
86
|
-
".*", "__pycache__", "build", "dist", "install",
|
|
87
|
-
]
|
|
88
|
-
|
|
89
|
-
[tool.ruff.lint]
|
|
90
|
-
# See https://docs.astral.sh/ruff/rules/
|
|
91
|
-
select = ["B", "C4", "DTZ", "E", "F", "G", "I", "PERF", "PGH", "PT", "PYI", "RUF", "S", "T20", "UP", "W"]
|
|
92
|
-
ignore = [
|
|
93
|
-
# Conflict with ruff format, see
|
|
94
|
-
# https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
|
|
95
|
-
"COM812", "COM819", "D206", "D300", "E111", "E114", "E117", "ISC001", "ISC002", "Q000", "Q001", "Q002", "Q003", "W191",
|
|
96
|
-
]
|
|
97
|
-
fixable = ["B010", "I001", "PT001", "RUF022"]
|
|
98
|
-
isort.known-first-party = ["ess.diffraction", "ess.dream", "ess.powder"]
|
|
99
|
-
pydocstyle.convention = "numpy"
|
|
100
|
-
|
|
101
|
-
[tool.ruff.lint.per-file-ignores]
|
|
102
|
-
# those files have an increased risk of relying on import order
|
|
103
|
-
"tests/*" = [
|
|
104
|
-
"S101", # asserts are fine in tests
|
|
105
|
-
"B018", # 'useless expressions' are ok because some tests just check for exceptions
|
|
106
|
-
]
|
|
107
|
-
"*.ipynb" = [
|
|
108
|
-
"E501", # longer lines are sometimes more readable
|
|
109
|
-
"F403", # *-imports used with domain types
|
|
110
|
-
"F405", # linter may fail to find names because of *-imports
|
|
111
|
-
"I", # we don't collect imports at the top
|
|
112
|
-
"S101", # asserts are used for demonstration and are safe in notebooks
|
|
113
|
-
"T201", # printing is ok for demonstration purposes
|
|
114
|
-
]
|
|
115
|
-
|
|
116
|
-
[tool.ruff.format]
|
|
117
|
-
quote-style = "preserve"
|
|
118
|
-
|
|
119
103
|
[tool.mypy]
|
|
120
104
|
strict = true
|
|
121
105
|
ignore_missing_imports = true
|
|
@@ -125,11 +109,3 @@ enable_error_code = [
|
|
|
125
109
|
"truthy-bool",
|
|
126
110
|
]
|
|
127
111
|
warn_unreachable = true
|
|
128
|
-
|
|
129
|
-
[tool.codespell]
|
|
130
|
-
ignore-words-list = [
|
|
131
|
-
# Codespell wants "socioeconomic" which seems to be the standard spelling.
|
|
132
|
-
# But we use the word in our code of conduct which is the contributor covenant.
|
|
133
|
-
# Let's not modify it if we don't have to.
|
|
134
|
-
"socio-economic",
|
|
135
|
-
]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import scipp as sc
|
|
2
|
+
from ess.powder.types import RunType
|
|
2
3
|
from scipy.signal import find_peaks, medfilt
|
|
3
4
|
|
|
4
5
|
from .conversions import tof_from_t0_estimate_graph
|
|
5
6
|
from .types import (
|
|
6
7
|
GeometryCoordTransformGraph,
|
|
7
8
|
RawDetector,
|
|
8
|
-
RunType,
|
|
9
9
|
StreakClusteredData,
|
|
10
10
|
)
|
|
11
11
|
|
|
@@ -13,7 +13,7 @@ from .types import (
|
|
|
13
13
|
def cluster_events_by_streak(
|
|
14
14
|
da: RawDetector[RunType], gg: GeometryCoordTransformGraph
|
|
15
15
|
) -> StreakClusteredData[RunType]:
|
|
16
|
-
graph = tof_from_t0_estimate_graph(gg)
|
|
16
|
+
graph = tof_from_t0_estimate_graph(da, gg)
|
|
17
17
|
|
|
18
18
|
da = da.transform_coords(['dspacing'], graph=graph)
|
|
19
19
|
da.bins.coords['coarse_d'] = da.bins.coords.pop('dspacing').to(unit='angstrom')
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import scipp as sc
|
|
2
2
|
import scipp.constants
|
|
3
|
+
from ess.powder.types import ElasticCoordTransformGraph, RunType
|
|
3
4
|
from scippneutron.conversion import graph
|
|
4
5
|
|
|
5
6
|
from .types import (
|
|
@@ -8,19 +9,18 @@ from .types import (
|
|
|
8
9
|
ModulationPeriod,
|
|
9
10
|
PulseLength,
|
|
10
11
|
RawDetector,
|
|
11
|
-
RunType,
|
|
12
12
|
StreakClusteredData,
|
|
13
|
-
TofCoordTransformGraph,
|
|
14
|
-
TofDetector,
|
|
15
13
|
WavelengthDefinitionChopperDelay,
|
|
14
|
+
WavelengthDetector,
|
|
16
15
|
)
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
def
|
|
18
|
+
def compute_wavelength_in_each_cluster(
|
|
20
19
|
da: StreakClusteredData[RunType],
|
|
21
20
|
chopper_delay: WavelengthDefinitionChopperDelay,
|
|
22
21
|
mod_period: ModulationPeriod,
|
|
23
|
-
|
|
22
|
+
graph: GeometryCoordTransformGraph,
|
|
23
|
+
) -> WavelengthDetector[RunType]:
|
|
24
24
|
"""Fits a line through each cluster, the intercept of the line is t0.
|
|
25
25
|
The line is fitted using linear regression with an outlier removal procedure.
|
|
26
26
|
|
|
@@ -37,7 +37,10 @@ def compute_tof_in_each_cluster(
|
|
|
37
37
|
"""
|
|
38
38
|
if isinstance(da, sc.DataGroup):
|
|
39
39
|
return sc.DataGroup(
|
|
40
|
-
{
|
|
40
|
+
{
|
|
41
|
+
k: compute_wavelength_in_each_cluster(v, mod_period)
|
|
42
|
+
for k, v in da.items()
|
|
43
|
+
}
|
|
41
44
|
)
|
|
42
45
|
|
|
43
46
|
max_distance_from_streak_line = mod_period / 3
|
|
@@ -110,7 +113,7 @@ def _compute_d_given_list_of_peaks(
|
|
|
110
113
|
theta: sc.Variable,
|
|
111
114
|
dhkl_list: sc.Variable,
|
|
112
115
|
pulse_length: sc.Variable,
|
|
113
|
-
|
|
116
|
+
moderator_to_detector_distance: sc.Variable,
|
|
114
117
|
) -> sc.Variable:
|
|
115
118
|
"""Determines the ``d_hkl`` peak each event belongs to,
|
|
116
119
|
given a list of known peaks."""
|
|
@@ -123,9 +126,12 @@ def _compute_d_given_list_of_peaks(
|
|
|
123
126
|
)
|
|
124
127
|
dtfound = sc.full_like(time_of_arrival, value=float('nan'), dtype='float64')
|
|
125
128
|
|
|
126
|
-
const = (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
const = (
|
|
130
|
+
2
|
|
131
|
+
* sinth
|
|
132
|
+
* moderator_to_detector_distance
|
|
133
|
+
/ (scipp.constants.h / scipp.constants.m_n)
|
|
134
|
+
).to(unit=f'{time_of_arrival.unit}/angstrom')
|
|
129
135
|
for dhkl in dhkl_list:
|
|
130
136
|
dt = sc.abs(t - dhkl * const)
|
|
131
137
|
dt_in_range = dt < pulse_length / 2
|
|
@@ -185,17 +191,53 @@ def _tof_from_dhkl(
|
|
|
185
191
|
return out
|
|
186
192
|
|
|
187
193
|
|
|
194
|
+
def t0_estimate(
|
|
195
|
+
wavelength_estimate: sc.Variable,
|
|
196
|
+
source_to_wavelength_definition_chopper_distance: sc.Variable,
|
|
197
|
+
) -> sc.Variable:
|
|
198
|
+
"""
|
|
199
|
+
Computes the time a neutron reaches a chopper at
|
|
200
|
+
``source_to_wavelength_chopper_distance`` distance from the source
|
|
201
|
+
if it has wavelength ``wavelength_estimate``.
|
|
202
|
+
"""
|
|
203
|
+
return (
|
|
204
|
+
sc.constants.m_n
|
|
205
|
+
/ sc.constants.h
|
|
206
|
+
* wavelength_estimate
|
|
207
|
+
* source_to_wavelength_definition_chopper_distance.to(
|
|
208
|
+
unit=wavelength_estimate.unit
|
|
209
|
+
)
|
|
210
|
+
).to(unit='s')
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def tof_from_t0_estimate_graph(
|
|
214
|
+
da: RawDetector[RunType],
|
|
215
|
+
gg: GeometryCoordTransformGraph,
|
|
216
|
+
) -> ElasticCoordTransformGraph[RunType]:
|
|
217
|
+
"""Graph for computing ``wavelength`` in pulse shaping chopper modes."""
|
|
218
|
+
return {
|
|
219
|
+
**gg,
|
|
220
|
+
't0': t0_estimate,
|
|
221
|
+
'tof': lambda time_of_arrival, t0: time_of_arrival - t0,
|
|
222
|
+
'time_of_arrival': time_of_arrival,
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
188
226
|
def geometry_graph() -> GeometryCoordTransformGraph:
|
|
189
|
-
return
|
|
227
|
+
return {
|
|
228
|
+
**graph.beamline.beamline(scatter=True),
|
|
229
|
+
**graph.tof.elastic("tof"),
|
|
230
|
+
}
|
|
190
231
|
|
|
191
232
|
|
|
192
233
|
def tof_from_known_dhkl_graph(
|
|
234
|
+
da: RawDetector[RunType],
|
|
193
235
|
mod_period: ModulationPeriod,
|
|
194
236
|
pulse_length: PulseLength,
|
|
195
237
|
chopper_delay: WavelengthDefinitionChopperDelay,
|
|
196
238
|
dhkl_list: DHKLList,
|
|
197
239
|
gg: GeometryCoordTransformGraph,
|
|
198
|
-
) ->
|
|
240
|
+
) -> ElasticCoordTransformGraph[RunType]:
|
|
199
241
|
"""Graph computing ``tof`` in modulation chopper modes using
|
|
200
242
|
list of peak positions."""
|
|
201
243
|
|
|
@@ -203,7 +245,7 @@ def tof_from_known_dhkl_graph(
|
|
|
203
245
|
time_of_arrival: sc.Variable,
|
|
204
246
|
theta: sc.Variable,
|
|
205
247
|
pulse_length: sc.Variable,
|
|
206
|
-
|
|
248
|
+
moderator_to_detector_distance: sc.Variable,
|
|
207
249
|
):
|
|
208
250
|
"""To capture dhkl_list, otherwise it causes an error when
|
|
209
251
|
``.transform_coords`` is called unless it is called with
|
|
@@ -215,13 +257,12 @@ def tof_from_known_dhkl_graph(
|
|
|
215
257
|
time_of_arrival=time_of_arrival,
|
|
216
258
|
theta=theta,
|
|
217
259
|
pulse_length=pulse_length,
|
|
218
|
-
|
|
260
|
+
moderator_to_detector_distance=moderator_to_detector_distance,
|
|
219
261
|
dhkl_list=dhkl_list,
|
|
220
262
|
)
|
|
221
263
|
|
|
222
264
|
return {
|
|
223
265
|
**gg,
|
|
224
|
-
**graph.tof.elastic("tof"),
|
|
225
266
|
'pulse_length': lambda: pulse_length,
|
|
226
267
|
'mod_period': lambda: mod_period,
|
|
227
268
|
'chopper_delay': lambda: chopper_delay,
|
|
@@ -232,56 +273,21 @@ def tof_from_known_dhkl_graph(
|
|
|
232
273
|
}
|
|
233
274
|
|
|
234
275
|
|
|
235
|
-
def
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
)
|
|
240
|
-
"""Estimates the time-at-chopper by assuming the wavelength."""
|
|
241
|
-
return (
|
|
242
|
-
sc.constants.m_n
|
|
243
|
-
/ sc.constants.h
|
|
244
|
-
* wavelength_estimate
|
|
245
|
-
* (L0 - Ltotal).to(unit=wavelength_estimate.unit)
|
|
246
|
-
).to(unit='s')
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
def _tof_from_t0(
|
|
250
|
-
time_of_arrival: sc.Variable,
|
|
251
|
-
t0: sc.Variable,
|
|
252
|
-
) -> sc.Variable:
|
|
253
|
-
"""Computes time-of-flight by subtracting a start time."""
|
|
254
|
-
return time_of_arrival - t0
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
def tof_from_t0_estimate_graph(
|
|
258
|
-
gg: GeometryCoordTransformGraph,
|
|
259
|
-
) -> TofCoordTransformGraph:
|
|
260
|
-
"""Graph for computing ``tof`` in pulse shaping chopper modes."""
|
|
261
|
-
return {
|
|
262
|
-
**gg,
|
|
263
|
-
**graph.tof.elastic("tof"),
|
|
264
|
-
't0': t0_estimate,
|
|
265
|
-
'tof': _tof_from_t0,
|
|
266
|
-
'time_of_arrival': time_of_arrival,
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
def compute_tof(
|
|
271
|
-
da: RawDetector[RunType], graph: TofCoordTransformGraph
|
|
272
|
-
) -> TofDetector[RunType]:
|
|
273
|
-
"""Uses the transformation graph to compute ``tof``."""
|
|
274
|
-
return da.transform_coords(('tof',), graph=graph)
|
|
276
|
+
def wavelength_detector(
|
|
277
|
+
da: RawDetector[RunType], graph: ElasticCoordTransformGraph[RunType]
|
|
278
|
+
) -> WavelengthDetector[RunType]:
|
|
279
|
+
"""Applies the transformation graph to compute ``wavelength``."""
|
|
280
|
+
return da.transform_coords(('wavelength',), graph=graph)
|
|
275
281
|
|
|
276
282
|
|
|
277
283
|
convert_from_known_peaks_providers = (
|
|
278
284
|
geometry_graph,
|
|
279
285
|
tof_from_known_dhkl_graph,
|
|
280
|
-
|
|
286
|
+
wavelength_detector,
|
|
281
287
|
)
|
|
282
288
|
convert_pulse_shaping = (
|
|
283
289
|
geometry_graph,
|
|
284
290
|
tof_from_t0_estimate_graph,
|
|
285
|
-
|
|
291
|
+
wavelength_detector,
|
|
286
292
|
)
|
|
287
|
-
providers = (
|
|
293
|
+
providers = (compute_wavelength_in_each_cluster, geometry_graph)
|
|
@@ -28,7 +28,8 @@ _registry = make_registry(
|
|
|
28
28
|
"silicon-dhkl.tab": "md5:59ee9ed57a7c039ce416c8df886da9cc",
|
|
29
29
|
"duplex-dhkl.tab": "md5:b4c6c2fcd66466ad291f306b2d6b346e",
|
|
30
30
|
"dhkl_quartz_nc.tab": "md5:40887d736e3acf859e44488bfd9a9213",
|
|
31
|
-
# Simulations from new model with corrected(?)
|
|
31
|
+
# Simulations from new model with corrected(?) moderator to detector
|
|
32
|
+
# distance.
|
|
32
33
|
# For correct reduction you need to use
|
|
33
34
|
# beer.io.mcstas_chopper_delay_from_mode_new_simulations
|
|
34
35
|
# to obtain the correct WavelengthDefinitionChopperDelay for these files.
|