Package: masstodon
masstodonYour Python3 module for investigating the Electron Transfer Dissociation in Mass Spectrometry, and more generally finding stuff in the mass spectrum.PrerequisitesPython3InstallationThe package can be installed directly from the Python Package Index:pip install masstodonOtherwise, download this github repo, use the default branch, and install the software with:pip install .from the folder containingsetup.py.
This will let you importmasstodonsimply byimport masstodonRunningcommand line interfaceIt is possible to runmasstodonfrom command line after installing it from PIP.
Given that it would be not comfortable to input multiple compounds with their possible modifications and charges from the terminal, we have restricted (for now) the possibility to runmasstodonin the traditional case of studying precisely one protein and its c/z fragmentation patterns.To see a detailed description of the possible arguments, open the terminal (or the Anaconda prompt on Windows, but seriously, Windows? You should feel guilty...) and writemasstodon -hTo runmasstodon, you do need to supply at least:the file with the spectrumthe tolerance for the search in the m/z axisthe amino acid sequence (fasta)the charge of the substanceAll other parameters can be skipped, but it might be silly.
For instance, if you know that there is a particular PTM on a given amino acid,
you should supply the-mparameter, and so on.Python scriptingImporting data.You can analyze individual mass spectra withmasstodon.
This might very well be individual scans of anOrbitrap, or a general mass spectrum.
The easiest way to import the mass spectrum is to present a plainASCIIfile with m/z and intensity values in each row, separated by tab or some other whitespace sign.Running masstodon.
To callmasstodonwith a single compound, use themasstodon_singlefunction.For instance:from masstodon.data.substanceP_wh15_wv400 import mz, intensity, fasta, modifications, z # input data
from masstodon.masstodon import masstodon_single # masstodon-proper
from pprint import pprint # nicer output in the terminal

print(mz)
# array([  61.01 ,   64.152,   66.515, ..., 1403.9  , 1485.578, 1497.226])
print(intensity)
# array([844.4 ,  25.35, 190.1 , ...,  15.38,  55.62,  21.  ])
print(fasta)
# 'RPKPQQFFGLM'
print(modifications)
# {'11': {'C_carbo': {'H': 1, 'N': 1, 'O': -1}}}
# (modify 11th amino-acid [starting from 1 for user-friendliness],
# by adding the chemical diff unto the group of atoms that include the C_carbo.)
print(z)
# 3

m = masstodon_single(mz, intensity, fasta, z,
                     min_mz_diff        = 1.1, # this is actually the default
                     modifications      = modifications,
                     orbitrap           = False, # this ain't an orbitrap profile spectrum
                     threshold          = "0.05 Da", # how far away to search for
                     isotopic_coverage  = .999, # IsoSpec isotopic envelope coverage
                     min_prob           = .8, # minimal acceptance probability of a candidate theoretical envelope.
                     std_cnt            = 3 # m/z standard deviation count filter)
# for min_prob and std_cnt check out the publication under the filtering procedures.

print("Save spectrum to where you started your python from.")
m.plotly("spectrum.html", shape='rectangles', show=True)

print("Getting stats on inintial and final number of nodes and edges in the deconvolution graph.")
pprint(m.ome.G_stats)

print("Errors: absolute deviations and relative distance between spectra.")
pprint(m.imperator.errors())

print("Estimates of intensities of reactions and fragmentations.")
pprint(m.cz_simple.intensities)
pprint(m.cz_simple.probabilities)

print("Save all things under the given path.")
m.write(".")