Example #1
0
    def __set_source_values(self):
        """
        There are two sizes available: 96 positions and 384 positions. If
        possible (less than 97 distinct hash values), we use the smaller one.
        Also sets the source rack shape and minimum row distances.
        """
        self.add_debug('Determine rack shape ...')

        small_shape = get_96_rack_shape()
        large_shape = get_384_rack_shape()
        if len(self._hash_values) > large_shape.size:
            msg = 'The number of source positions (%i) exceeds %i! ' \
                  'Redesign your experiment or talk to the IT ' \
                  'department, please.' \
                  % (len(self._hash_values), large_shape.size)
            self.add_error(msg)
        elif len(self._hash_values) > small_shape.size:
            source_rack_shape = large_shape
        else:
            source_rack_shape = small_shape

        if not self.has_errors():
            self._source_layout = self._init_source_layout(source_rack_shape)
            self.__source_rack_shape = self._source_layout.shape
            if self.__source_rack_shape.name == RACK_SHAPE_NAMES.SHAPE_384:
                self.__src_min_row_distance = 1
            else:
                self.__src_min_row_distance = 0
            target_layout_shape = self._get_target_layout_shape()
            if target_layout_shape.name == RACK_SHAPE_NAMES.SHAPE_384:
                self.__trg_min_row_distance = 1
            else:
                self.__trg_min_row_distance = 0
Example #2
0
    def _initialize_parser_keys(self):
        """
        We need to set floating related parser values. Also the allowed
        layout dimension are the fixed (96-well or 384-well).
        """
        parameter_set = MoleculeDesignPoolParameters
        validator = parameter_set.create_validator_from_parameter(
                                          parameter_set.MOLECULE_DESIGN_POOL)
        self.parser.molecule_design_id_predicates = validator.aliases
        self.parser.no_id_indicator = parameter_set.FLOATING_INDICATOR

        shape96 = get_96_rack_shape()
        shape384 = get_384_rack_shape()
        self.parser.allowed_rack_dimensions = [
                    (shape96.number_rows, shape96.number_columns),
                    (shape384.number_rows, shape384.number_columns)]
Example #3
0
    def _initialize_parser_keys(self):
        """
        We need to set floating related parser values. Also the allowed
        layout dimension are the fixed (96-well or 384-well).
        """
        parameter_set = MoleculeDesignPoolParameters
        validator = parameter_set.create_validator_from_parameter(
            parameter_set.MOLECULE_DESIGN_POOL)
        self.parser.molecule_design_id_predicates = validator.aliases
        self.parser.no_id_indicator = parameter_set.FLOATING_INDICATOR

        shape96 = get_96_rack_shape()
        shape384 = get_384_rack_shape()
        self.parser.allowed_rack_dimensions = [
            (shape96.number_rows, shape96.number_columns),
            (shape384.number_rows, shape384.number_columns)
        ]
Example #4
0
    def __find_ignored_sector_positions(self, ignore_positions_384):
        """
        Converts the position in the ignored position list for the 384-well
        layout into 96-well position.

        Positions for sectors that are not required (might be the case on the
        last plate) are not checked.
        """
        for sector_index in range(NUMBER_SECTORS):
            if not self.__library_sectors.has_key(sector_index): continue
            sector_positions = get_sector_positions(sector_index=sector_index,
                            rack_shape=get_384_rack_shape(),
                            number_sectors=NUMBER_SECTORS)
            translator = RackSectorTranslator(number_sectors=NUMBER_SECTORS,
                        source_sector_index=sector_index,
                        target_sector_index=0,
                        enforce_type=RackSectorTranslator.ONE_TO_MANY)
            for sector_pos in sector_positions:
                if sector_pos in ignore_positions_384:
                    rack_pos_96 = translator.translate(sector_pos)
                    self.__ignore_positions_96[sector_index].append(rack_pos_96)
Example #5
0
    def __create_isos(self):
        """
        Creates the ISOs. At this the tool checks whether there are already
        ISOs at the ISO request. The tool add ISOs until the number of plates
        (ISO request attribute) is reached.
        """
        self.add_debug('Create ISOs ...')

        iso_count = len(self.__iso_request.isos)
        libname = self.molecule_design_library.label

        if iso_count >= self.__iso_request.number_plates:
            msg = 'The ISOs have already been created.'
            self.add_error(msg)
            return

        for i in range(iso_count, self.__iso_request.number_plates):
            layout_number = i + 1
            iso_label = self.ISO_LABEL_PATTERN % (libname, layout_number)
            ticket_creator = LibraryCreationTicketGenerator(
                                self.__iso_request.requester,
                                iso_label, layout_number, parent=self)
            ticket_number = ticket_creator.get_ticket_id()
            if ticket_number is None:
                msg = 'Error when trying to generate ISO "%s".' % (iso_label)
                self.add_error(msg)
                break
            else:
                StockSampleCreationIso(
                        iso_label,
                        ticket_number,
                        layout_number,
                        self.__iso_request.number_designs,
                        iso_request=self.__iso_request,
                        rack_layout=RackLayout(shape=get_384_rack_shape()))
                self.__new_iso_counter += 1
Example #6
0
    def __find_ignored_sector_positions(self, ignore_positions_384):
        """
        Converts the position in the ignored position list for the 384-well
        layout into 96-well position.

        Positions for sectors that are not required (might be the case on the
        last plate) are not checked.
        """
        for sector_index in range(NUMBER_SECTORS):
            if not self.__library_sectors.has_key(sector_index): continue
            sector_positions = get_sector_positions(
                sector_index=sector_index,
                rack_shape=get_384_rack_shape(),
                number_sectors=NUMBER_SECTORS)
            translator = RackSectorTranslator(
                number_sectors=NUMBER_SECTORS,
                source_sector_index=sector_index,
                target_sector_index=0,
                enforce_type=RackSectorTranslator.ONE_TO_MANY)
            for sector_pos in sector_positions:
                if sector_pos in ignore_positions_384:
                    rack_pos_96 = translator.translate(sector_pos)
                    self.__ignore_positions_96[sector_index].append(
                        rack_pos_96)