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)