Source code for ess.estia.workflow

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2025 Scipp contributors (https://github.com/scipp)

import sciline
import scipp as sc

from ess.reduce import nexus

from ..reflectometry import providers as reflectometry_providers
from ..reflectometry import supermirror
from ..reflectometry.types import (
    BeamDivergenceLimits,
    DetectorSpatialResolution,
    NeXusDetectorName,
    ReferenceRun,
    RunType,
    SampleRotationOffset,
    SampleRun,
)
from . import conversions, corrections, load, maskings, normalization, orso

_general_providers = (
    *reflectometry_providers,
    *conversions.providers,
    *corrections.providers,
    *maskings.providers,
    *normalization.providers,
    *orso.providers,
)

mcstas_providers = (
    *_general_providers,
    *load.providers,
)
"""List of providers for setting up a Sciline pipeline for McStas data.

This provides a default Estia workflow including providers for loadings files.
"""

providers = (*_general_providers,)
"""List of providers for setting up a Sciline pipeline data.

This provides a default Estia workflow including providers for loadings files.
"""


[docs] def mcstas_default_parameters() -> dict: return { supermirror.MValue: sc.scalar(5, unit=sc.units.dimensionless), supermirror.CriticalEdge: 0.022 * sc.Unit("1/angstrom"), supermirror.Alpha: sc.scalar(0.25 / 0.088, unit=sc.units.angstrom), DetectorSpatialResolution[RunType]: 0.0025 * sc.units.m, NeXusDetectorName: "detector", BeamDivergenceLimits: ( sc.scalar(-0.75, unit='deg'), sc.scalar(0.75, unit='deg'), ), SampleRotationOffset[RunType]: sc.scalar(0.0, unit='deg'), }
[docs] def default_parameters() -> dict: return { NeXusDetectorName: "multiblade_detector", }
[docs] def EstiaMcStasWorkflow() -> sciline.Pipeline: """Workflow for reduction of McStas data for the Estia instrument.""" return sciline.Pipeline( providers=mcstas_providers, params=mcstas_default_parameters() )
[docs] def EstiaWorkflow() -> sciline.Pipeline: """Workflow for reduction of data for the Estia instrument.""" workflow = nexus.GenericNeXusWorkflow( run_types=[SampleRun, ReferenceRun], monitor_types=[] ) for provider in providers: workflow.insert(provider) for name, param in default_parameters().items(): workflow[name] = param return workflow