Source code for matchms.filtering.derive_ionmode

import logging
from matchms.filtering.load_adducts import load_adducts_dict
from ..metadata_utils import clean_adduct
from ..typing import SpectrumType


logger = logging.getLogger("matchms")


[docs]def derive_ionmode(spectrum_in: SpectrumType) -> SpectrumType: """Derive missing ionmode based on adduct. Some input formates (e.g. MGF files) do not always provide a correct ionmode. This function reads the adduct from the metadata and uses this to fill in the correct ionmode where missing. Parameters ---------- spectrum Input spectrum. Returns ------- Spectrum object with `ionmode` attribute set. """ if spectrum_in is None: return None spectrum = spectrum_in.clone() # Load lists of known adducts known_adducts = load_adducts_dict() adduct = spectrum.get("adduct", None) # Harmonize adduct string if adduct: adduct = clean_adduct(adduct) ionmode = spectrum.get("ionmode") if ionmode: assert ionmode == ionmode.lower(), ("Ionmode field not harmonized.", "Apply 'make_ionmode_lowercase' filter first.") if ionmode in ["positive", "negative"]: return spectrum # Try completing missing or incorrect ionmodes if adduct in known_adducts: ionmode = known_adducts[adduct]["ionmode"] else: ionmode = "n/a" spectrum.set("ionmode", ionmode) logger.info("Set ionmode to %s.", ionmode) return spectrum