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)
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)
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