Source code for ess.powder.grouping
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2025 Scipp contributors (https://github.com/scipp)
"""Grouping and merging of pixels / voxels."""
import scipp as sc
from .types import (
DspacingBins,
DspacingData,
FocussedDataDspacing,
FocussedDataDspacingTwoTheta,
RunType,
TwoThetaBins,
)
[docs]
def focus_data_dspacing(
data: DspacingData[RunType], dspacing_bins: DspacingBins
) -> FocussedDataDspacing[RunType]:
return FocussedDataDspacing[RunType](
data.bin({dspacing_bins.dim: dspacing_bins}, dim=data.dims)
)
[docs]
def focus_data_dspacing_and_two_theta(
data: DspacingData[RunType],
dspacing_bins: DspacingBins,
twotheta_bins: TwoThetaBins,
) -> FocussedDataDspacingTwoTheta[RunType]:
return FocussedDataDspacingTwoTheta[RunType](
data.bin({twotheta_bins.dim: twotheta_bins, dspacing_bins.dim: dspacing_bins})
)
[docs]
def collect_detectors(*detectors: sc.DataArray) -> sc.DataGroup:
"""Store all inputs in a single data group.
This function is intended to be used to reduce a workflow which
was mapped over detectors.
Parameters
----------
detectors:
Data arrays for each detector bank.
All arrays must have a scalar "detector" coord containing a ``str``.
Returns
-------
:
The inputs as a data group with the "detector" coord as the key.
"""
return sc.DataGroup({da.coords.pop('detector').value: da for da in detectors})
providers = (focus_data_dspacing, focus_data_dspacing_and_two_theta)
"""Sciline providers for grouping pixels."""