Source code for ess.isissans.components

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2024 Scipp contributors (https://github.com/scipp)
from typing import NewType

import sciline
import scipp as sc

from ..sans.types import (
    BeamCenter,
    CalibratedDetector,
    MonitorType,
    RawDetector,
    RawMonitor,
    RawMonitorData,
    RunType,
    ScatteringRunType,
)


[docs] class MonitorOffset(sciline.Scope[MonitorType, sc.Variable], sc.Variable): """Offset for monitor position"""
SampleOffset = NewType('SampleOffset', sc.Variable) DetectorBankOffset = NewType('DetectorBankOffset', sc.Variable)
[docs] def apply_beam_center( data: RawDetector[ScatteringRunType], beam_center: BeamCenter ) -> CalibratedDetector[ScatteringRunType]: """Apply user offsets to raw data. Parameters ---------- data: Raw data. sample_offset: Sample offset. detector_bank_offset: Detector bank offset. """ return CalibratedDetector[ScatteringRunType]( data.assign_coords(position=data.coords['position'] - beam_center) )
[docs] def apply_component_user_offsets_to_raw_monitor( monitor_data: RawMonitor[RunType, MonitorType], monitor_offset: MonitorOffset[MonitorType], ) -> RawMonitorData[RunType, MonitorType]: """Apply user offsets to raw monitor. Parameters ---------- monitor_data: Raw monitor data. monitor_offset: Offset to apply to monitor position. """ monitor_data = monitor_data.copy(deep=False) pos = monitor_data.coords['position'] monitor_data.coords['position'] = pos + monitor_offset.to(unit=pos.unit, copy=False) return RawMonitorData[RunType, MonitorType](monitor_data)
providers = ( apply_beam_center, apply_component_user_offsets_to_raw_monitor, )