# 3.6. OBO parser

Class to parse the obo file and set up the accessions library

The OBO parser has been designed to convert MS:xxxxx tags to their appropriate names. A minimal set of MS accession is used in pymzML, but additional accessions can easily be queried.

The obo translator is used internally to associate names with MS:xxxxxxx tags.

The OboTranslator Class generates a dictionary and several lookup tables. e.g.

    >>> from pymzml.obo import OboTranslator as OT
    >>> translator = OT()
    >>> translator['MS:1000127']
    'centroid mass spectrum'
    >>> translator['positive scan']
    {'is_a': 'MS:1000465 ! scan polarity', 'id': 'MS:1000130', 'def':
    '"Polarity of the scan is positive." [PSI:MS]', 'name': 'positive scan'}
    >>> translator['scan']
    {'relationship': 'part_of MS:0000000 ! Proteomics Standards Initiative Mass
    Spectrometry Ontology', 'id': 'MS:1000441', 'def': '"Function or process of
    the mass spectrometer where it records a spectrum." [PSI:MS]', 'name':
    'scan'}
    >>> translator['unit']
    {'relationship': 'part_of MS:0000000 ! Proteomics Standards Initiative Mass
    Spectrometry Ontology', 'id': 'MS:1000460', 'def': '"Terms to describe
    units." [PSI:MS]', 'name': 'unit'}

pymzML comes with the queryOBO.py script that can be used to interrogate the OBO file. Please refer to Example Scripts for further usage information.

    $ ./example_scripts/queryOBO.py "scan time"
    MS:1000016
    scan time
    "The time taken for an acquisition by scanning analyzers." [PSI:MS]
    Is a: MS:1000503 ! scan attribute
    $

    $ ./example_scripts/queryOBO.py 1000016
    MS:1000016
    scan time
    "The time taken for an acquisition by scanning analyzers." [PSI:MS]
    MS:1000503 ! scan attribute
    $

## 3.6.1. Accessing specific OBO MS tags

This section describes how to access some common MS tags by their names as they are defined in the OBO file.

First pymzML is imported and the run is defined.

    >>> example_file = get_example_file.open_example('dta_example.mzML')
    >>> import pymzml
    >>> msrun = pymzml.run.Reader(example_file)

Now, we can fetch specific imformations from the spectrum object.

MS level:

    >>> for spectrum in msrun:
    ...     print(spectrum['ms level'])

Total Ion current:

    >>> for spectrum in msrun:
    ...     print(spectrum['total ion current'])

Furthermore we can also check for presence of parameters, therefore the proprties of the spectrum.

Differentiation of e.g. HCD and CID fractionation:

    >>> for spectrum in msrun:
    ...     if spctrum['ms level'] == 2:
    ...         if 'collision-induced dissociation' in spectrum.keys():
    ...             print('Spectrum {0} is a CID spectrum'.format(spectrum['id']))
    ...         elif 'high-energy collision-induced dissociation' in spectrum.keys():
    ...             print('Spectrum {0} is a HCD spectrum'.format(spectrum['id']))