Exemplo n.º 1
0
 def _store_final_plate_data(self, iso):
     """
     Helper function creating and storing a rack container of all final
     plates of an ISO. The rack markers for aliquot and library plates
     need to be distinguished.
     """
     # FIXME: Hack around not having proper "final" plates attached to
     #        the ISO.
     library_plates = set([lp.rack for lp in iso.library_plates])
     for fp in iso.iso_aliquot_plates:
         self.__final_plate_count += 1
         if not fp.rack in library_plates:
             self._store_rack_container(fp.rack, role=LABELS.ROLE_FINAL)
         else:
             rack_marker = LABELS.ROLE_FINAL
     counter = 0
     one_aliquot = (self._iso_request.number_aliquots == 1)
     for fp in iso.library_plates:
         counter += 1
         if one_aliquot:
             rack_marker = LABELS.ROLE_FINAL
         else:
             rack_marker = LABELS.create_rack_marker(
                 LABELS.ROLE_FINAL, counter)
         self._store_rack_container(rack=fp.rack,
                                    role=LABELS.ROLE_FINAL,
                                    rack_marker=rack_marker)
Exemplo n.º 2
0
 def _store_final_plate_data(self, iso):
     """
     Helper function creating and storing a rack container of all final
     plates of an ISO. The rack markers for aliquot and library plates
     need to be distinguished.
     """
     # FIXME: Hack around not having proper "final" plates attached to
     #        the ISO.
     library_plates = set([lp.rack for lp in iso.library_plates])
     for fp in iso.iso_aliquot_plates:
         self.__final_plate_count += 1
         if not fp.rack in library_plates:
             self._store_rack_container(fp.rack, role=LABELS.ROLE_FINAL)
         else:
             rack_marker = LABELS.ROLE_FINAL
     counter = 0
     one_aliquot = (self._iso_request.number_aliquots == 1)
     for fp in iso.library_plates:
         counter += 1
         if one_aliquot:
             rack_marker = LABELS.ROLE_FINAL
         else:
             rack_marker = LABELS.create_rack_marker(LABELS.ROLE_FINAL,
                                                     counter)
         self._store_rack_container(rack=fp.rack, role=LABELS.ROLE_FINAL,
                                    rack_marker=rack_marker)
Exemplo n.º 3
0
    def _create_stock_rack_layouts(self):
        """
        Creates stock rack layout for each required rack (potential rack
        sector constraints are expected to be confirmed).
        The rack markers might not match the layout rack markers anymore
        but this does not matter, since further processing do not use the
        layout rack markers anymore.
        """
        marker_map = dict()
        for marker, rack_barcode in self._stock_rack_map.iteritems():
            marker_map[rack_barcode] = marker

        layouts = dict()

        used_rack_markers = set()
        for pool, container in self._stock_tube_containers.iteritems():
            tc = container.tube_candidate
            rack_barcode = tc.rack_barcode
            if marker_map.has_key(rack_barcode):
                rack_marker = marker_map[rack_barcode]
                if layouts.has_key(rack_barcode):
                    layout = layouts[rack_barcode]
                else:
                    layout = StockRackLayout()
                    layouts[rack_barcode] = layout
            else:
                rack_marker = container.stock_rack_marker
                if rack_marker in used_rack_markers:
                    nums = []
                    for marker in used_rack_markers:
                        value_parts = LABELS.parse_rack_marker(marker)
                        nums.append(value_parts[LABELS.MARKER_RACK_NUM])
                    new_num = max(nums) + 1
                    rack_marker = LABELS.create_rack_marker(LABELS.ROLE_STOCK,
                                                            new_num)
                marker_map[rack_barcode] = rack_marker
                layout = StockRackLayout()
                layouts[rack_barcode] = layout

            tts = []
            for plate_label, positions in container.plate_target_positions.\
                                          iteritems():
                if plate_label == LABELS.ROLE_FINAL:
                    trg_marker = plate_label
                else:
                    trg_marker = self._rack_containers[plate_label].rack_marker
                for plate_pos in positions:
                    tts.append(plate_pos.as_transfer_target(trg_marker))

            sr_pos = StockRackPosition(rack_position=tc.rack_position,
                                       molecule_design_pool=pool,
                                       tube_barcode=tc.tube_barcode,
                                       transfer_targets=tts)
            layout.add_position(sr_pos)

        for rack_barcode, marker in marker_map.iteritems():
            self._stock_rack_layouts[marker] = layouts[rack_barcode]
            if not self._stock_rack_map.has_key(marker):
                self._stock_rack_map[marker] = rack_barcode