Example #1
0
    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)
Example #2
0
    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)
Example #3
0
 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)
Example #4
0
 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)