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