Source code for queryOBO

#!/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)