示例#1
0
文件: writer.py 项目: helixyte/TheLMA
 def __process_single_design_transfers(self, sector_index, sector_layout):
     stock_transfer_volume = self.iso.iso_request.stock_volume
     wl_label = LABELS.create_sector_stock_transfer_worklist_label(
                                         self.iso.label,
                                         LABELS.ROLE_SINGLE_DESIGN_STOCK,
                                         sector_index)
     wl_series = self.__make_stock_rack_worklist_series(
                                                 wl_label,
                                                 stock_transfer_volume,
                                                 sector_layout)
     tube_map = self.__get_tube_map_for_sector(sector_layout)
     sector_tube_transfers = []
     sdssr_barcodes = self.__single_stock_rack_map[sector_index]
     for design_number, sdssr_barcode in enumerate(sdssr_barcodes):
         tube_transfers = self.__build_tube_transfers(
                                                 design_number,
                                                 sdssr_barcode,
                                                 sector_layout,
                                                 tube_map)
         sector_tube_transfers.extend(tube_transfers)
         if len(sdssr_barcodes) == 1:
             # Setting the design number to None shortens worklist and
             # stock rack labels.
             design_number = None
         self.__process_stock_rack(LABELS.ROLE_SINGLE_DESIGN_STOCK,
                                   sector_index,
                                   design_number,
                                   sdssr_barcode,
                                   wl_series,
                                   sector_layout)
     return sector_tube_transfers
示例#2
0
文件: writer.py 项目: helixyte/TheLMA
 def __process_stock_rack(self, role, sector_index, design_number,
                          tube_rack_barcode, worklist_series,
                          working_rack_layout):
     label = LABELS.create_sector_stock_rack_label(
                                             self.iso.label,
                                             role,
                                             sector_index,
                                             design_number=design_number)
     tube_rack = self.__tube_rack_map[tube_rack_barcode]
     rack_layout = working_rack_layout.create_rack_layout()
     # Check if we have an existing stock rack to update, using the
     # label to find it.
     exst_isrs = [isr for isr in self.iso.iso_stock_racks
                  if isr.label == label]
     if len(exst_isrs) == 1:
         exst_isr = exst_isrs[0]
         exst_isr.worklist_series = worklist_series
         exst_isr.rack = tube_rack
         exst_isr.rack_layout = rack_layout
     elif len(exst_isrs) == 0:
         # FIXME: Using instantiation for side effects.
         IsoSectorStockRack(self.iso, sector_index, label, tube_rack,
                            rack_layout, worklist_series)
     else:
         self.add_error('More than one stock rack have the same '
                        'label (%s).' % exst_isrs[0].label)
示例#3
0
 def __process_pool_transfers(self, sector_index, sector_layout):
     pp_vol = self.iso.iso_request.preparation_plate_volume \
              * VOLUME_CONVERSION_FACTOR
     # Create a worklist series for the stock transfer.
     wl_label = LABELS.create_sector_stock_transfer_worklist_label(
         self.iso.label, LABELS.ROLE_POOL_STOCK, sector_index)
     prep_transfer_volume = get_preparation_plate_transfer_volume(
                                     preparation_plate_volume=pp_vol) \
                             / VOLUME_CONVERSION_FACTOR
     wl_series = self.__make_stock_rack_worklist_series(
         wl_label, prep_transfer_volume, None)
     # Process the new pool rack.
     self.__process_stock_rack(LABELS.ROLE_POOL_STOCK, sector_index, None,
                               self.__pool_stock_rack_map[sector_index],
                               wl_series, sector_layout)
示例#4
0
 def __process_single_design_transfers(self, sector_index, sector_layout):
     stock_transfer_volume = self.iso.iso_request.stock_volume
     wl_label = LABELS.create_sector_stock_transfer_worklist_label(
         self.iso.label, LABELS.ROLE_SINGLE_DESIGN_STOCK, sector_index)
     wl_series = self.__make_stock_rack_worklist_series(
         wl_label, stock_transfer_volume, sector_layout)
     tube_map = self.__get_tube_map_for_sector(sector_layout)
     sector_tube_transfers = []
     sdssr_barcodes = self.__single_stock_rack_map[sector_index]
     for design_number, sdssr_barcode in enumerate(sdssr_barcodes):
         tube_transfers = self.__build_tube_transfers(
             design_number, sdssr_barcode, sector_layout, tube_map)
         sector_tube_transfers.extend(tube_transfers)
         if len(sdssr_barcodes) == 1:
             # Setting the design number to None shortens worklist and
             # stock rack labels.
             design_number = None
         self.__process_stock_rack(LABELS.ROLE_SINGLE_DESIGN_STOCK,
                                   sector_index, design_number,
                                   sdssr_barcode, wl_series, sector_layout)
     return sector_tube_transfers
