Source code for matchms.filtering.metadata_processing.repair_inchi_inchikey_smiles

from matchms.filtering.SpeciesString import SpeciesString
from matchms.typing import SpectrumType


[docs]def repair_inchi_inchikey_smiles(spectrum_in: SpectrumType) -> SpectrumType: """Check if inchi, inchikey, and smiles entries seem correct. Detect and correct if any of those entries clearly belongs into one of the other two fields (e.g. inchikey found in inchi field). """ if spectrum_in is None: return None spectrum = spectrum_in.clone() # interpret available data and clean each inchi = spectrum.get("inchi", "") inchiaux = spectrum.get("inchiaux", "") inchikey = spectrum.get("inchikey", "") smiles = spectrum.get("smiles", "") cleaneds = [SpeciesString(s) for s in [inchi, inchiaux, inchikey, smiles]] # for each type, list what we have and pick one inchis = [c.cleaned for c in cleaneds if c.target == "inchi" and c.cleaned != ""] inchikeys = [c.cleaned for c in cleaneds if c.target == "inchikey" and c.cleaned != ""] smiles = [c.cleaned for c in cleaneds if c.target == "smiles" and c.cleaned != ""] spectrum.set("inchi", inchis[0] if len(inchis) > 0 else "") spectrum.set("inchikey", inchikeys[0] if len(inchikeys) > 0 else "") spectrum.set("smiles", smiles[0] if len(smiles) > 0 else "") return spectrum