comparison galaxy-tools/biobank/tools/enrollments_by_platewells.py @ 0:ba6cf6ede027 draft default tip

Uploaded
author ric
date Wed, 28 Sep 2016 06:03:30 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:ba6cf6ede027
1 """
2 From a list of platewells retrieves the enrollments code of the connected individual
3 """
4 import argparse
5 import csv
6 import sys
7
8 from bl.vl.kb import KnowledgeBase as KB
9 import bl.vl.utils.ome_utils as vlu
10 from bl.vl.utils import LOG_LEVELS, get_logger
11
12 def make_parser():
13 parser = argparse.ArgumentParser(description='From platewells 2 enrollments code')
14 parser.add_argument('--logfile', type=str, help='log file (default=stderr)')
15 parser.add_argument('--loglevel', type=str, choices = LOG_LEVELS,
16 help='logging level', default='INFO')
17 parser.add_argument('-H', '--host', type=str, help='omero hostname')
18 parser.add_argument('-U', '--user', type=str, help='omero user')
19 parser.add_argument('-P', '--passwd', type=str, help='omero password')
20 parser.add_argument('-S', '--study', type=str, required=True,
21 help='a study used to retrieve individuals')
22 parser.add_argument('--ifile', type=str, required=True,
23 help='list of platewells used to fetch data')
24 parser.add_argument('--ofile', type=str, help='output file path',
25 required=True)
26 return parser
27
28
29 def main(argv):
30 parser = make_parser()
31 args = parser.parse_args(argv)
32
33 logger = get_logger('pws2enrolls', level=args.loglevel,
34 filename=args.logfile)
35 try:
36 host = args.host or vlu.ome_host()
37 user = args.user or vlu.ome_user()
38 passwd = args.passwd or vlu.ome_passwd()
39 except ValueError, ve:
40 logger.critical(ve)
41 sys.exit(ve)
42
43 kb = KB(driver='omero')(host, user, passwd)
44 study = kb.get_study(args.study)
45 enrolled_map = {e.individual.id:e for e in kb.get_enrolled(study)}
46 logger.info('Loaded {} enrolled individuals for study {}'.format(len(enrolled_map), study.label))
47 plates = kb.get_objects(kb.TiterPlate)
48 logger.info('Loaded {} plates'.format(len(plates)))
49 pws_map = {':'.join([w.container.barcode, w.label]):w for w in kb.get_objects(kb.PlateWell)
50 if w.container.barcode}
51 logger.info('Loaded {} platewells'.format(len(pws_map)))
52 #records = []
53 of=open(args.ofile, 'w')
54 writer=csv.DictWriter(of, ['platewell', 'status', 'enrollment'],
55 delimiter='\t', quotechar='"', restval='None')
56 writer.writeheader()
57 with open(args.ifile, 'r') as f:
58 reader=csv.DictReader(f, delimiter='\t')
59 logger.info('Searching individuals connected to the platewells')
60 for r in reader:
61 ind=kb.dt.get_connected(pws_map[r['platewell']], kb.Individual,
62 kb.dt.DIRECTION_INCOMING)
63 try:
64 record = {'platewell': r['platewell'],
65 'status': pws_map[r['platewell']].status.enum_label(),
66 'enrollment': ':'.join([study.label,enrolled_map[ind[0].id].studyCode])}
67 except KeyError as e:
68 logger.warning('not enrolled {}'.format(r['platewell']))
69 record = {'platewell': r['platewell'],
70 'status': pws_map[r['platewell']].status.enum_label(),
71 'enrollment': ':'.join([study.label,'not_enrolled'])}
72 writer.writerow(record)
73 of.close()
74
75
76 if __name__ == "__main__":
77 main(sys.argv[1:])