def tst_02(): # Test for remove_clashes import mmtbx.model from mmtbx.clashes import remove_clashes import iotbx.pdb import sys pdb_inp = iotbx.pdb.input(lines=pdb_poor.splitlines(), source_info='None') model = mmtbx.model.manager(model_input=pdb_inp, ) model.set_log(log=null_out()) print "\n", "-" * 79 print " Summary of input model statistics " print "-" * 79 model.get_restraints_manager() geometry = model.geometry_statistics() geometry.show(log=sys.stdout) rc = remove_clashes(model=model) print "\n", "-" * 79 print "Starting residues: %d " % ( rc.model.get_hierarchy().overall_counts().n_residues) print "Side-chains removed: %d Residues removed: %d" % ( rc.side_chains_removed, rc.residues_removed) print "Final residues: %d " % ( rc.new_model.get_hierarchy().overall_counts().n_residues) rc.new_model.set_log(log=null_out()) rc.new_model.get_restraints_manager() new_geometry = rc.new_model.geometry_statistics() new_geometry.show(log=sys.stdout) assert rc.side_chains_removed == 1 assert rc.residues_removed == 0
def show_geo(fn, prefix): pdb_inp = iotbx.pdb.input(file_name=fn) model = mmtbx.model.manager(model_input=pdb_inp, build_grm=True, log=null_out()) mes = "%s %s" % (prefix, model.geometry_statistics( use_hydrogens=False).show_short()) return model, mes
def run(args): assert len(args) == 1 # Read file into pdb_input class inp = iotbx.pdb.input(file_name=args[0]) # create a model manager # Catch Sorry about MTRIX here. model = mmtbx.model.manager( model_input=inp, restraint_objects= None, # these are ligands if any [('fname', cif_object), ()] log=null_out(), ) print("=" * 80) print("number of atoms with MTRIX multiplication:", model.get_number_of_atoms()) show_ss_counts(model) # Expand with BIOMT if needed. MTRIX are already expanded by default # Catch case when both MTRIX and BIOMT present, or other Sorry raised by # BIOMT handling. # LIMITATION: this should be done before any selections made on model.manager double_counter = 0 try: model.expand_with_BIOMT_records() except Sorry as e: if str(e).startswith("Model has been already expanded"): double_counter += 1 print("=" * 80) print("number of atoms with BIOMT multiplication:", model.get_number_of_atoms()) show_ss_counts(model) # Get default params pdb_int_params = mmtbx.model.manager.get_default_pdb_interpretation_params( ) # Set whatever you want pdb_int_params.pdb_interpretation.secondary_structure.protein.enabled = True pdb_int_params.pdb_interpretation.ncs_search.enabled = True pdb_int_params.pdb_interpretation.ncs_search.residue_match_radius = 999 pdb_int_params.pdb_interpretation.clash_guard.nonbonded_distance_threshold = None #pdb_int_params.pdb_interpretation.nonbonded_weight = None # set the params. Note, that GRM would be dropped, even if it was already # constructed. In this example it is not yet constructed. model.set_pdb_interpretation_params(params=pdb_int_params) grm = model.get_restraints_manager() # Not clear which one should be used at the moment gs = model.geometry_statistics() gs.show() # The second way msi = model.get_model_statistics_info() msi.show_remark_3()
def get_statistics(self, model): # should we shift here? No # should we multiply NCS here? No geometry = model.geometry_statistics().result() motifs = phi_psi_2.get_results(model=model, log=null_out())['counts'] mcounts = motifs.get_counts() res = {} for key, value in mcounts.iteritems(): res[key] = value.percent geometry.merge(group_args(**res)) return geometry
def get_statistics(self, model): # should we shift here? No # should we multiply NCS here? No geometry = model.geometry_statistics().result() motifs = phi_psi_2.results_manager(model=model, log=null_out()).get_motif_count() mcounts = motifs.get_counts() res = {} # TODO is mcounts a dict ? If not consider changing back for key, value in six.iteritems(mcounts): res[key] = value.percent geometry.merge(group_args(**res)) return geometry
def run(): rmsd_dirs = ["0.3/", "0.6/", "0.9/", "1.2/", "1.5/"] base_names = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] ref = get_reference() tmp_cntr1 = 0 print "Hbond analysis" print "model min max mean recovered bond_rmsd rama_favored clashscore" for sub_root in [ "./perturbed/", "./cctbx_opt/", "./xtb_opt_stpmax_0.3/", "./xtb_opt_stpmax_0.4/", "./xtb_opt_stpmax_0.5/", "./terachem_opt_final/" ]: print sub_root for rmsd_dir in rmsd_dirs: h_bonds = flex.double() rmsd_bonds = flex.double() rama_fav = flex.double() clashscore = flex.double() cntr = 0 for fn in base_names: file_name = sub_root + rmsd_dir + fn + ".pdb" if (not os.path.exists(file_name)): assert 0, file_name model = get_model(file_name) assert ref.h.is_similar_hierarchy(model.get_hierarchy()) g = model.geometry_statistics(use_hydrogens=False).result() rmsd_bonds.append(g.bond.mean) rama_fav.append(g.ramachandran.favored) clashscore.append(g.clash.score) #print g.bond.mean, g.clash.score, g.rotamer.outliers, g.c_beta.outliers, \ # g.ramachandran.outliers, g.ramachandran.allowed, g.ramachandran.favored sites_cart = model.get_sites_cart() if (sub_root.count("perturbed") > 0): tmp_cntr1 += 1 assert approx_equal( float(rmsd_dir.replace("/", "")), flex.mean( flex.sqrt((ref.sites_cart - sites_cart).dot())), 0.01) for pair in ref.h_bonds_i_seqs: d = dist(sites_cart[pair[0]], sites_cart[pair[1]]) h_bonds.append(d) cntr += 1 assert cntr == 10, cntr sel = h_bonds < 2.3 sel &= h_bonds > 1.6 if (h_bonds.size() > 0): print rmsd_dir, "%8.3f %8.3f %8.3f"%h_bonds.min_max_mean().as_tuple(), \ " %7.2f"%(sel.count(True)*100./(len(ref.h_bonds_i_seqs)*cntr)),\ " %6.4f %7.2f %4.2f"%(flex.mean(rmsd_bonds), flex.mean(rama_fav), flex.mean(clashscore)) else: print rmsd_dir, "N/A" # assert tmp_cntr1 == 50, tmp_cntr1
def exercise_2(): inp = iotbx.pdb.input(lines=pdb_str_1, source_info=None) model = mmtbx.model.manager( model_input = inp) model.setup_scattering_dictionaries(scattering_table="wk1995") g_stat = model.geometry_statistics()
def run( pdb_filename, model_completion=True, keep_alt_loc=False, skip_validation=False, calculate_charge=False, append_to_end_of_model=False, neutron_option=None, hydrogen_atom_occupancies=0., ): # # do all *.pdb in a directory # if os.path.isdir(pdb_filename): loop_over_dir(pdb_filename) return # # fetch a PDB code # if pdb_filename.find(".pdb") == -1: if not os.path.exists('%s.pdb' % pdb_filename): run_fetch_pdb(pdb_filename) pdb_filename = '%s.pdb' % pdb_filename if 1: # read file option ppf = hierarchy_utils.get_processed_pdb(pdb_filename=pdb_filename) elif 0: # raw records example pdb_inp = iotbx.pdb.input(pdb_filename) hierarchy = pdb_inp.construct_hierarchy() raw_records = [] for atom in hierarchy.atoms(): raw_records.append(atom.format_atom_record()) ppf = hierarchy_utils.get_processed_pdb(raw_records=raw_records) else: # from hierarchy pdb_inp = iotbx.pdb.input(pdb_filename) hierarchy = pdb_inp.construct_hierarchy() ppf = hierarchy_utils.get_processed_pdb( pdb_inp=hierarchy.as_pdb_input()) if not skip_validation: model = mmtbx.model.manager( model_input=None, crystal_symmetry=ppf.all_chain_proxies.pdb_inp.crystal_symmetry(), pdb_hierarchy=ppf.all_chain_proxies.pdb_hierarchy) initial_model_statistics = model.geometry_statistics() # should use cctbx if keep_alt_loc: pass else: hierarchy = remove_alternative_locations( ppf.all_chain_proxies.pdb_hierarchy) ppf.all_chain_proxies.pdb_hierarchy.shift_to_origin( ppf.all_chain_proxies.pdb_inp.crystal_symmetry()) ppf.all_chain_proxies.pdb_hierarchy.remove_residue_groups_with_atoms_on_special_positions_selective( ppf.all_chain_proxies.pdb_inp.crystal_symmetry()) if 0: output = hierarchy_utils.write_hierarchy( pdb_filename, # uses to get output filename ppf.all_chain_proxies.pdb_inp, ppf.all_chain_proxies.pdb_hierarchy, "temp0") ppf = hierarchy_utils.get_processed_pdb(pdb_filename=output) else: raw_records = hierarchy_utils.get_raw_records( ppf.all_chain_proxies.pdb_inp, ppf.all_chain_proxies.pdb_hierarchy, ) ppf = hierarchy_utils.get_processed_pdb(raw_records=raw_records) hetero_charges = charges.get_hetero_charges( ppf.all_chain_proxies.pdb_inp, ppf.all_chain_proxies.pdb_hierarchy, ) if not hetero_charges: # some defaults hetero_charges = charges.default_ion_charges inter_residue_bonds = charges.get_inter_residue_bonds(ppf) # # extends side chains and add hydrogens # if model_completion: use_capping_hydrogens = False fname = 'complete' else: use_capping_hydrogens = True fname = 'capping' #assert 0 # model has H ppf = completion.complete_pdb_hierarchy( ppf.all_chain_proxies.pdb_hierarchy, ppf.geometry_restraints_manager(), pdb_filename=pdb_filename, pdb_inp=ppf.all_chain_proxies.pdb_inp, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if calculate_charge: new_pdb_filename = hierarchy_utils.write_hierarchy( pdb_filename, # uses to get output filename ppf.all_chain_proxies.pdb_inp, ppf.all_chain_proxies.pdb_hierarchy, fname) ## need now inter_residue_bonds because of added hydrogens ## maybe update the bond table!!! ppf = hierarchy_utils.get_processed_pdb(pdb_filename=new_pdb_filename) inter_residue_bonds = charges.get_inter_residue_bonds(ppf, verbose=True) total_charge = charges.calculate_pdb_hierarchy_charge( ppf.all_chain_proxies.pdb_hierarchy, hetero_charges=hetero_charges, inter_residue_bonds=inter_residue_bonds, ) print("total_charge", total_charge) # Idealize H as riding params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.use_neutron_distances = True params.pdb_interpretation.restraints_library.cdl = False h = ppf.all_chain_proxies.pdb_hierarchy asc = h.atom_selection_cache() sel = asc.selection("element H or element D") model = mmtbx.model.manager( model_input=None, pdb_hierarchy=ppf.all_chain_proxies.pdb_hierarchy, crystal_symmetry=ppf.all_chain_proxies.pdb_inp.crystal_symmetry(), log=null_out()) model.process(make_restraints=True, grm_normalization=True, pdb_interpretation_params=params) model.idealize_h_riding() if neutron_option == 'all_d': from mmtbx.ligands.ready_set_utils import perdeuterate_model_ligands perdeuterate_model_ligands(ppf.all_chain_proxies.pdb_hierarchy) model.set_occupancies(hydrogen_atom_occupancies, selection=sel) ## after no error getting total charge, write the completed pdb file hierarchy_utils.write_hierarchy( pdb_filename, # uses to get output filename ppf.all_chain_proxies.pdb_inp, model.get_hierarchy(), fname) if not skip_validation: final_model_statistics = model.geometry_statistics()
def get_statistics(self, model): # should we shift here? No # should we multiply NCS here? No return model.geometry_statistics().result()