示例#5
0
 def __build_stock_rack_maps(self):
     for isr in self.iso.iso_sector_stock_racks:
         label_values = LABELS.parse_sector_stock_rack_label(isr.label)
         rack_role = label_values[LABELS.MARKER_RACK_ROLE]
         sector_index = label_values[LABELS.MARKER_SECTOR_INDEX]
         if rack_role == LABELS.ROLE_POOL_STOCK:
             if self.__pool_stock_rack_map is None:
                 self.__pool_stock_rack_map = {}
             self.__pool_stock_rack_map[sector_index] = isr
         elif rack_role == LABELS.ROLE_SINGLE_DESIGN_STOCK:
             # The rack number encodes the single design number.
             rn = label_values.get(LABELS.MARKER_RACK_NUM)
             if not rn is None:
                 sdss_racks = \
                         self.__single_stock_rack_map.get(sector_index)
                 if sdss_racks is None:
                     sdss_racks = \
                         [None] * self.iso.iso_request.number_designs
                     self.__single_stock_rack_map[sector_index] = \
                                                             sdss_racks
                 sdss_racks[rn - 1] = isr
             else:
                 self.__single_stock_rack_map[sector_index] = [isr]
         else:
             msg = 'Invalid rack role "%s".' % rack_role
             self.add_error(msg)
     # Sanity checks.
     if not self.__pool_stock_rack_map is None \
        and not sorted(self.__pool_stock_rack_map.keys()) \
             == sorted(self.__single_stock_rack_map.keys()):
         msg = 'Not all pool stock racks have single design stock ' \
               'racks or vice versa!'
         self.add_error(msg)
     if not set([len(val)
                 for val in self.__single_stock_rack_map.values()]) \
          == set([self.iso.iso_request.number_designs]):
         msg = 'The number of single design stock racks needs to be ' \
               'the same in all sectors.'
         self.add_error(msg)
示例#6
0
 def __build_stock_rack_maps(self):
     for isr in self.iso.iso_sector_stock_racks:
         label_values = LABELS.parse_sector_stock_rack_label(isr.label)
         rack_role = label_values[LABELS.MARKER_RACK_ROLE]
         sector_index = label_values[LABELS.MARKER_SECTOR_INDEX]
         if rack_role == LABELS.ROLE_POOL_STOCK:
             if self.__pool_stock_rack_map is None:
                 self.__pool_stock_rack_map = {}
             self.__pool_stock_rack_map[sector_index] = isr
         elif rack_role == LABELS.ROLE_SINGLE_DESIGN_STOCK:
             # The rack number encodes the single design number.
             rn = label_values.get(LABELS.MARKER_RACK_NUM)
             if not rn is None:
                 sdss_racks = \
                         self.__single_stock_rack_map.get(sector_index)
                 if sdss_racks is None:
                     sdss_racks = \
                         [None] * self.iso.iso_request.number_designs
                     self.__single_stock_rack_map[sector_index] = \
                                                             sdss_racks
                 sdss_racks[rn - 1] = isr
             else:
                 self.__single_stock_rack_map[sector_index] = [isr]
         else:
             msg = 'Invalid rack role "%s".' % rack_role
             self.add_error(msg)
     # Sanity checks.
     if not self.__pool_stock_rack_map is None \
        and not sorted(self.__pool_stock_rack_map.keys()) \
             == sorted(self.__single_stock_rack_map.keys()):
         msg = 'Not all pool stock racks have single design stock ' \
               'racks or vice versa!'
         self.add_error(msg)
     if not set([len(val)
                 for val in self.__single_stock_rack_map.values()]) \
          == set([self.iso.iso_request.number_designs]):
         msg = 'The number of single design stock racks needs to be ' \
               'the same in all sectors.'
         self.add_error(msg)
示例#7
0
文件: writer.py 项目: helixyte/TheLMA
 def __process_pool_transfers(self, sector_index, sector_layout):
     pp_vol = self.iso.iso_request.preparation_plate_volume \
              * VOLUME_CONVERSION_FACTOR
     # Create a worklist series for the stock transfer.
     wl_label = LABELS.create_sector_stock_transfer_worklist_label(
                                                 self.iso.label,
                                                 LABELS.ROLE_POOL_STOCK,
                                                 sector_index)
     prep_transfer_volume = get_preparation_plate_transfer_volume(
                                     preparation_plate_volume=pp_vol) \
                             / VOLUME_CONVERSION_FACTOR
     wl_series = self.__make_stock_rack_worklist_series(
                                                 wl_label,
                                                 prep_transfer_volume,
                                                 None)
     # Process the new pool rack.
     self.__process_stock_rack(
                     LABELS.ROLE_POOL_STOCK,
                     sector_index,
                     None,
                     self.__pool_stock_rack_map[sector_index],
                     wl_series,
                     sector_layout)
示例#8
0
 def __process_stock_rack(self, role, sector_index, design_number,
                          tube_rack_barcode, worklist_series,
                          working_rack_layout):
     label = LABELS.create_sector_stock_rack_label(
         self.iso.label, role, sector_index, design_number=design_number)
     tube_rack = self.__tube_rack_map[tube_rack_barcode]
     rack_layout = working_rack_layout.create_rack_layout()
     # Check if we have an existing stock rack to update, using the
     # label to find it.
     exst_isrs = [
         isr for isr in self.iso.iso_stock_racks if isr.label == label
     ]
     if len(exst_isrs) == 1:
         exst_isr = exst_isrs[0]
         exst_isr.worklist_series = worklist_series
         exst_isr.rack = tube_rack
         exst_isr.rack_layout = rack_layout
     elif len(exst_isrs) == 0:
         # FIXME: Using instantiation for side effects.
         IsoSectorStockRack(self.iso, sector_index, label, tube_rack,
                            rack_layout, worklist_series)
     else:
         self.add_error('More than one stock rack have the same '
                        'label (%s).' % exst_isrs[0].label)