Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion docs/user-guide/dream/dream-advanced-powder-reduction.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
"\n",
"workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux_BC215\n",
"workflow[LookupTableFilename] = \"DREAM-high-flux-wavelength-lut-5m-80m-bc215.h5\"\n",
"# Select a detector bank:\n",
"workflow[NeXusDetectorName] = \"mantle\"\n",
"# We drop uncertainties where they would otherwise lead to correlations:\n",
Expand Down Expand Up @@ -186,6 +187,7 @@
"workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
"\n",
"workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux_BC215\n",
"workflow[LookupTableFilename] = \"DREAM-high-flux-wavelength-lut-5m-80m-bc215.h5\"\n",
"# Select a detector bank:\n",
"workflow[NeXusDetectorName] = \"mantle\"\n",
"# We drop uncertainties where they would otherwise lead to correlations:\n",
Expand Down Expand Up @@ -261,6 +263,7 @@
"workflow[CalibrationFilename] = None\n",
"\n",
"workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux_BC215\n",
"workflow[LookupTableFilename] = \"DREAM-high-flux-wavelength-lut-5m-80m-bc215.h5\"\n",
"# Select a detector bank:\n",
"workflow[NeXusDetectorName] = \"mantle\"\n",
"# We drop uncertainties where they would otherwise lead to correlations:\n",
Expand Down Expand Up @@ -375,6 +378,7 @@
"workflow[CalibrationFilename] = None\n",
"\n",
"workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux_BC215\n",
"workflow[LookupTableFilename] = \"DREAM-high-flux-wavelength-lut-5m-80m-bc215.h5\"\n",
"# We drop uncertainties where they would otherwise lead to correlations:\n",
"workflow[UncertaintyBroadcastMode] = UncertaintyBroadcastMode.drop\n",
"# Edges for binning in d-spacing:\n",
Expand Down Expand Up @@ -610,6 +614,14 @@
" vmin=1e-3,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dd340637-933f-4c73-b996-285b7394bd03",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
Expand All @@ -628,7 +640,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.14"
"version": "3.12.12"
}
},
"nbformat": 4,
Expand Down
38 changes: 23 additions & 15 deletions docs/user-guide/dream/dream-make-tof-lookup-table.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
"id": "0",
"metadata": {},
"source": [
"# Create a time-of-flight lookup table for DREAM\n",
"# Create a wavelength lookup table for DREAM\n",
"\n",
"This notebook shows how to create a time-of-flight lookup table for the DREAM instrument."
"This notebook shows how to create a wavelength lookup table for the DREAM instrument."
]
},
{
Expand All @@ -18,7 +18,7 @@
"outputs": [],
"source": [
"import scipp as sc\n",
"from ess.reduce import time_of_flight\n",
"from ess.reduce import kinematics as kin\n",
"from ess.reduce.nexus.types import AnyRun\n",
"from ess.dream.beamline import InstrumentConfiguration, choppers"
]
Expand Down Expand Up @@ -60,17 +60,17 @@
"metadata": {},
"outputs": [],
"source": [
"wf = time_of_flight.TofLookupTableWorkflow()\n",
"wf = kin.LookupTableWorkflow()\n",
"\n",
"wf[time_of_flight.LtotalRange] = sc.scalar(5.0, unit=\"m\"), sc.scalar(80.0, unit=\"m\")\n",
"wf[time_of_flight.NumberOfSimulatedNeutrons] = 200_000 # Increase this number for more reliable results\n",
"wf[time_of_flight.SourcePosition] = sc.vector([0, 0, 0], unit='m')\n",
"wf[time_of_flight.DiskChoppers[AnyRun]] = disk_choppers\n",
"wf[time_of_flight.DistanceResolution] = sc.scalar(0.1, unit=\"m\")\n",
"wf[time_of_flight.TimeResolution] = sc.scalar(250.0, unit='us')\n",
"wf[time_of_flight.PulsePeriod] = 1.0 / sc.scalar(14.0, unit=\"Hz\")\n",
"wf[time_of_flight.PulseStride] = 1\n",
"wf[time_of_flight.PulseStrideOffset] = None"
"wf[kin.LtotalRange] = sc.scalar(5.0, unit=\"m\"), sc.scalar(80.0, unit=\"m\")\n",
"wf[kin.NumberOfSimulatedNeutrons] = 5_000_000 # Increase this number for more reliable results\n",
"wf[kin.SourcePosition] = sc.vector([0, 0, 0], unit='m')\n",
"wf[kin.DiskChoppers[AnyRun]] = disk_choppers\n",
"wf[kin.DistanceResolution] = sc.scalar(0.1, unit=\"m\")\n",
"wf[kin.TimeResolution] = sc.scalar(250.0, unit='us')\n",
"wf[kin.PulsePeriod] = 1.0 / sc.scalar(14.0, unit=\"Hz\")\n",
"wf[kin.PulseStride] = 1\n",
"wf[kin.PulseStrideOffset] = None"
]
},
{
Expand All @@ -88,7 +88,7 @@
"metadata": {},
"outputs": [],
"source": [
"table = wf.compute(time_of_flight.TimeOfFlightLookupTable)\n",
"table = wf.compute(kin.LookupTable)\n",
"table.array"
]
},
Expand Down Expand Up @@ -117,8 +117,16 @@
"metadata": {},
"outputs": [],
"source": [
"table.save_hdf5('DREAM-high-flux-tof-lut-5m-80m.h5')"
"table.save_hdf5('DREAM-high-flux-wavelength-lut-5m-80m-bc215.h5')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a43b15e7-a225-4e73-b037-78f01dbefcf7",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
Expand Down
53 changes: 37 additions & 16 deletions docs/user-guide/dream/dream-powder-reduction.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
"metadata": {},
"outputs": [],
"source": [
"workflow = dream.DreamGeant4Workflow(\n",
"wf = dream.DreamGeant4Workflow(\n",
" run_norm=powder.RunNormalization.monitor_histogram,\n",
")"
]
Expand All @@ -77,26 +77,27 @@
"metadata": {},
"outputs": [],
"source": [
"workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
"workflow[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
"workflow[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
"workflow[CalibrationFilename] = None\n",
"wf[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n",
"wf[Filename[VanadiumRun]] = dream.data.simulated_vanadium_sample()\n",
"wf[Filename[EmptyCanRun]] = dream.data.simulated_empty_can()\n",
"wf[CalibrationFilename] = None\n",
"\n",
"workflow[MonitorFilename[SampleRun]] = dream.data.simulated_monitor_diamond_sample()\n",
"workflow[MonitorFilename[VanadiumRun]] = dream.data.simulated_monitor_vanadium_sample()\n",
"workflow[MonitorFilename[EmptyCanRun]] = dream.data.simulated_monitor_empty_can()\n",
"workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
"wf[MonitorFilename[SampleRun]] = dream.data.simulated_monitor_diamond_sample()\n",
"wf[MonitorFilename[VanadiumRun]] = dream.data.simulated_monitor_vanadium_sample()\n",
"wf[MonitorFilename[EmptyCanRun]] = dream.data.simulated_monitor_empty_can()\n",
"wf[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n",
"\n",
"workflow[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux_BC215\n",
"wf[dream.InstrumentConfiguration] = dream.InstrumentConfiguration.high_flux_BC215\n",
"wf[LookupTableFilename] = \"DREAM-high-flux-wavelength-lut-5m-80m-bc215.h5\"\n",
"# Select a detector bank:\n",
"workflow[NeXusDetectorName] = \"mantle\"\n",
"wf[NeXusDetectorName] = \"mantle\"\n",
"# We drop uncertainties where they would otherwise lead to correlations:\n",
"workflow[UncertaintyBroadcastMode] = UncertaintyBroadcastMode.drop\n",
"wf[UncertaintyBroadcastMode] = UncertaintyBroadcastMode.drop\n",
"# Edges for binning in d-spacing:\n",
"workflow[DspacingBins] = sc.linspace(\"dspacing\", 0.3, 2.3434, 201, unit=\"angstrom\")\n",
"wf[DspacingBins] = sc.linspace(\"dspacing\", 0.3, 2.3434, 201, unit=\"angstrom\")\n",
"\n",
"# Do not mask any pixels / voxels:\n",
"workflow = powder.with_pixel_mask_filenames(workflow, [])"
"wf = powder.with_pixel_mask_filenames(wf, [])"
]
},
{
Expand All @@ -114,14 +115,34 @@
"If we didn't want to subtract an empty can measurement from the sample measurement, we would instead request `IofDspacing[SampleRun]` and `ReducedTofCIF`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5c212c16-08dc-4582-891c-7938b2cc75bd",
"metadata": {},
"outputs": [],
"source": [
"wf.compute(LookupTableRelativeErrorThreshold)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "40e1be11-41f0-4839-9efa-e3e1de650808",
"metadata": {},
"outputs": [],
"source": [
"wf.visualize(ReducedEmptyCanSubtractedTofCIF, graph_attr={\"rankdir\": \"LR\"})"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7",
"metadata": {},
"outputs": [],
"source": [
"results = workflow.compute([\n",
"results = wf.compute([\n",
" EmptyCanSubtractedIofDspacing,\n",
" ReducedEmptyCanSubtractedTofCIF\n",
"])\n",
Expand Down Expand Up @@ -229,7 +250,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.10"
"version": "3.12.12"
}
},
"nbformat": 4,
Expand Down
22 changes: 11 additions & 11 deletions src/ess/dream/workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import sciline
import scipp as sc
import scippnexus as snx
from ess.reduce.nexus.types import DetectorBankSizes, NeXusName
from ess.reduce.parameter import parameter_mappers
from ess.reduce.unwrap import GenericUnwrapWorkflow
from ess.reduce.workflow import register_workflow
from scippneutron.metadata import Software

from ess.powder import providers as powder_providers
Expand All @@ -18,21 +22,17 @@
CaveMonitorPosition, # Should this be a DREAM-only parameter?
EmptyCanRun,
KeepEvents,
LookupTableFilename,
LookupTableRelativeErrorThreshold,
PixelMaskFilename,
Position,
ReducerSoftware,
SampleRun,
TimeOfFlightLookupTableFilename,
TofMask,
TwoThetaMask,
VanadiumRun,
WavelengthMask,
)
from ess.reduce.nexus.types import DetectorBankSizes, NeXusName
from ess.reduce.parameter import parameter_mappers
from ess.reduce.time_of_flight import GenericTofWorkflow
from ess.reduce.workflow import register_workflow

from .beamline import InstrumentConfiguration
from .io.cif import (
Expand Down Expand Up @@ -72,7 +72,7 @@

def _get_lookup_table_filename_from_configuration(
configuration: InstrumentConfiguration,
) -> TimeOfFlightLookupTableFilename:
) -> LookupTableFilename:
from .data import tof_lookup_table_high_flux

match configuration:
Expand All @@ -83,13 +83,13 @@ def _get_lookup_table_filename_from_configuration(
case InstrumentConfiguration.high_resolution:
raise NotImplementedError("High resolution configuration not yet supported")

return TimeOfFlightLookupTableFilename(out)
return LookupTableFilename(out)


def _collect_reducer_software() -> ReducerSoftware:
return ReducerSoftware(
[
Software.from_package_metadata('essdiffraction'),
# Software.from_package_metadata('essdiffraction'),
Software.from_package_metadata('scippneutron'),
Software.from_package_metadata('scipp'),
]
Expand All @@ -99,7 +99,7 @@ def _collect_reducer_software() -> ReducerSoftware:
def DreamWorkflow(**kwargs) -> sciline.Pipeline:
"""
Dream generic workflow with default parameters.
The workflow is based on the GenericTofWorkflow.
The workflow is based on the GenericUnwrapWorkflow.
It can load data from a NeXus file recorded on the DREAM instrument, and can
compute time-of-flight for the neutron events.

Expand All @@ -110,9 +110,9 @@ def DreamWorkflow(**kwargs) -> sciline.Pipeline:
----------
kwargs:
Additional keyword arguments are forwarded to the base
:func:`GenericTofWorkflow`.
:func:`GenericUnwrapWorkflow`.
"""
wf = GenericTofWorkflow(
wf = GenericUnwrapWorkflow(
run_types=[SampleRun, VanadiumRun, EmptyCanRun],
monitor_types=[BunkerMonitor, CaveMonitor],
**kwargs,
Expand Down
Loading