def _create_worklist_series(self): """ Generates all the buffer dilution worklists (as series). The worklists for the transfer from 1-molecule-design stock rack to pool stock rack are not included but stored at the ISO sample stock racks to enable quadrant tracking. """ self.add_debug('Create worklist series ...') volume_calculator = \ VolumeCalculator(self.target_volume, self.target_concentration, self.__number_designs, self.__stock_concentration) generator = StockSampleCreationWorklistGenerator( volume_calculator, self.iso_request_label, parent=self) self.__worklist_series = generator.get_result() if self.__worklist_series is None: msg = 'Error when trying to generate worklist series.' self.add_error(msg) else: self.__adj_target_volume = \ volume_calculator.get_adjusted_target_volume() if not self.__adj_target_volume is None: robot_specs = get_pipetting_specs_cybio() msg = 'The target volume you have requested needs to be ' \ 'increased slightly because of the constraints of the ' \ 'pipetting robot (%s, min. transfer volume: %s ul, ' \ 'step size: 0.1 ul). The target volume will be ' \ 'increased from %s ul to %s ul.' \ % (robot_specs.name, get_trimmed_string(robot_specs.min_transfer_volume \ * VOLUME_CONVERSION_FACTOR), get_trimmed_string(self.target_volume), get_trimmed_string(self.__adj_target_volume)) self.add_warning(msg)
def __pick_pool_candidates(self): # Runs the optimizer which finds stock tube for the single molecule # designs. The optimizer returns a list of :class:`PoolCandidate` # objects (in order of the optimizing completion). volume_calculator = \ VolumeCalculator.from_iso_request(self.iso_request) self._run_and_record_error(volume_calculator.calculate, base_msg='Unable to determine stock transfer volume: ', error_types=ValueError) if not self.has_errors(): take_out_volume = \ volume_calculator.get_single_design_stock_transfer_volume() optimizer = StockSampleCreationTubePicker( self._queued_pools, self.__single_design_stock_concentration, take_out_volume, excluded_racks=self.excluded_racks, requested_tubes=self.requested_tubes, parent=self) self._pool_candidates = optimizer.get_result() if self._pool_candidates is None: msg = 'Error when trying to pick tubes.' self.add_error(msg)
def __pick_pool_candidates(self): # Runs the optimizer which finds stock tube for the single molecule # designs. The optimizer returns a list of :class:`PoolCandidate` # objects (in order of the optimizing completion). volume_calculator = \ VolumeCalculator.from_iso_request(self.iso_request) self._run_and_record_error( volume_calculator.calculate, base_msg='Unable to determine stock transfer volume: ', error_types=ValueError) if not self.has_errors(): take_out_volume = \ volume_calculator.get_single_design_stock_transfer_volume() optimizer = StockSampleCreationTubePicker( self._queued_pools, self.__single_design_stock_concentration, take_out_volume, excluded_racks=self.excluded_racks, requested_tubes=self.requested_tubes, parent=self) self._pool_candidates = optimizer.get_result() if self._pool_candidates is None: msg = 'Error when trying to pick tubes.' self.add_error(msg)