def __init__(self, fmodels, constrained_groups_selections, selections, par_initial, max_number_of_iterations): adopt_init_args(self, locals()) self.fmodels.create_target_functors() self.fmodels.prepare_target_functors_for_minimization() from phenix.refinement import weight_xray_chem self.weights = weight_xray_chem.weights(wx = 1, wx_scale = 1, angle_x = None, wn = 1, wn_scale = 1, angle_n = None, w = 0, wxn = 1) # XXX self.par_min = self.par_initial.deep_copy() self.x = self.pack(self.par_min) self.n = self.x.size() self.minimizer = lbfgs.run( target_evaluator = self, termination_params = lbfgs.termination_parameters( max_iterations = max_number_of_iterations), exception_handling_params = lbfgs.exception_handling_parameters( ignore_line_search_failed_step_at_lower_bound = True, ignore_line_search_failed_step_at_upper_bound = True)) self.compute_functional_and_gradients() del self.x
def __init__(self, fmodels, restraints_manager = None, model = None, is_neutron_scat_table = None, target_weights = None, tan_b_iso_max = None, refine_xyz = False, refine_adp = False, lbfgs_termination_params = None, use_fortran = False, verbose = 0, correct_special_position_tolerance = 1.0, iso_restraints = None, h_params = None, qblib_params = None, macro_cycle = None, u_min = adptbx.b_as_u(-5.0), u_max = adptbx.b_as_u(999.99), collect_monitor = True, log = None): timer = user_plus_sys_time() adopt_init_args(self, locals()) self.f=None self.xray_structure = self.fmodels.fmodel_xray().xray_structure self.fmodels.create_target_functors() self.fmodels.prepare_target_functors_for_minimization() if(self.refine_adp and fmodels.fmodel_neutron() is None): self.xray_structure.tidy_us() self.fmodels.update_xray_structure( xray_structure = self.xray_structure, update_f_calc = True) self.weights = None # QBLIB INSERT self.qblib_params = qblib_params if(self.qblib_params is not None and self.qblib_params.qblib): self.macro = macro_cycle self.qblib_cycle_count = 0 self.tmp_XYZ = None self.XYZ_diff_curr=None # QBLIB END self.correct_special_position_tolerance = correct_special_position_tolerance if(refine_xyz and target_weights is not None): self.weights = target_weights.xyz_weights_result elif(refine_adp and target_weights is not None): self.weights = target_weights.adp_weights_result else: from phenix.refinement import weight_xray_chem self.weights = weight_xray_chem.weights(wx = 1, wx_scale = 1, angle_x = None, wn = 1, wn_scale = 1, angle_n = None, w = 0, wxn = 1) if(self.collect_monitor): self.monitor = monitor( weights = self.weights, fmodels = fmodels, model = model, iso_restraints = iso_restraints, refine_xyz = refine_xyz, refine_adp = refine_adp, refine_occ = False) if(self.collect_monitor): self.monitor.collect() self.neutron_refinement = (self.fmodels.fmodel_n is not None) self.x = flex.double(self.xray_structure.n_parameters(), 0) self._scatterers_start = self.xray_structure.scatterers() self.minimizer = scitbx.lbfgs.run( target_evaluator = self, termination_params = lbfgs_termination_params, use_fortran = use_fortran, exception_handling_params = scitbx.lbfgs.exception_handling_parameters( ignore_line_search_failed_step_at_lower_bound = True)) self.apply_shifts() del self._scatterers_start self.compute_target(compute_gradients = False,u_iso_refinable_params = None) if(self.refine_adp and self.fmodels.fmodel_neutron() is None): self.xray_structure.tidy_us() self.fmodels.update_xray_structure( xray_structure = self.xray_structure, update_f_calc = True) if(self.collect_monitor): self.monitor.collect(iter = self.minimizer.iter(), nfun = self.minimizer.nfun()) self.fmodels.create_target_functors() # QBLIB INSERT if(self.qblib_params is not None and self.qblib_params.qblib): print >>self.qblib_params.qblib_log,'{:-^80}'.format("") print >>self.qblib_params.qblib_log
def __init__(self, fmodels, restraints_manager = None, model = None, is_neutron_scat_table = None, target_weights = None, refine_xyz = False, refine_adp = False, lbfgs_termination_params = None, use_fortran = False, verbose = 0, correct_special_position_tolerance = 1.0, iso_restraints = None, h_params = None, qblib_params = None, macro_cycle = None, u_min = adptbx.b_as_u(-5.0), u_max = adptbx.b_as_u(999.99), collect_monitor = True, log = None): timer = user_plus_sys_time() adopt_init_args(self, locals()) self.f=None self.xray_structure = self.fmodels.fmodel_xray().xray_structure self.fmodels.create_target_functors() self.fmodels.prepare_target_functors_for_minimization() if(self.refine_adp and fmodels.fmodel_neutron() is None): self.xray_structure.tidy_us() self.fmodels.update_xray_structure( xray_structure = self.xray_structure, update_f_calc = True) self.weights = None # QBLIB INSERT self.qblib_params = qblib_params if(self.qblib_params is not None and self.qblib_params.qblib): self.macro = macro_cycle self.qblib_cycle_count = 0 self.tmp_XYZ = None self.XYZ_diff_curr=None # QBLIB END self.correct_special_position_tolerance = correct_special_position_tolerance if(refine_xyz and target_weights is not None): self.weights = target_weights.xyz_weights_result elif(refine_adp and target_weights is not None): self.weights = target_weights.adp_weights_result else: from phenix.refinement import weight_xray_chem self.weights = weight_xray_chem.weights(wx = 1, wx_scale = 1, angle_x = None, wn = 1, wn_scale = 1, angle_n = None, w = 0, wxn = 1) if(self.collect_monitor): self.monitor = monitor( weights = self.weights, fmodels = fmodels, model = model, iso_restraints = iso_restraints, refine_xyz = refine_xyz, refine_adp = refine_adp, refine_occ = False) if(self.collect_monitor): self.monitor.collect() self.neutron_refinement = (self.fmodels.fmodel_n is not None) self.x = flex.double(self.xray_structure.n_parameters(), 0) self.riding_h_manager = self.model.riding_h_manager self._scatterers_start = self.xray_structure.scatterers() #lbfgs_core_params = scitbx.lbfgs.core_parameters( # stpmin = 1.e-9, # stpmax = adptbx.b_as_u(10)) self.minimizer = scitbx.lbfgs.run( target_evaluator = self, termination_params = lbfgs_termination_params, use_fortran = use_fortran, # core_params = lbfgs_core_params, # gradient_only=True, exception_handling_params = scitbx.lbfgs.exception_handling_parameters( ignore_line_search_failed_step_at_lower_bound = True)) self.apply_shifts() del self._scatterers_start self.compute_target(compute_gradients = False,u_iso_refinable_params = None) if(self.refine_adp and self.fmodels.fmodel_neutron() is None): self.xray_structure.tidy_us() self.fmodels.update_xray_structure( xray_structure = self.xray_structure, update_f_calc = True) if(self.collect_monitor): self.monitor.collect(iter = self.minimizer.iter(), nfun = self.minimizer.nfun()) self.fmodels.create_target_functors() # QBLIB INSERT if(self.qblib_params is not None and self.qblib_params.qblib): print('{:-^80}'.format(""), file=self.qblib_params.qblib_log) print(file=self.qblib_params.qblib_log)