Source code for matchms.importing.load_from_mzml

from typing import Generator
import numpy as np
from pyteomics.mzml import read
from matchms.importing.parsing_utils import (parse_mzml_mzxml_metadata,
                                             sort_by_mz)
from matchms.Spectrum import Spectrum


[docs]def load_from_mzml(filename: str, ms_level: int = 2, metadata_harmonization: bool = True) -> Generator[Spectrum, None, None]: """Load spectrum(s) from mzml file. This function will create ~matchms.Spectrum for every spectrum of desired ms_level found in a given MzML file. For more extensive parsing options consider using pyteomics or pymzml packages. Example: .. code-block:: python from matchms.importing import load_from_mzml file_mzml = "testdata.mzml" spectrums = list(load_from_mzml(file_mzml)) Parameters ---------- filename: Filename for mzml file to import. ms_level: Specify which ms level to import. Default is 2. metadata_harmonization : bool, optional Set to False if metadata harmonization to default keys is not desired. The default is True. """ with read(filename, dtype=dict) as reader: for pyteomics_spectrum in reader: if "ms level" in pyteomics_spectrum and pyteomics_spectrum["ms level"] == ms_level: metadata = parse_mzml_mzxml_metadata(pyteomics_spectrum) mz = np.asarray(pyteomics_spectrum["m/z array"], dtype="float") intensities = np.asarray(pyteomics_spectrum["intensity array"], dtype="float") mz, intensities = sort_by_mz(mz=mz, intensities=intensities) yield Spectrum(mz=mz, intensities=intensities, metadata=metadata, metadata_harmonization=metadata_harmonization)