class VidMapper(object): def __init__(self, host, user, passwd, logger, study): self.logger = logger self.study = study self.kb = KB(driver="omero")(host, user, passwd) plates = self.kb.get_objects(self.kb.TiterPlate) self.logger.info("fetched %d plates" % len(plates)) self.plate_map = {} self.enroll_map = {} for p in plates: self.plate_map[p.omero_id] = p.barcode s = self.kb.get_study(self.study) enrolls = self.kb.get_enrolled(s) self.logger.info("fetched %d enrollments" % len(enrolls)) for e in enrolls: self.logger.debug('Retrieving wells for %s' % e.studyCode) wells = [ w for w in self.kb.get_vessels_by_individual( e.individual, "PlateWell") ] self.enroll_map[e.studyCode] = wells def map_vid(self, r): en_code = r["source"] pl_barcode = en_code.split("|")[1] try: wells = self.enroll_map[en_code] except KeyError: msg = "%s is not enrolled in %s" % (en_code, self.study) self.logger.error(msg) raise ValueError(msg) self.logger.info("found %d wells for %s" % (len(wells), en_code)) imm_wells = [ w for w in wells if self.plate_map[w.container.omero_id] == pl_barcode ] if len(imm_wells) > 1: msg = ("more than 1 (%d) immuno wells for plate %s" % (len(imm_wells), pl_barcode)) self.logger.error(msg) raise ValueError(msg) elif len(imm_wells) == 0: msg = "no immuno well for plate %s" % pl_barcode self.logger.warn(msg) raise ValueError(msg) else: r["source"] = imm_wells[0].id
class VidMapper(object): def __init__(self, host, user, passwd, logger, study): self.logger = logger self.study = study self.kb = KB(driver="omero")(host, user, passwd) plates = self.kb.get_objects(self.kb.TiterPlate) self.logger.info("fetched %d plates" % len(plates)) self.plate_map = {} self.enroll_map = {} for p in plates: self.plate_map[p.omero_id] = p.barcode s = self.kb.get_study(self.study) enrolls = self.kb.get_enrolled(s) self.logger.info("fetched %d enrollments" % len(enrolls)) for e in enrolls: self.logger.debug("Retrieving wells for %s" % e.studyCode) wells = [w for w in self.kb.get_vessels_by_individual(e.individual, "PlateWell")] self.enroll_map[e.studyCode] = wells def map_vid(self, r): en_code = r["source"] pl_barcode = en_code.split("|")[1] try: wells = self.enroll_map[en_code] except KeyError: msg = "%s is not enrolled in %s" % (en_code, self.study) self.logger.error(msg) raise ValueError(msg) self.logger.info("found %d wells for %s" % (len(wells), en_code)) imm_wells = [w for w in wells if self.plate_map[w.container.omero_id] == pl_barcode] if len(imm_wells) > 1: msg = "more than 1 (%d) immuno wells for plate %s" % (len(imm_wells), pl_barcode) self.logger.error(msg) raise ValueError(msg) elif len(imm_wells) == 0: msg = "no immuno well for plate %s" % pl_barcode self.logger.warn(msg) raise ValueError(msg) else: r["source"] = imm_wells[0].id