#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse
from collections import defaultdict
import pymzml.obo
FIELDNAMES = ['id', 'name', 'def', 'is_a']
[docs]def main(args):
'''
Use this script to interrogate the OBO database files.
usage:
./queryOBO.py [-h] [-v VERSION] query
Example::
$ ./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::
$ ./queryOBO.py 1000016
MS:1000016
scan time
"The time taken for an acquisition by scanning analyzers." [PSI:MS]
MS:1000503 ! scan attribute
'''
obo = pymzml.obo.OboTranslator(version=args.version)
obo.parseOBO()
if args.query.isdigit():
print(search_by_id(obo, args.query))
else:
for ix, match in enumerate(search_by_name(obo, args.query)):
print('#{0}'.format(ix))
for fieldname in ('id', 'name', 'def'):
print(match[fieldname])
if 'is_a' in match:
print('Is a:', match['is_a'])
def search_by_name(obo, name):
print('Searching for {0}'.format(name.lower()))
matches = []
for lookup in obo.lookups:
for key in lookup.keys():
if name.lower() in key.lower():
match = defaultdict(str)
for fieldname in FIELDNAMES:
if fieldname in lookup[key].keys():
match[fieldname] = lookup[key][fieldname]
matches.append(match)
return matches
def search_by_id(obo, id):
key = 'MS:{0}'.format(id)
return_value = ''
for lookup in obo.lookups:
if key in lookup:
if obo.MS_tag_regex.match(key):
for fn in FIELDNAMES:
if fn in lookup[key].keys():
return_value += '{0}\n'.format(lookup[key][fn])
return return_value
if __name__ == '__main__':
argparser = argparse.ArgumentParser(
usage=__doc__,
)
argparser.add_argument('query', help='an accession or part of an OBO term name to look for')
argparser.add_argument(
'-v', '--version', default='1.1.0',
help='''
the version of the OBO to use; valid options are 1.0.0, 1.1.0, and 1.2,
default is 1.1.0
''',
)
args = argparser.parse_args()
main(args)