annotate galaxy-tools/biobank/utils/from_well_to_illumina_measures.py @ 3:43be74e62bfe draft

Uploaded
author ric
date Thu, 22 Sep 2016 08:57:04 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
43be74e62bfe Uploaded
ric
parents:
diff changeset
1 import sys, argparse, csv
43be74e62bfe Uploaded
ric
parents:
diff changeset
2
43be74e62bfe Uploaded
ric
parents:
diff changeset
3 from bl.vl.kb import KnowledgeBase as KB
43be74e62bfe Uploaded
ric
parents:
diff changeset
4 from bl.vl.utils import get_logger, LOG_LEVELS
43be74e62bfe Uploaded
ric
parents:
diff changeset
5 import bl.vl.utils.ome_utils as vlu
43be74e62bfe Uploaded
ric
parents:
diff changeset
6 from bl.vl.graph.drivers.neo4j import Neo4JDriver
43be74e62bfe Uploaded
ric
parents:
diff changeset
7
43be74e62bfe Uploaded
ric
parents:
diff changeset
8
43be74e62bfe Uploaded
ric
parents:
diff changeset
9 def make_parser():
43be74e62bfe Uploaded
ric
parents:
diff changeset
10 parser = argparse.ArgumentParser(description='map wells label to illumina bead chip measures')
43be74e62bfe Uploaded
ric
parents:
diff changeset
11 parser.add_argument('--logfile', type=str, help='log file (deafult=stderr)')
43be74e62bfe Uploaded
ric
parents:
diff changeset
12 parser.add_argument('--loglevel', type=str, choices=LOG_LEVELS,
43be74e62bfe Uploaded
ric
parents:
diff changeset
13 help='logging level (default=INFO)', default='INFO')
43be74e62bfe Uploaded
ric
parents:
diff changeset
14 parser.add_argument('-H', '--host', type=str, help='OMERO server hostname')
43be74e62bfe Uploaded
ric
parents:
diff changeset
15 parser.add_argument('-U', '--user', type=str, help='OMERO user')
43be74e62bfe Uploaded
ric
parents:
diff changeset
16 parser.add_argument('-P', '--passwd', type=str, help='OMERO password')
43be74e62bfe Uploaded
ric
parents:
diff changeset
17 parser.add_argument('--in_file', type=str, help='input file',
43be74e62bfe Uploaded
ric
parents:
diff changeset
18 required=True)
43be74e62bfe Uploaded
ric
parents:
diff changeset
19 parser.add_argument('--out_file', type=str, help='output file',
43be74e62bfe Uploaded
ric
parents:
diff changeset
20 required=True)
43be74e62bfe Uploaded
ric
parents:
diff changeset
21 parser.add_argument('--well_column', type=str, help='label of the column that will be mapped',
43be74e62bfe Uploaded
ric
parents:
diff changeset
22 default='source')
43be74e62bfe Uploaded
ric
parents:
diff changeset
23 return parser
43be74e62bfe Uploaded
ric
parents:
diff changeset
24
43be74e62bfe Uploaded
ric
parents:
diff changeset
25
43be74e62bfe Uploaded
ric
parents:
diff changeset
26 def get_wells_map(plate, kb, logger):
43be74e62bfe Uploaded
ric
parents:
diff changeset
27 logger.info('Mapping wells for plate %s', plate.label)
43be74e62bfe Uploaded
ric
parents:
diff changeset
28 wells_map = {}
43be74e62bfe Uploaded
ric
parents:
diff changeset
29 for w in kb.get_wells_by_plate(plate):
43be74e62bfe Uploaded
ric
parents:
diff changeset
30 wells_map[w.label] = w
43be74e62bfe Uploaded
ric
parents:
diff changeset
31 logger.info('Mapped %d wells', len(wells_map))
43be74e62bfe Uploaded
ric
parents:
diff changeset
32 return wells_map
43be74e62bfe Uploaded
ric
parents:
diff changeset
33
43be74e62bfe Uploaded
ric
parents:
diff changeset
34
43be74e62bfe Uploaded
ric
parents:
diff changeset
35 def get_plates_map(plates_list, kb, logger):
43be74e62bfe Uploaded
ric
parents:
diff changeset
36 logger.info('Loading TiterPlates map')
43be74e62bfe Uploaded
ric
parents:
diff changeset
37 plates_map = {}
43be74e62bfe Uploaded
ric
parents:
diff changeset
38 for pl in kb.get_objects(kb.TiterPlate):
43be74e62bfe Uploaded
ric
parents:
diff changeset
39 if isinstance(pl, kb.TiterPlate) and pl.barcode in plates_list:
43be74e62bfe Uploaded
ric
parents:
diff changeset
40 plates_map[pl.barcode] = get_wells_map(pl, kb, logger)
43be74e62bfe Uploaded
ric
parents:
diff changeset
41 logger.info('Mapped %d plates', len(plates_map))
43be74e62bfe Uploaded
ric
parents:
diff changeset
42 return plates_map
43be74e62bfe Uploaded
ric
parents:
diff changeset
43
43be74e62bfe Uploaded
ric
parents:
diff changeset
44
43be74e62bfe Uploaded
ric
parents:
diff changeset
45 def get_connected_illumina_measures(well, kb, logger):
43be74e62bfe Uploaded
ric
parents:
diff changeset
46 logger.debug('Loading connected IlluminaBeadChipMeasures for well %s:%s', well.label,
43be74e62bfe Uploaded
ric
parents:
diff changeset
47 well.container.label)
43be74e62bfe Uploaded
ric
parents:
diff changeset
48 return kb.dt.get_connected(well, aklass = kb.IlluminaBeadChipMeasures,
43be74e62bfe Uploaded
ric
parents:
diff changeset
49 direction = Neo4JDriver.DIRECTION_OUTGOING)
43be74e62bfe Uploaded
ric
parents:
diff changeset
50
43be74e62bfe Uploaded
ric
parents:
diff changeset
51
43be74e62bfe Uploaded
ric
parents:
diff changeset
52 def wells_to_illumina(in_file, out_file, column_label, kb, logger):
43be74e62bfe Uploaded
ric
parents:
diff changeset
53 with open(in_file) as ifile, open(out_file, 'w') as ofile:
43be74e62bfe Uploaded
ric
parents:
diff changeset
54 reader = csv.DictReader(ifile, delimiter='\t')
43be74e62bfe Uploaded
ric
parents:
diff changeset
55 in_records = [r for r in reader]
43be74e62bfe Uploaded
ric
parents:
diff changeset
56 plates_barcodes = set([x[column_label].split(':')[0] for x in in_records])
43be74e62bfe Uploaded
ric
parents:
diff changeset
57 plates_map = get_plates_map(plates_barcodes, kb, logger)
43be74e62bfe Uploaded
ric
parents:
diff changeset
58 writer = csv.DictWriter(ofile, reader.fieldnames, delimiter='\t')
43be74e62bfe Uploaded
ric
parents:
diff changeset
59 writer.writeheader()
43be74e62bfe Uploaded
ric
parents:
diff changeset
60 logger.info('Mapping wells to illumina bead chip measures')
43be74e62bfe Uploaded
ric
parents:
diff changeset
61 for rec in in_records:
43be74e62bfe Uploaded
ric
parents:
diff changeset
62 barcode, well = rec[column_label].split(':')
43be74e62bfe Uploaded
ric
parents:
diff changeset
63 measures = get_connected_illumina_measures(plates_map[barcode][well], kb,
43be74e62bfe Uploaded
ric
parents:
diff changeset
64 logger)
43be74e62bfe Uploaded
ric
parents:
diff changeset
65 if len(measures) != 1:
43be74e62bfe Uploaded
ric
parents:
diff changeset
66 logger.warning('Found %d measures for well %s:%s, skipping line', len(measures),
43be74e62bfe Uploaded
ric
parents:
diff changeset
67 barcode, well)
43be74e62bfe Uploaded
ric
parents:
diff changeset
68 continue
43be74e62bfe Uploaded
ric
parents:
diff changeset
69 rec[column_label] = measures[0].label
43be74e62bfe Uploaded
ric
parents:
diff changeset
70 writer.writerow(rec)
43be74e62bfe Uploaded
ric
parents:
diff changeset
71
43be74e62bfe Uploaded
ric
parents:
diff changeset
72
43be74e62bfe Uploaded
ric
parents:
diff changeset
73 def main(argv):
43be74e62bfe Uploaded
ric
parents:
diff changeset
74 parser = make_parser()
43be74e62bfe Uploaded
ric
parents:
diff changeset
75 args = parser.parse_args(argv)
43be74e62bfe Uploaded
ric
parents:
diff changeset
76
43be74e62bfe Uploaded
ric
parents:
diff changeset
77 logger = get_logger('from_well_to_illumina_measures', level=args.loglevel,
43be74e62bfe Uploaded
ric
parents:
diff changeset
78 filename=args.logfile)
43be74e62bfe Uploaded
ric
parents:
diff changeset
79
43be74e62bfe Uploaded
ric
parents:
diff changeset
80 try:
43be74e62bfe Uploaded
ric
parents:
diff changeset
81 host = args.host or vlu.ome_host()
43be74e62bfe Uploaded
ric
parents:
diff changeset
82 user = args.user or vlu.ome_user()
43be74e62bfe Uploaded
ric
parents:
diff changeset
83 passwd = args.passwd or vlu.ome_passwd()
43be74e62bfe Uploaded
ric
parents:
diff changeset
84 except ValueError, ve:
43be74e62bfe Uploaded
ric
parents:
diff changeset
85 logger.critical(ve)
43be74e62bfe Uploaded
ric
parents:
diff changeset
86 sys.exit(ve)
43be74e62bfe Uploaded
ric
parents:
diff changeset
87
43be74e62bfe Uploaded
ric
parents:
diff changeset
88 kb = KB(driver='omero')(host, user, passwd)
43be74e62bfe Uploaded
ric
parents:
diff changeset
89 wells_to_illumina(args.in_file, args.out_file, args.well_column,
43be74e62bfe Uploaded
ric
parents:
diff changeset
90 kb, logger)
43be74e62bfe Uploaded
ric
parents:
diff changeset
91 logger.info('Job completed')
43be74e62bfe Uploaded
ric
parents:
diff changeset
92
43be74e62bfe Uploaded
ric
parents:
diff changeset
93
43be74e62bfe Uploaded
ric
parents:
diff changeset
94 if __name__ == '__main__':
43be74e62bfe Uploaded
ric
parents:
diff changeset
95 main(sys.argv[1:])