Source code for scippneutron.peaks._remove_peaks

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

from collections.abc import Iterable

import scipp as sc

from ._fit_peaks import FitResult


[docs] def remove_peaks(data: sc.DataArray, fit_results: Iterable[FitResult]) -> sc.DataArray: """Remove peaks from data by subtracting fitted models. Peaks are removed by subtracting fitted peak models from the data. The background models are ignored in this operation. Parameters ---------- data: 1d data with peaks. Must have a dimension-coordinate. fit_results: Results of fitting the peaks that should be removed. Any unsuccessful fits are ignored. Returns ------- : ``data`` with peaks removed. See Also -------- fit_peaks: Fit the peaks in ``data`` and construct the required input to ``fit_results``. """ if data.variances is not None: raise sc.VariancesError( 'Cannot remove peaks from data with variances as that would introduce ' 'correlations between data points.' ) data = data.copy(deep=False) data.data = data.data.copy() # need a deep copy for the in-place subtraction below for result in fit_results: if not result.success: continue in_window = data[data.dim, result.window[0] : result.window[1]] in_window -= result.eval_peak(in_window.coords[data.dim]) return data