Пример #1
0
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
Пример #2
0
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