def benchmark_structure(pdb_in, mon_lib_srv, ener_lib, verbose=False, w=1.0): log = StringIO() params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.peptide_link.ramachandran_restraints = True params.pdb_interpretation.ramachandran_plot_restraints.inject_emsley8k_into_oldfield_favored = False model = mmtbx.model.manager(model_input=pdb_in, pdb_interpretation_params=params, log=null_out(), build_grm=True) grm = model.get_restraints_manager().geometry pdb_hierarchy = model.get_hierarchy() r0 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) atoms = pdb_hierarchy.atoms() sites_cart_1 = atoms.extract_xyz().deep_copy() sites_cart_2 = sites_cart_1.deep_copy() assert (grm is not None) e = grm.energies_sites(sites_cart=sites_cart_1) b0 = e.bond_deviations()[-1] a0 = e.angle_deviations()[-1] flags = cctbx.geometry_restraints.flags.flags(default=True) lbfgs = geometry_minimization.lbfgs( sites_cart=sites_cart_1, correct_special_position_tolerance=1.0, geometry_restraints_manager=grm, geometry_restraints_flags=flags, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) a1 = lbfgs.rmsd_angles b1 = lbfgs.rmsd_bonds atoms.set_xyz(sites_cart_1) r1 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) rama_params = ramachandran.master_phil.fetch().extract( ).ramachandran_plot_restraints rama_manager = ramachandran.ramachandran_manager(pdb_hierarchy, rama_params, log) grm.set_ramachandran_restraints(rama_manager) lbfgs = geometry_minimization.lbfgs( sites_cart=sites_cart_2, correct_special_position_tolerance=1.0, geometry_restraints_manager=grm, geometry_restraints_flags=flags, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) a2 = lbfgs.rmsd_angles b2 = lbfgs.rmsd_bonds atoms.set_xyz(sites_cart_2) r2 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) return group_args(a0=a0, a1=a1, a2=a2, b0=b0, b1=b1, b2=b2, r0=r0, r1=r1, r2=r2)
def benchmark_structure (pdb_in, mon_lib_srv, ener_lib, verbose=False, w=1.0) : params = pdb_interpretation.master_params.extract() processed_pdb_file = pdb_interpretation.process( mon_lib_srv=mon_lib_srv, ener_lib=ener_lib, params=params, pdb_inp=pdb_in, log=StringIO()) log = StringIO() pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy r0 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) atoms = pdb_hierarchy.atoms() sites_cart_1 = atoms.extract_xyz().deep_copy() sites_cart_2 = sites_cart_1.deep_copy() grm = processed_pdb_file.geometry_restraints_manager() assert (grm is not None) e = grm.energies_sites(sites_cart=sites_cart_1) b0 = e.bond_deviations()[-1] a0 = e.angle_deviations()[-1] flags = cctbx.geometry_restraints.flags.flags(default=True) lbfgs = geometry_minimization.lbfgs( sites_cart=sites_cart_1, correct_special_position_tolerance=1.0, geometry_restraints_manager=grm, geometry_restraints_flags=flags, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) a1 = lbfgs.rmsd_angles b1 = lbfgs.rmsd_bonds atoms.set_xyz(sites_cart_1) r1 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) rama_params = ramachandran.master_phil.fetch().extract() rama_manager = ramachandran.ramachandran_manager( pdb_hierarchy, None, rama_params, log) grm.set_ramachandran_restraints(rama_manager) lbfgs = geometry_minimization.lbfgs( sites_cart=sites_cart_2, correct_special_position_tolerance=1.0, geometry_restraints_manager=grm, geometry_restraints_flags=flags, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) a2 = lbfgs.rmsd_angles b2 = lbfgs.rmsd_bonds atoms.set_xyz(sites_cart_2) r2 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) return group_args( a0=a0, a1=a1, a2=a2, b0=b0, b1=b1, b2=b2, r0=r0, r1=r1, r2=r2)
def benchmark_structure(pdb_in, mon_lib_srv, ener_lib, verbose=False, w=1.0): params = pdb_interpretation.master_params.extract() processed_pdb_file = pdb_interpretation.process(mon_lib_srv=mon_lib_srv, ener_lib=ener_lib, params=params, pdb_inp=pdb_in, log=StringIO()) log = StringIO() pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy r0 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) atoms = pdb_hierarchy.atoms() sites_cart_1 = atoms.extract_xyz().deep_copy() sites_cart_2 = sites_cart_1.deep_copy() grm = processed_pdb_file.geometry_restraints_manager() assert (grm is not None) e = grm.energies_sites(sites_cart=sites_cart_1) b0 = e.bond_deviations()[-1] a0 = e.angle_deviations()[-1] flags = cctbx.geometry_restraints.flags.flags(default=True) lbfgs = geometry_minimization.lbfgs( sites_cart=sites_cart_1, correct_special_position_tolerance=1.0, geometry_restraints_manager=grm, geometry_restraints_flags=flags, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) a1 = lbfgs.rmsd_angles b1 = lbfgs.rmsd_bonds atoms.set_xyz(sites_cart_1) r1 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) rama_params = ramachandran.master_phil.fetch().extract() rama_manager = ramachandran.ramachandran_manager(pdb_hierarchy, None, rama_params, log) grm.set_ramachandran_restraints(rama_manager) lbfgs = geometry_minimization.lbfgs( sites_cart=sites_cart_2, correct_special_position_tolerance=1.0, geometry_restraints_manager=grm, geometry_restraints_flags=flags, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) a2 = lbfgs.rmsd_angles b2 = lbfgs.rmsd_bonds atoms.set_xyz(sites_cart_2) r2 = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False) return group_args(a0=a0, a1=a1, a2=a2, b0=b0, b1=b1, b2=b2, r0=r0, r1=r1, r2=r2)
def run(self, random_seed): tmp = self.xray_structure.deep_copy_scatterers() # Shake and minimize to get variable starting points tmp.shake_sites_in_place(rms_difference=None, mean_distance=5) sites_cart_ = tmp.sites_cart() minimized = geometry_minimization.lbfgs( sites_cart=sites_cart_, correct_special_position_tolerance=1.0, geometry_restraints_manager=self.restraints_manager.geometry, geometry_restraints_flags=self.grf, lbfgs_exception_handling_params=self. lbfgs_exception_handling_params, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=50)) tmp = tmp.replace_sites_cart(new_sites=sites_cart_) # random.seed(random_seed) flex.set_random_seed(random_seed) sa.run(params=self.params, xray_structure=tmp, real_space=True, target_map=self.map_data, restraints_manager=self.restraints_manager, wx=self.weight, wc=1., verbose=False) return tmp
def run(self, random_seed): tmp = self.xray_structure.deep_copy_scatterers() # Shake and minimize to get variable starting points tmp.shake_sites_in_place( rms_difference = None, mean_distance = 5) sites_cart_ = tmp.sites_cart() minimized = geometry_minimization.lbfgs( sites_cart = sites_cart_, correct_special_position_tolerance= 1.0, geometry_restraints_manager = self.restraints_manager.geometry, geometry_restraints_flags = self.grf, lbfgs_exception_handling_params = self.lbfgs_exception_handling_params, lbfgs_termination_params = scitbx.lbfgs.termination_parameters( max_iterations=50)) tmp = tmp.replace_sites_cart(new_sites = sites_cart_) # random.seed(random_seed) flex.set_random_seed(random_seed) sa.run( params = self.params, xray_structure = tmp, real_space = True, target_map = self.map_data, restraints_manager = self.restraints_manager, wx = self.weight, wc = 1., verbose = False) return tmp
def geometry_minimization(self, selection=None, bond=True, nonbonded=True, angle=True, dihedral=True, chirality=True, planarity=True, max_number_of_iterations=500, number_of_macro_cycles=5, rmsd_bonds_termination_cutoff=0, rmsd_angles_termination_cutoff=0): """ Perform geometry minimization on a selection of boxed atoms. """ from mmtbx.refinement import geometry_minimization from cctbx import geometry_restraints from scitbx.array_family import flex import scitbx.lbfgs if (selection is None): selection = self.selection_in_box if (type(selection).__name__ == 'size_t'): selection = flex.bool(self.n_sites_box, False).set_selected(selection, True) lbfgs_termination_params = scitbx.lbfgs.termination_parameters( max_iterations=max_number_of_iterations) geometry_restraints_flags = geometry_restraints.flags.flags( bond=bond, nonbonded=nonbonded, angle=angle, dihedral=dihedral, chirality=chirality, planarity=planarity) site_labels = self.box.xray_structure_box.scatterers().extract_labels() for i in range(number_of_macro_cycles): sites_cart = self.box.xray_structure_box.sites_cart() exception_handling_params = scitbx.lbfgs.exception_handling_parameters( ignore_line_search_failed_step_at_lower_bound=True) minimized = geometry_minimization.lbfgs( sites_cart=sites_cart, correct_special_position_tolerance=1.0, geometry_restraints_manager=self.geo_box, geometry_restraints_flags=geometry_restraints_flags, lbfgs_termination_params=lbfgs_termination_params, lbfgs_exception_handling_params=exception_handling_params, sites_cart_selection=selection, rmsd_bonds_termination_cutoff=rmsd_bonds_termination_cutoff, rmsd_angles_termination_cutoff=rmsd_angles_termination_cutoff, site_labels=site_labels) self.update_coordinates(sites_cart)
def geometry_minimization (self, selection=None, bond=True, nonbonded=True, angle=True, dihedral=True, chirality=True, planarity=True, max_number_of_iterations=500, number_of_macro_cycles=5, rmsd_bonds_termination_cutoff = 0, rmsd_angles_termination_cutoff = 0) : """ Perform geometry minimization on a selection of boxed atoms. """ from mmtbx.refinement import geometry_minimization from cctbx import geometry_restraints from scitbx.array_family import flex import scitbx.lbfgs if (selection is None) : selection = self.selection_in_box if (type(selection).__name__ == 'size_t') : selection = flex.bool(self.n_sites_box, False).set_selected(selection, True) lbfgs_termination_params = scitbx.lbfgs.termination_parameters( max_iterations = max_number_of_iterations) geometry_restraints_flags = geometry_restraints.flags.flags( bond = bond, nonbonded = nonbonded, angle = angle, dihedral = dihedral, chirality = chirality, planarity = planarity) site_labels = self.box.xray_structure_box.scatterers().extract_labels() for i in xrange(number_of_macro_cycles): sites_cart = self.box.xray_structure_box.sites_cart() exception_handling_params = scitbx.lbfgs.exception_handling_parameters( ignore_line_search_failed_step_at_lower_bound = True) minimized = geometry_minimization.lbfgs( sites_cart = sites_cart, correct_special_position_tolerance = 1.0, geometry_restraints_manager = self.geo_box, geometry_restraints_flags = geometry_restraints_flags, lbfgs_termination_params = lbfgs_termination_params, lbfgs_exception_handling_params = exception_handling_params, sites_cart_selection = selection, rmsd_bonds_termination_cutoff = rmsd_bonds_termination_cutoff, rmsd_angles_termination_cutoff = rmsd_angles_termination_cutoff, site_labels=site_labels) self.update_coordinates(sites_cart)
def regularize_geometry(xray_structure, restraints_manager, params): from mmtbx.refinement import geometry_minimization as gm import scitbx.lbfgs sites_cart = xray_structure.sites_cart() minimized = gm.lbfgs( sites_cart = sites_cart, correct_special_position_tolerance = 1.0, geometry_restraints_manager = restraints_manager.geometry, geometry_restraints_flags = gm.geometry_restraints.flags.flags(default=True), rmsd_bonds_termination_cutoff=params.rmsd_bonds_target, rmsd_angles_termination_cutoff=params.rmsd_angles_target, lbfgs_termination_params=scitbx.lbfgs.termination_parameters( max_iterations=500)) xray_structure = xray_structure.replace_sites_cart(new_sites = sites_cart) return xray_structure
def adiabatic_mapping (pdb_hierarchy, restraints_manager, start_coords, end_coords, params, nsteps=10, verbose=False, out=None) : """ Linear interpolation with energy minimization. The number of minimizer cycles should be kept low to prevent each "frame" from snapping back to the starting coordinates. Interpolating the dihedral restraint target angles may help remediate this problem. """ from mmtbx.refinement import geometry_minimization from cctbx import geometry_restraints import scitbx.lbfgs if (start_coords.size() != end_coords.size()) : raise RuntimeError("Coordinate size mismatch: %d versus %d" % (start_coords.size(), end_coords.size())) grm = restraints_manager include_dihedrals = (params.interpolate_dihedrals or (not params.exclude_dihedrals)) grm_flags = geometry_restraints.flags.flags( default=True, dihedral=include_dihedrals) term_params = scitbx.lbfgs.termination_parameters( max_iterations=params.n_min_steps) dihedral_steps = [] n = nsteps - 1 if (params.interpolate_dihedrals) : # FIXME this needs work - should find the optimal path instead of the # simplistic assumption currently made for proxy in grm.dihedral_proxies : sites1 = [] sites2 = [] for k in range(4) : sites1.append(start_coords[proxy.i_seqs[k]]) sites2.append(end_coords[proxy.i_seqs[k]]) dihe_start = geometry_restraints.dihedral( sites=sites1, angle_ideal=0, weight=1).angle_model dihe_end = geometry_restraints.dihedral( sites=sites2, angle_ideal=0, weight=1).angle_model delta = (dihe_end - dihe_start) / n dihedral_steps.append(delta) proxy.weight = 0.1 m = morph(pdb_hierarchy) m.add_frame(start_coords) current_xyz = start_coords final_xyz = end_coords while n > 0 : print >> out, "Interpolation step %d" % (nsteps - n) if (verbose) : print >> out, "" new_xyz = current_xyz.deep_copy() dxyz = (final_xyz - new_xyz) * (1. / n) new_xyz += dxyz if (params.minimize) : if (params.interpolate_dihedrals) : for k, proxy in enumerate(grm.dihedral_proxies) : proxy.angle_ideal += dihedral_steps[k] minimized = geometry_minimization.lbfgs( sites_cart=new_xyz, geometry_restraints_manager=grm, geometry_restraints_flags=grm_flags, lbfgs_termination_params=term_params) if (verbose) : n_iter = minimized.minimizer.iter() print >> out, "" print >> out, "Number of minimization iterations:", n_iter print >> out, "" print >> out, "Energies at end of minimization:" minimized.final_target_result.show(f=out) print >> out, "RMS coordinate change: %.3f" % current_xyz.rms_difference(new_xyz) m.add_frame(new_xyz) n -= 1 current_xyz = new_xyz m.add_frame(final_xyz) return m