Source code for matchms.filtering.peak_processing.select_by_relative_intensity

import numpy as np
from matchms.Fragments import Fragments
from matchms.typing import SpectrumType


[docs]def select_by_relative_intensity(spectrum_in: SpectrumType, intensity_from: float = 0.0, intensity_to: float = 1.0) -> SpectrumType: """Keep only peaks within set relative intensity range (keep if intensity_from >= intensity >= intensity_to). Parameters ---------- intensity_from: Set lower threshold for relative peak intensity. Default is 0.0. intensity_to: Set upper threshold for relative peak intensity. Default is 1.0. """ if spectrum_in is None: return None spectrum = spectrum_in.clone() assert intensity_from >= 0.0, "'intensity_from' should be larger than or equal to 0." assert intensity_to <= 1.0, "'intensity_to' should be smaller than or equal to 1.0." assert intensity_from <= intensity_to, "'intensity_from' should be smaller than or equal to 'intensity_to'." if len(spectrum.peaks) > 0: scale_factor = np.max(spectrum.peaks.intensities) normalized_intensities = spectrum.peaks.intensities / scale_factor condition = np.logical_and(intensity_from <= normalized_intensities, normalized_intensities <= intensity_to) spectrum.peaks = Fragments(mz=spectrum.peaks.mz[condition], intensities=spectrum.peaks.intensities[condition]) return spectrum