Source code for matchms.filtering.add_fingerprint

import logging
import numpy
from ..metadata_utils import (derive_fingerprint_from_inchi,
                              derive_fingerprint_from_smiles)
from ..typing import SpectrumType


logger = logging.getLogger("matchms")


[docs]def add_fingerprint(spectrum_in: SpectrumType, fingerprint_type: str = "daylight", nbits: int = 2048) -> SpectrumType: """Add molecular finterprint to spectrum. If smiles or inchi present in metadata, derive a molecular finterprint and add it to the spectrum. Parameters ---------- spectrum_in: Input spectrum. fingerprint_type: Determine method for deriving molecular fingerprints. Supported choices are "daylight", "morgan1", "morgan2", "morgan3". Default is "daylight". nbits: Dimension or number of bits of generated fingerprint. Default is 2048. """ if spectrum_in is None: return None spectrum = spectrum_in.clone() # First try to get fingerprint from smiles if spectrum.get("smiles", None): fingerprint = derive_fingerprint_from_smiles(spectrum.get("smiles"), fingerprint_type, nbits) if isinstance(fingerprint, numpy.ndarray) and fingerprint.sum() > 0: spectrum.set("fingerprint", fingerprint) return spectrum # Second try to get fingerprint from inchi if spectrum.get("inchi", None): fingerprint = derive_fingerprint_from_inchi(spectrum.get("inchi"), fingerprint_type, nbits) if isinstance(fingerprint, numpy.ndarray) and fingerprint.sum() > 0: spectrum.set("fingerprint", fingerprint) return spectrum logger.info("No fingerprint was added (name: %s).", spectrum.get("compound_name")) return spectrum