Source code for matchms.filtering.peak_processing.require_minimum_number_of_peaks

import logging
from math import ceil
from typing import Optional
from matchms.typing import SpectrumType


logger = logging.getLogger("matchms")


[docs]def require_minimum_number_of_peaks(spectrum_in: SpectrumType, n_required: int = 10, ratio_required: Optional[float] = None) -> SpectrumType: """Spectrum will be set to None when it has fewer peaks than required. Parameters ---------- spectrum_in: Input spectrum. n_required: Number of minimum required peaks. Spectra with fewer peaks will be set to 'None'. ratio_required: Set desired ratio between minimum number of peaks and parent mass. Default is None. """ if spectrum_in is None: return None spectrum = spectrum_in.clone() parent_mass = spectrum.get("parent_mass", None) if parent_mass and ratio_required: n_required_by_mass = int(ceil(ratio_required * parent_mass)) threshold = max(n_required, n_required_by_mass) else: threshold = n_required if spectrum.peaks.intensities.size < threshold: logger.info("Spectrum with %s (<%s) peaks was set to None.", str(spectrum.peaks.intensities.size), str(threshold)) return None return spectrum