Source code for matchms.filtering.peak_processing.remove_peaks_around_precursor_mz
import numpy as np
from matchms.Fragments import Fragments
from matchms.typing import SpectrumType
[docs]def remove_peaks_around_precursor_mz(spectrum_in: SpectrumType, mz_tolerance: float = 17) -> SpectrumType:
"""Remove peaks that are within mz_tolerance (in Da) of
the precursor mz, exlcuding the precursor peak.
Parameters
----------
spectrum_in:
Input spectrum.
mz_tolerance:
Tolerance of mz values that are not allowed to lie
within the precursor mz. Default is 17 Da.
"""
if spectrum_in is None:
return None
spectrum = spectrum_in.clone()
precursor_mz = spectrum.get("precursor_mz", None)
assert precursor_mz is not None, "Precursor mz absent."
assert isinstance(precursor_mz, (float, int)), ("Expected 'precursor_mz' to be a scalar number.",
"Consider applying 'add_precursor_mz' filter first.")
assert mz_tolerance >= 0, "mz_tolerance must be a positive scalar."
mzs, intensities = spectrum.peaks.mz, spectrum.peaks.intensities
peaks_to_remove = ((np.abs(precursor_mz-mzs) <= mz_tolerance) & (mzs != precursor_mz))
new_mzs, new_intensities = mzs[~peaks_to_remove], intensities[~peaks_to_remove]
spectrum.peaks = Fragments(mz=new_mzs, intensities=new_intensities)
return spectrum