Source code for ess.bifrost.cutting
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2025 Scipp contributors (https://github.com/scipp)
"""Cutting BIFROST data."""
import scipp as sc
from ess.spectroscopy.types import (
DataGroupedByRotation,
DetectorData,
InstrumentAngles,
RunType,
)
[docs]
def group_by_rotation(
data: DetectorData[RunType],
angles: InstrumentAngles[RunType],
) -> DataGroupedByRotation[RunType]:
"""Group data by rotation angles.
Parameters
----------
data:
Detector events with time coordinates.
angles:
Data group with time-dependent entries "a3" and "a4".
Returns
-------
:
``data`` grouped by rotation angles "a3" and "a4".
"""
a3 = sc.lookup(angles['a3'], 'time')
a4 = sc.lookup(angles['a4'], 'time')
graph = {
'a3': lambda event_time_zero: a3[event_time_zero],
'a4': lambda event_time_zero: a4[event_time_zero],
}
grouped = data.transform_coords(('a3', 'a4'), graph=graph).group('a3', 'a4')
return DataGroupedByRotation[RunType](grouped)
providers = (group_by_rotation,)