def exercise_allowed_outliers_emsley_filling(): file_name = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/3ifk.pdb", test=os.path.isfile) if (file_name is None): print("Skipping test.") return params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.ramachandran_plot_restraints.enabled = True params.pdb_interpretation.ramachandran_plot_restraints.favored = "oldfield" params.pdb_interpretation.ramachandran_plot_restraints.allowed = "emsley" params.pdb_interpretation.ramachandran_plot_restraints.outlier = None params.pdb_interpretation.ramachandran_plot_restraints.inject_emsley8k_into_oldfield_favored = False pdb_inp = iotbx.pdb.input(file_name=file_name) model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out(), build_grm=True) grm = model.get_restraints_manager().geometry assert grm.ramachandran_manager.get_n_proxies() == 167 assert grm.ramachandran_manager.get_n_oldfield_proxies() == 164 assert grm.ramachandran_manager.get_n_emsley_proxies() == 3 params.pdb_interpretation.ramachandran_plot_restraints.enabled = True params.pdb_interpretation.ramachandran_plot_restraints.favored = "oldfield" params.pdb_interpretation.ramachandran_plot_restraints.allowed = None params.pdb_interpretation.ramachandran_plot_restraints.outlier = None model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() assert nprox == 164 assert grm.ramachandran_manager.get_n_oldfield_proxies() == 164 assert grm.ramachandran_manager.get_n_emsley_proxies() == 0
def exercise_allowed_outliers_emsley_filling(): file_name = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/3ifk.pdb", test=os.path.isfile) if (file_name is None): print("Skipping test.") return params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.peptide_link.ramachandran_restraints = True params.pdb_interpretation.peptide_link.restrain_rama_outliers = False params.pdb_interpretation.peptide_link.restrain_rama_allowed = True params.pdb_interpretation.peptide_link.restrain_allowed_outliers_with_emsley=True pdb_inp = iotbx.pdb.input(file_name=file_name) model = mmtbx.model.manager( model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) grm = model.get_restraints_manager().geometry assert grm.ramachandran_manager.get_n_proxies() == 170 assert grm.ramachandran_manager.get_n_oldfield_proxies() == 167 assert grm.ramachandran_manager.get_n_emsley_proxies() == 3 params.pdb_interpretation.peptide_link.ramachandran_restraints = True params.pdb_interpretation.peptide_link.restrain_rama_outliers = False params.pdb_interpretation.peptide_link.restrain_rama_allowed = False params.pdb_interpretation.peptide_link.restrain_allowed_outliers_with_emsley=True model.set_pdb_interpretation_params(params) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() assert nprox == 170 assert grm.ramachandran_manager.get_n_oldfield_proxies() == 164 assert grm.ramachandran_manager.get_n_emsley_proxies() == 6
def exercise_ramachandran_selections(mon_lib_srv, ener_lib): # Just check overall rama proxies file_name = libtbx.env.find_in_repositories( # relative_path="phenix_regression/pdb/3mku.pdb", relative_path="phenix_regression/pdb/fab_a_cut.pdb", test=os.path.isfile) if (file_name is None): print("Skipping test.") return params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.peptide_link.ramachandran_restraints = True pdb_inp = iotbx.pdb.input(file_name=file_name) model = mmtbx.model.manager( model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) grm = model.get_restraints_manager().geometry assert grm.ramachandran_manager.get_n_proxies() == 53 # simple selection params.pdb_interpretation.peptide_link.ramachandran_restraints = True params.pdb_interpretation.peptide_link.rama_selection = "chain A and resid 1:7" model.set_pdb_interpretation_params(params) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() assert nprox == 5, ""+\ "Want to get 5 rama proxies, got %d" % nprox # 7 residues: there are insertion codes params.pdb_interpretation.peptide_link.ramachandran_restraints = True params.pdb_interpretation.peptide_link.rama_selection = "chain A and resid 27:28" model.set_pdb_interpretation_params(params) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() assert nprox == 5, ""+\ "Want to get 5 rama proxies, got %d" % nprox
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 exercise_ramachandran_selections(mon_lib_srv, ener_lib): # Just check overall rama proxies file_name = libtbx.env.find_in_repositories( # relative_path="phenix_regression/pdb/3mku.pdb", relative_path="phenix_regression/pdb/fab_a_cut.pdb", test=os.path.isfile) if (file_name is None): print("Skipping test.") return params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.ramachandran_plot_restraints.enabled = True params.pdb_interpretation.ramachandran_plot_restraints.inject_emsley8k_into_oldfield_favored = False pdb_inp = iotbx.pdb.input(file_name=file_name) model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out(), build_grm=True) grm = model.get_restraints_manager().geometry n = grm.ramachandran_manager.get_n_proxies() assert n == 53, n # simple selection model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) params.pdb_interpretation.ramachandran_plot_restraints.enabled = True params.pdb_interpretation.ramachandran_plot_restraints.inject_emsley8k_into_oldfield_favored = False params.pdb_interpretation.ramachandran_plot_restraints.selection = "chain A and resid 1:7" model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() assert nprox == 5, ""+\ "Want to get 5 rama proxies, got %d" % nprox # 7 residues: there are insertion codes model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) params.pdb_interpretation.ramachandran_plot_restraints.enabled = True params.pdb_interpretation.ramachandran_plot_restraints.inject_emsley8k_into_oldfield_favored = False params.pdb_interpretation.ramachandran_plot_restraints.selection = "chain A and resid 27:28" model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() assert nprox == 5, ""+\ "Want to get 5 rama proxies, got %d" % nprox
def exercise_ss_creation_crash(): pdb_str = """ CRYST1 145.350 135.090 157.320 90.00 90.00 90.00 P 1 SCALE1 0.006880 0.000000 0.000000 0.00000 SCALE2 0.000000 0.007402 0.000000 0.00000 SCALE3 0.000000 0.000000 0.006356 0.00000 ATOM 1 N ASN A 1 47.095 160.279 31.220 1.00 30.00 N ATOM 2 CA ASN A 1 65.985 120.233 34.727 1.00 30.00 C ATOM 3 C ASN A 1 56.657 138.700 33.374 1.00 30.00 C ATOM 4 O ASN A 1 56.353 138.977 34.561 1.00 30.00 O ATOM 5 CB ASN A 1 65.238 120.133 36.068 1.00 30.00 C ATOM 6 CG ASN A 1 66.087 119.360 37.057 1.00 30.00 C ATOM 7 OD1 ASN A 1 65.746 118.217 37.441 1.00 30.00 O ATOM 8 ND2 ASN A 1 67.240 119.920 37.395 1.00 30.00 N ATOM 9 N ASN A 2 56.939 137.441 33.021 1.00 30.00 N ATOM 10 CA ASN A 2 67.135 117.384 35.354 1.00 30.00 C ATOM 11 C ASN A 2 74.935 104.398 35.546 1.00 30.00 C ATOM 12 O ASN A 2 74.423 104.166 34.444 1.00 30.00 O ATOM 13 CB ASN A 2 65.828 116.703 35.809 1.00 30.00 C ATOM 14 CG ASN A 2 66.092 115.518 36.718 1.00 30.00 C ATOM 15 OD1 ASN A 2 66.641 114.515 36.266 1.00 30.00 O ATOM 16 ND2 ASN A 2 65.744 115.556 38.000 1.00 30.00 N ATOM 17 N ASN A 3 76.102 103.886 35.920 1.00 30.00 N ATOM 18 CA ASN A 3 68.960 115.076 35.163 1.00 30.00 C ATOM 19 C ASN A 3 86.047 90.376 35.591 1.00 30.00 C ATOM 20 O ASN A 3 87.134 90.903 35.535 1.00 30.00 O ATOM 21 CB ASN A 3 70.251 115.882 34.903 1.00 30.00 C ATOM 22 CG ASN A 3 71.023 116.208 36.192 1.00 30.00 C ATOM 23 OD1 ASN A 3 70.637 117.096 36.957 1.00 30.00 O ATOM 24 ND2 ASN A 3 72.106 115.481 36.436 1.00 30.00 N ATOM 25 OXT ASN A 3 85.912 89.104 36.045 1.00 30.00 O TER END """ with open("exercise_ss_creation_crash_model.pdb","w") as fo: fo.write(pdb_str) from iotbx.data_manager import DataManager dm=DataManager() params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.secondary_structure.enabled=True model = dm.get_model('exercise_ss_creation_crash_model.pdb') model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True)
def exercise_reference_model_restraints(mon_lib_srv, ener_lib): # 1yjp pdb_str = """\ CRYST1 21.937 4.866 23.477 90.00 107.08 90.00 P 1 21 1 2 ATOM 1 N GLY A 1 -9.009 4.612 6.102 1.00 16.77 N ATOM 2 CA GLY A 1 -9.052 4.207 4.651 1.00 16.57 C ATOM 3 C GLY A 1 -8.015 3.140 4.419 1.00 16.16 C ATOM 4 O GLY A 1 -7.523 2.521 5.381 1.00 16.78 O ATOM 5 N ASN A 2 -7.656 2.923 3.155 1.00 15.02 N ATOM 6 CA ASN A 2 -6.522 2.038 2.831 1.00 14.10 C ATOM 7 C ASN A 2 -5.241 2.537 3.427 1.00 13.13 C ATOM 8 O ASN A 2 -4.978 3.742 3.426 1.00 11.91 O ATOM 9 CB ASN A 2 -6.346 1.881 1.341 1.00 15.38 C ATOM 10 CG ASN A 2 -7.584 1.342 0.692 1.00 14.08 C ATOM 11 OD1 ASN A 2 -8.025 0.227 1.016 1.00 17.46 O ATOM 12 ND2 ASN A 2 -8.204 2.155 -0.169 1.00 11.72 N ATOM 13 N ASN A 3 -4.438 1.590 3.905 1.00 12.26 N ATOM 14 CA ASN A 3 -3.193 1.904 4.589 1.00 11.74 C ATOM 15 C ASN A 3 -1.955 1.332 3.895 1.00 11.10 C ATOM 16 O ASN A 3 -1.872 0.119 3.648 1.00 10.42 O ATOM 17 CB ASN A 3 -3.259 1.378 6.042 1.00 12.15 C ATOM 18 CG ASN A 3 -2.006 1.739 6.861 1.00 12.82 C ATOM 19 OD1 ASN A 3 -1.702 2.925 7.072 1.00 15.05 O ATOM 20 ND2 ASN A 3 -1.271 0.715 7.306 1.00 13.48 N ATOM 21 N GLN A 4 -1.005 2.228 3.598 1.00 10.29 N ATOM 22 CA GLN A 4 0.384 1.888 3.199 1.00 10.53 C ATOM 23 C GLN A 4 1.435 2.606 4.088 1.00 10.24 C ATOM 24 O GLN A 4 1.547 3.843 4.115 1.00 8.86 O ATOM 25 CB GLN A 4 0.656 2.148 1.711 1.00 9.80 C ATOM 26 CG GLN A 4 1.944 1.458 1.213 1.00 10.25 C ATOM 27 CD GLN A 4 2.504 2.044 -0.089 1.00 12.43 C ATOM 28 OE1 GLN A 4 2.744 3.268 -0.190 1.00 14.62 O ATOM 29 NE2 GLN A 4 2.750 1.161 -1.091 1.00 9.05 N ATOM 30 N GLN A 5 2.154 1.821 4.871 1.00 10.38 N ATOM 31 CA GLN A 5 3.270 2.361 5.640 1.00 11.39 C ATOM 32 C GLN A 5 4.594 1.768 5.172 1.00 11.52 C ATOM 33 O GLN A 5 4.768 0.546 5.054 1.00 12.05 O ATOM 34 CB GLN A 5 3.056 2.183 7.147 1.00 11.96 C ATOM 35 CG GLN A 5 1.829 2.950 7.647 1.00 10.81 C ATOM 36 CD GLN A 5 1.344 2.414 8.954 1.00 13.10 C ATOM 37 OE1 GLN A 5 0.774 1.325 9.002 1.00 10.65 O ATOM 38 NE2 GLN A 5 1.549 3.187 10.039 1.00 12.30 N ATOM 39 N ASN A 6 5.514 2.664 4.856 1.00 11.99 N ATOM 40 CA ASN A 6 6.831 2.310 4.318 1.00 12.30 C ATOM 41 C ASN A 6 7.854 2.761 5.324 1.00 13.40 C ATOM 42 O ASN A 6 8.219 3.943 5.374 1.00 13.92 O ATOM 43 CB ASN A 6 7.065 3.016 2.993 1.00 12.13 C ATOM 44 CG ASN A 6 5.961 2.735 2.003 1.00 12.77 C ATOM 45 OD1 ASN A 6 5.798 1.604 1.551 1.00 14.27 O ATOM 46 ND2 ASN A 6 5.195 3.747 1.679 1.00 10.07 N ATOM 47 N TYR A 7 8.292 1.817 6.147 1.00 14.70 N ATOM 48 CA TYR A 7 9.159 2.144 7.299 1.00 15.18 C ATOM 49 C TYR A 7 10.603 2.331 6.885 1.00 15.91 C ATOM 50 O TYR A 7 11.041 1.811 5.855 1.00 15.76 O ATOM 51 CB TYR A 7 9.061 1.065 8.369 1.00 15.35 C ATOM 52 CG TYR A 7 7.665 0.929 8.902 1.00 14.45 C ATOM 53 CD1 TYR A 7 6.771 0.021 8.327 1.00 15.68 C ATOM 54 CD2 TYR A 7 7.210 1.756 9.920 1.00 14.80 C ATOM 55 CE1 TYR A 7 5.480 -0.094 8.796 1.00 13.46 C ATOM 56 CE2 TYR A 7 5.904 1.649 10.416 1.00 14.33 C ATOM 57 CZ TYR A 7 5.047 0.729 9.831 1.00 15.09 C ATOM 58 OH TYR A 7 3.766 0.589 10.291 1.00 14.39 O ATOM 59 OXT TYR A 7 11.358 2.999 7.612 1.00 17.49 O TER 60 TYR A 7 HETATM 61 O HOH A 8 -6.471 5.227 7.124 1.00 22.62 O HETATM 62 O HOH A 9 10.431 1.858 3.216 1.00 19.71 O HETATM 63 O HOH A 10 -11.286 1.756 -1.468 1.00 17.08 O HETATM 64 O HOH A 11 11.808 4.179 9.970 1.00 23.99 O HETATM 65 O HOH A 12 13.605 1.327 9.198 1.00 26.17 O HETATM 66 O HOH A 13 -2.749 3.429 10.024 1.00 39.15 O HETATM 67 O HOH A 14 -1.500 0.682 10.967 1.00 43.49 O MASTER 234 0 0 0 0 0 0 6 66 1 0 1 END """ work_params = mmtbx.model.manager.get_default_pdb_interpretation_params() work_params.reference_model.enabled = True work_params.reference_model.use_starting_model_as_reference = True model = mmtbx.model.manager(model_input=iotbx.pdb.input( source_info=None, lines=pdb_str.split('\n')), pdb_interpretation_params=work_params, build_grm=True, log=null_out()) n_ref_dih_prox = model.get_restraints_manager( ).geometry.get_n_reference_dihedral_proxies() assert n_ref_dih_prox == 34, "expected 34, got %d" % n_ref_dih_prox model = mmtbx.model.manager(model_input=iotbx.pdb.input( source_info=None, lines=pdb_str.split('\n')), pdb_interpretation_params=work_params, build_grm=False, log=null_out()) work_params = mmtbx.model.manager.get_default_pdb_interpretation_params() work_params.reference_model.enabled = True work_params.reference_model.use_starting_model_as_reference = True work_params.reference_model.main_chain = False model.set_pdb_interpretation_params(work_params) model.process_input_model(make_restraints=True) n_ref_dih_prox = model.get_restraints_manager( ).geometry.get_n_reference_dihedral_proxies() assert n_ref_dih_prox == 16, "expected 16, got %d" % n_ref_dih_prox model = mmtbx.model.manager(model_input=iotbx.pdb.input( source_info=None, lines=pdb_str.split('\n')), pdb_interpretation_params=work_params, build_grm=False, log=null_out()) work_params = mmtbx.model.manager.get_default_pdb_interpretation_params() work_params.reference_model.enabled = True work_params.reference_model.use_starting_model_as_reference = True work_params.reference_model.side_chain = False model.set_pdb_interpretation_params(work_params) model.process_input_model(make_restraints=True) n_ref_dih_prox = model.get_restraints_manager( ).geometry.get_n_reference_dihedral_proxies() assert n_ref_dih_prox == 18, "expected 18, got %d" % n_ref_dih_prox
def exercise_allowed_outliers(): file_name = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/3ifk.pdb", test=os.path.isfile) if (file_name is None): print("Skipping test.") return params = mmtbx.model.manager.get_default_pdb_interpretation_params() params.pdb_interpretation.ramachandran_plot_restraints.enabled = True params.pdb_interpretation.ramachandran_plot_restraints.inject_emsley8k_into_oldfield_favored = False pdb_inp = iotbx.pdb.input(file_name=file_name) model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out(), build_grm=True) grm = model.get_restraints_manager().geometry assert grm.ramachandran_manager.get_n_proxies( ) == 170, grm.ramachandran_manager.get_n_proxies() full_proxies_iseqs = list( tuple(x.get_i_seqs()) for x in grm.ramachandran_manager._oldfield_proxies) params.pdb_interpretation.ramachandran_plot_restraints.favored = "oldfield" params.pdb_interpretation.ramachandran_plot_restraints.allowed = "oldfield" params.pdb_interpretation.ramachandran_plot_restraints.outlier = None model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() # print "without outliers", nprox assert nprox == 167, nprox no_out_proxies_iseqs = list( tuple(x.get_i_seqs()) for x in grm.ramachandran_manager._oldfield_proxies) # assert nprox == 5, ""+\ # "Want to get 5 rama proxies, got %d" % nprox sdif_list = sorted( list(set(full_proxies_iseqs) - set(no_out_proxies_iseqs))) outliers_txt_list = [ 'pdb=" N THR B 5 "', 'pdb=" N GLU B 6 "', 'pdb=" N SER B 81 "' ] # print "outliers" for a, answer in zip(sdif_list, outliers_txt_list): # print model.get_hierarchy().atoms()[a[1]].id_str() assert model.get_hierarchy().atoms()[a[1]].id_str() == answer model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) params.pdb_interpretation.ramachandran_plot_restraints.favored = "oldfield" params.pdb_interpretation.ramachandran_plot_restraints.allowed = None params.pdb_interpretation.ramachandran_plot_restraints.outlier = "oldfield" model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() # print "without allowed", nprox assert nprox == 167 no_all_proxies_iseqs = list( tuple(x.get_i_seqs()) for x in grm.ramachandran_manager._oldfield_proxies) sdif_list = sorted( list(set(full_proxies_iseqs) - set(no_all_proxies_iseqs))) allowed_txt_list = [ 'pdb=" N THR A 5 "', 'pdb=" N LEU B 4 "', 'pdb=" N SER B 38 "' ] # print "allowed" for a, answer in zip(sdif_list, allowed_txt_list): # print model.get_hierarchy().atoms()[a[1]].id_str() assert model.get_hierarchy().atoms()[a[1]].id_str() == answer params.pdb_interpretation.ramachandran_plot_restraints.favored = "oldfield" params.pdb_interpretation.ramachandran_plot_restraints.allowed = None params.pdb_interpretation.ramachandran_plot_restraints.outlier = None model = mmtbx.model.manager(model_input=pdb_inp, pdb_interpretation_params=params, log=null_out()) model.set_pdb_interpretation_params(params) model.process_input_model(make_restraints=True) grm = model.get_restraints_manager().geometry nprox = grm.ramachandran_manager.get_n_proxies() # print "without both", nprox assert nprox == 164 no_both_proxies_iseqs = list( tuple(x.get_i_seqs()) for x in grm.ramachandran_manager._oldfield_proxies) sdif_list = sorted( list(set(full_proxies_iseqs) - set(no_both_proxies_iseqs))) both_txt_list = [ 'pdb=" N THR A 5 "', 'pdb=" N LEU B 4 "', 'pdb=" N THR B 5 "', 'pdb=" N GLU B 6 "', 'pdb=" N SER B 38 "', 'pdb=" N SER B 81 "' ] # print "both" for a, answer in zip(sdif_list, both_txt_list): # print model.get_hierarchy().atoms()[a[1]].id_str() assert model.get_hierarchy().atoms()[a[1]].id_str() == answer