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