def process(self, single_image=False): """ Image processing; selects method, runs requisite modules """ #for CCTBX indexing / integration if self.params.advanced.integrate_with == 'cctbx': terminate = False prev_status = self.status prev_fail = 'first cycle' prev_final = self.final prev_epv = 9999 while not terminate: # Run grid search if haven't already if self.fail == None and self.status != 'grid search': self.integrate_cctbx('grid search', single_image=single_image) # Run selection if haven't already if self.fail == None and self.status != 'selection': self.select_cctbx() # If smart grid search is active run multiple rounds until convergence if self.params.cctbx.grid_search.type == 'smart': if self.fail == None and self.final['epv'] < prev_epv: prev_epv = self.final['epv'] prev_final = self.final prev_status = self.status prev_fail = self.fail self.hmed = self.final['sph'] self.amed = self.final['spa'] self.grid, self.final = self.generate_grid() self.final['final'] = self.fin_file if len(self.grid) == 0: self.final = prev_final self.status = prev_status self.fail = prev_fail terminate = True continue if self.verbose: log_entry = '\nNew starting point: H = {}, A = {}\n'\ ''.format(self.hmed, self.amed) self.log_info.append(log_entry) else: if prev_fail != 'first cycle': self.final = prev_final self.status = prev_status self.fail = prev_fail if self.verbose: log_entry = '\nFinal set of parameters: H = {}, A = {}'\ ''.format(self.final['sph'], self.final['spa']) self.log_info.append(log_entry) terminate = True # If brute force grid search is selected run one round else: terminate = True # Run final integration if haven't already if self.fail == None and self.status != 'final': self.integrate_cctbx('integrate', single_image=single_image) if self.verbose: log_entry = "\n".join(self.log_info) misc.main_log(self.main_log, log_entry) misc.main_log(self.main_log, '\n{:-^100}\n'.format('')) # For DIALS integration (DOES NOT YET WORK) elif self.params.advanced.integrate_with == 'dials': # Create DIALS integrator object from prime.iota.iota_dials import Integrator integrator = Integrator(self.conv_img, self.obj_base, self.gain, self.params) # Run DIALS test integrator.find_spots() integrator.index() return self