Export files for GNPS

With pyOpenMS you can automatically generate all files needed for GNPS Feature-Based Molecular Networking (FBMN) and Ion Identity Molecular Networking (IIMN).

Pre-requisites are your input mzML files and a ConsensusMap, generated by an untargeted metabolomics pre-processing workflow. Ensure that MS2 data has been mapped to the FeatureMap objects with IDMapper. For IIMN adduct detection must have been performed on the FeatureMap objects during pre-processing with MetaboliteFeatureDeconvolution.

First, download two example mzML files that have been map aligned based on a feature map alignment.

from urllib.request import urlretrieve
gh = "https://raw.githubusercontent.com/OpenMS/pyopenms-docs/master"
urlretrieve (gh + "/src/data/Metabolomics_1_aligned.mzML", "Metabolomics_1_aligned.mzML")
urlretrieve (gh + "/src/data/Metabolomics_2_aligned.mzML", "Metabolomics_2_aligned.mzML")
urlretrieve (gh + "/src/data/UntargetedMetabolomics.consensusXML", "UntargetedMetabolomics.consensusXML")
from pyopenms import *

mzML_files = ["Metabolomics_1_aligned.mzML", "Metabolomics_2_aligned.mzML"]

consensusXML_file = "UntargetedMetabolomics.consensusXML"

Since GNPS only works with features that contain MS2 fragmentation spectra, the first step is to filter out features from your ConsensusMap that have no MS2 spectra annotated.

consensus_map = ConsensusMap()
ConsensusXMLFile().load(consensusXML_file, consensus_map)
filtered_map = ConsensusMap(consensus_map)
filtered_map.clear(False)
for feature in consensus_map:
    if feature.getPeptideIdentifications():
        filtered_map.push_back(feature)

consensusXML_file = "filtered.consensusXML"
ConsensusXMLFile().store(consensusXML_file, filtered_map)

Now you can export your all files for FBMN and IIMN.

# for FFBM
GNPSMGFFile().store(String(consensusXML_file), [file.encode() for file in mzML_files], String("MS2data.mgf"))
GNPSQuantificationFile().store(consensus_map, "FeatureQuantificationTable.txt")
GNPSMetaValueFile().store(consensus_map, "MetaValueTable.tsv")

# for IIMN
IonIdentityMolecularNetworking().annotateConsensusMap(consensus_map)
IonIdentityMolecularNetworking().writeSupplementaryPairTable(consensus_map, "SupplementaryPairTable.csv")