Pyteomics documentation v4.7.2

Example 4: Spectrum Annotation

«  Example 3: Search engines and PSM filtering   ::   Contents   ::   History of changes  »

Example 4: Spectrum Annotation

In this example we will retrieve a spectrum and visualize it, a lot like in example 2. However, we will not read the spectrum from a file, but retrieve it directly from an online repository. We will also use Pyteomics to annotate fragment ions. Let’s get to it! Full code can be downloaded here.

We are going to need spectrum_utils, a library for spectrum processing and visualization. Pyteomics integrates with it and allows to create annotated spectrum plots easily.

First, we use a spectrum’s Universal Spectrum Identifier to download it directly from the MassIVE repository. Pyteomics provides tools for that in the pyteomics.usi module.

from pyteomics import pylab_aux as pa, usi
import matplotlib.pyplot as plt
spectrum = usi.proxi(
peptide = 'WNQLQAFWGTGK'

Next, just plot the spectrum and annotate it with a single function call:

pa.annotate_spectrum(spectrum, peptide, precursor_charge=2, backend='spectrum_utils',
    ion_types='aby', title=peptide)

You will see a simple spectrum_utils annotation of the spectrum:


pyteomics.pylab_aux.annotate_spectrum() accepts a number of keyword parameters, allowing you to do just about everything you can do with spectrum_utils.


You can omit backend=’spectrum_utils’, and annotate_spectrum() will use the default backend. The default backend supports less spectrum preprocessing features.

Another thing spectrum_utils lets you do is mirror plots. Following the spectrum_utils documentation, we are going to make this part more complex, showing more of what you can do. This example includes modified peptides and a bit of spectrum preprocessing. Also, this time we are going to use the spectrum_utils.iplot backend to produce an interactive plot.

To annotate the spectrum of a modified peptide, you can use the ProForma notation, which is the only format supported by spectrum_utils now. You can also use the modX notation which is standard for Pyteomics: it will be converted to ProForma if possible:

from pyteomics import mass
peptide = 'DLTDYLoxMK'  # oxidized methionine
aa_mass = mass.std_aa_mass.copy()
aa_mass['ox'] = 15.9949  # define the mass of the label


In this case, using aa_mass and the modX sequence, Pyteomics will convert it to a ProForma string using pyteomics.parser.to_proforma():

>>> from pyteomics import parser
>>> parser.to_proforma(peptide, aa_mass=aa_mass)

Going back to our script! Next, we choose two spectra:

usi_top = 'mzspec:MSV000079960:DY_HS_Exp7-Ad1:scan:30372'
usi_bottom = 'mzspec:MSV000080679:j11962_C1orf144:scan:10671'

spectrum_top = usi.proxi(usi_top, 'massive')
spectrum_bottom = usi.proxi(usi_bottom, 'massive')

And finally, produce the image with:

pa.mirror(spectrum_top, spectrum_bottom, peptide=peptide, precursor_charge=2,
    aa_mass=aa_mass, ion_types='aby', ftol=0.5, scaling='root',
    remove_precursor_peak=True, backend='spectrum_utils.iplot'
    ).properties(width=640, height=400).save('mirror.html')

Here’s the result:

«  Example 3: Search engines and PSM filtering   ::   Contents   ::   History of changes  »