From ab49029e5a73f2d600a6d39f91deb9692c6030f5 Mon Sep 17 00:00:00 2001 From: Oleg Sobolev Date: Thu, 9 Mar 2023 14:29:55 -0700 Subject: [PATCH] Refactoring out usage of hierarchy.input. --- mmtbx/disorder/tst.py | 6 +- mmtbx/disorder/tst_analyze_model.py | 6 +- mmtbx/disorder/tst_backbone.py | 8 +- mmtbx/regression/tst_command_line_input.py | 11 +-- mmtbx/regression/tst_pdbtools.py | 15 ++-- .../regression/tst_real_space_correlation.py | 19 ++-- mmtbx/regression/tst_table_one.py | 6 +- mmtbx/secondary_structure/tst.py | 86 +++++++++---------- sphinx/iotbx/iotbx.pdb_tutorial.rst | 62 ++++++------- 9 files changed, 111 insertions(+), 108 deletions(-) diff --git a/mmtbx/disorder/tst.py b/mmtbx/disorder/tst.py index 24dc8e3bbc..4729c895ee 100644 --- a/mmtbx/disorder/tst.py +++ b/mmtbx/disorder/tst.py @@ -1,7 +1,7 @@ from __future__ import absolute_import, division, print_function from mmtbx import disorder -import iotbx.pdb.hierarchy +import iotbx.pdb from libtbx.test_utils import approx_equal from libtbx.utils import null_out @@ -58,8 +58,8 @@ def exercise(): ATOM 3 CA LYS A 75 37.173 3.719 10.662 0.01 13.28 C ENDMDL """ - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=pdb_str) - hierarchy = pdb_in.hierarchy + pdb_in = iotbx.pdb.input(source_info=None, lines=pdb_str) + hierarchy = pdb_in.construct_hierarchy() disorder.set_ensemble_b_factors_to_xyz_displacement( pdb_hierarchy=hierarchy, method="rmsf", diff --git a/mmtbx/disorder/tst_analyze_model.py b/mmtbx/disorder/tst_analyze_model.py index 8bba77c0ad..6700f64e8c 100644 --- a/mmtbx/disorder/tst_analyze_model.py +++ b/mmtbx/disorder/tst_analyze_model.py @@ -2,15 +2,15 @@ from __future__ import absolute_import, division, print_function from mmtbx.disorder import analyze_model from mmtbx.validation import molprobity -import iotbx.pdb.hierarchy +import iotbx.pdb from libtbx.utils import null_out import libtbx.load_env import mmtbx.model from six.moves import cStringIO as StringIO def analyze_fragment(pdb_str): - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=pdb_str) - model = mmtbx.model.manager(pdb_in.input) + pdb_in = iotbx.pdb.input(source_info=None, lines=pdb_str) + model = mmtbx.model.manager(pdb_in) validation = molprobity.molprobity(model, outliers_only=False) result = analyze_model.process_pdb_hierarchy( pdb_hierarchy=model.get_hierarchy(), diff --git a/mmtbx/disorder/tst_backbone.py b/mmtbx/disorder/tst_backbone.py index 82dec12681..04cd13b6e3 100644 --- a/mmtbx/disorder/tst_backbone.py +++ b/mmtbx/disorder/tst_backbone.py @@ -1,7 +1,7 @@ from __future__ import absolute_import, division, print_function from mmtbx.disorder import backbone -import iotbx.pdb.hierarchy +import iotbx.pdb from six.moves import cStringIO as StringIO pdb_raw = """ @@ -103,11 +103,11 @@ """ def exercise(): - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=pdb_raw) + hierarchy = iotbx.pdb.input(source_info=None, lines=pdb_raw).construct_hierarchy() with open("tmp.pdb", "w") as f: - f.write(pdb_in.hierarchy.as_pdb_string()) + f.write(hierarchy.as_pdb_string()) backrubs = backbone.find_backrubs( - pdb_hierarchy=pdb_in.hierarchy) + pdb_hierarchy=hierarchy) assert (len(backrubs) == 1) out = StringIO() backrubs[0].show(out=out) diff --git a/mmtbx/regression/tst_command_line_input.py b/mmtbx/regression/tst_command_line_input.py index c233172251..edd67bbdd5 100644 --- a/mmtbx/regression/tst_command_line_input.py +++ b/mmtbx/regression/tst_command_line_input.py @@ -128,14 +128,15 @@ def exercise_combine_symmetry(): """ from mmtbx.regression import model_1yjp import mmtbx.command_line - import iotbx.pdb.hierarchy + import iotbx.pdb from cctbx import sgtbx from cctbx import uctbx # 1yjp, as usual - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=model_1yjp) - xrs = pdb_in.input.xray_structure_simple() + pdb_in = iotbx.pdb.input(source_info=None, lines=model_1yjp) + hierarchy = pdb_in.construct_hierarchy() + xrs = pdb_in.xray_structure_simple() f = open("tst_combine_symmetry.pdb", "w") - f.write(pdb_in.hierarchy.as_pdb_string(crystal_symmetry=xrs)) + f.write(hierarchy.as_pdb_string(crystal_symmetry=xrs)) f.close() f_calc = abs(xrs.structure_factors(d_min=1.5).f_calc()) # Make up slightly more exact unit cell, but set SG to P2 @@ -251,7 +252,7 @@ def exercise_load_unmerged(): flex.set_random_seed(123456) random.seed(123456) base = "tst_load_unmerged" - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=model_1yjp) + pdb_in = iotbx.pdb.input(source_info=None, lines=model_1yjp) xrs = pdb_in.xray_structure_simple() xrs.set_inelastic_form_factors( photon=1.54, diff --git a/mmtbx/regression/tst_pdbtools.py b/mmtbx/regression/tst_pdbtools.py index 379c874d10..2fb6247ef9 100644 --- a/mmtbx/regression/tst_pdbtools.py +++ b/mmtbx/regression/tst_pdbtools.py @@ -6,13 +6,11 @@ from mmtbx import utils from libtbx.test_utils import approx_equal, not_approx_equal, run_command, \ show_diff -import iotbx.pdb.hierarchy +import iotbx.pdb from scitbx.array_family import flex from cctbx import adptbx import mmtbx.model -import iotbx.pdb -from six.moves import cStringIO as StringIO -from six.moves import zip +from six.moves import cStringIO as StringIO, zip from libtbx import easy_run full_params = mmtbx.model.manager.get_default_pdb_interpretation_params() @@ -562,13 +560,12 @@ def exercise_truncate_to_polyala(): print(cmd) run_command(command=cmd) gly_atom_names = [" N ", " CA ", " C ", " O ", " CB "] - pdb_inp = iotbx.pdb.hierarchy.input( + pdb_inp = iotbx.pdb.input( file_name="exercise_exercise_truncate_to_polyala_modified.pdb") - for a in pdb_inp.hierarchy.atoms_with_labels(): + for a in pdb_inp.construct_hierarchy().atoms_with_labels(): assert a.name in gly_atom_names def exercise_set_charge(): - from iotbx import file_reader input_pdb = """ ATOM 1 CL CL X 1 0.000 0.000 0.000 1.00 20.00 CL END @@ -578,8 +575,8 @@ def exercise_set_charge(): cmd='phenix.pdbtools tmp_cl.pdb charge_selection="element Cl" charge=-1' print(cmd) run_command(command=cmd, verbose=False) - pdb_in = file_reader.any_file("tmp_cl_modified.pdb").file_object - hierarchy = pdb_in.hierarchy + pdb_in = iotbx.pdb.input("tmp_cl_modified.pdb") + hierarchy = pdb_in.construct_hierarchy() xrs = pdb_in.xray_structure_simple() assert (xrs.scatterers()[0].scattering_type == 'Cl1-') assert (hierarchy.atoms()[0].charge == '1-') diff --git a/mmtbx/regression/tst_real_space_correlation.py b/mmtbx/regression/tst_real_space_correlation.py index 330d6ae63b..e38a587bb3 100644 --- a/mmtbx/regression/tst_real_space_correlation.py +++ b/mmtbx/regression/tst_real_space_correlation.py @@ -3,7 +3,7 @@ from mmtbx import real_space_correlation import mmtbx.utils from iotbx import file_reader -import iotbx.pdb.hierarchy +import iotbx.pdb from scitbx.array_family import flex import libtbx.load_env from libtbx.test_utils import approx_equal @@ -21,10 +21,10 @@ def exercise_1(): if (None in [pdb_file, mtz_file]): print("phenix_regression not found, skipping test") return False - pdb_in = file_reader.any_file(pdb_file) - hierarchy = pdb_in.file_object.hierarchy + pdb_in = iotbx.pdb.input(pdb_file) + hierarchy = pdb_in.construct_hierarchy() hierarchy.atoms().reset_i_seq() - xrs = pdb_in.file_object.xray_structure_simple() + xrs = pdb_in.xray_structure_simple() mtz_in = file_reader.any_file(mtz_file) f_obs = mtz_in.file_server.miller_arrays[0] r_free = mtz_in.file_server.miller_arrays[1] @@ -114,8 +114,9 @@ def exercise_2(): ATOM 21 OXT TYR B 7 7.316 5.408 8.654 1.00 18.49 O END """ - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=pdb_str) - xrs = pdb_in.input.xray_structure_simple() + pdb_in = iotbx.pdb.input(source_info=None, lines=pdb_str) + hierarchy = pdb_in.construct_hierarchy() + xrs = pdb_in.xray_structure_simple() fc = abs(xrs.structure_factors(d_min=1.5).f_calc()) fc = fc.set_observation_type_xray_amplitude() sigf = flex.double(fc.size(), 0.1) + (fc.data() * 0.03) @@ -131,13 +132,13 @@ def exercise_2(): assert (fmodel.twin_law is not None) map_stats = real_space_correlation.extract_map_stats_for_single_atoms( xray_structure=xrs, - pdb_atoms=pdb_in.hierarchy.atoms(), + pdb_atoms=hierarchy.atoms(), fmodel=fmodel) - sel_cache = pdb_in.hierarchy.atom_selection_cache() + sel_cache = hierarchy.atom_selection_cache() sel = sel_cache.selection("chain B") map_stats_2 = real_space_correlation.extract_map_stats_for_single_atoms( xray_structure=xrs, - pdb_atoms=pdb_in.hierarchy.atoms(), + pdb_atoms=hierarchy.atoms(), fmodel=fmodel, selection=sel) map_stats_3 = real_space_correlation.map_statistics_for_atom_selection( diff --git a/mmtbx/regression/tst_table_one.py b/mmtbx/regression/tst_table_one.py index ef7a9c831e..7e725c8626 100644 --- a/mmtbx/regression/tst_table_one.py +++ b/mmtbx/regression/tst_table_one.py @@ -4,7 +4,7 @@ from mmtbx.regression import model_1yjp from mmtbx.command_line import table_one -import iotbx.pdb.hierarchy +import iotbx.pdb from cctbx import sgtbx from scitbx.array_family import flex from libtbx.utils import null_out @@ -15,7 +15,7 @@ def exercise(): flex.set_random_seed(123456) random.seed(123456) base = "tst_table_one" - pdb_in = iotbx.pdb.hierarchy.input(pdb_string=model_1yjp) + pdb_in = iotbx.pdb.input(source_info=None, lines=model_1yjp) xrs = pdb_in.xray_structure_simple() xrs.set_inelastic_form_factors( photon=1.54, @@ -87,7 +87,7 @@ def exercise_counts(): pdb_file = libtbx.env.under_dist('mmtbx', 'regression/pdbs/two_chains_ligand_water.pdb') base = "tst_table_one_counts" mtz_file = base + ".mtz" - pdb_in = iotbx.pdb.hierarchy.input(pdb_file) + pdb_in = iotbx.pdb.input(pdb_file) xrs = pdb_in.xray_structure_simple() xrs.set_inelastic_form_factors(photon=1.54, table="sasaki") fc = abs(xrs.structure_factors(d_min=4.0).f_calc()).average_bijvoet_mates() diff --git a/mmtbx/secondary_structure/tst.py b/mmtbx/secondary_structure/tst.py index 7cb05ec548..d88929d87f 100644 --- a/mmtbx/secondary_structure/tst.py +++ b/mmtbx/secondary_structure/tst.py @@ -3,7 +3,7 @@ from mmtbx.secondary_structure import sec_str_master_phil_str, manager from cctbx import geometry_restraints from iotbx import file_reader -import iotbx.pdb.hierarchy +import iotbx.pdb import libtbx.load_env import iotbx.pdb.secondary_structure as ioss from libtbx.utils import null_out @@ -221,7 +221,7 @@ def exercise_sheet_ends(): def exercise_helix_bonding_pattern(): - alpha_h1_simple = iotbx.pdb.hierarchy.input(pdb_string="""\ + alpha_h1_simple = iotbx.pdb.input(source_info=None, lines="""\ ATOM 1 N ALA 1 1.643 -2.366 -1.408 1.00 0.00 N ATOM 2 CA ALA 1 1.280 -3.608 -2.069 1.00 0.00 C ATOM 3 C ALA 1 -0.114 -3.466 -2.684 1.00 0.00 C @@ -273,8 +273,8 @@ def exercise_helix_bonding_pattern(): ATOM 49 O ALA 10 -5.880 -1.605 -16.177 1.00 0.00 O ATOM 50 CB ALA 10 -5.358 0.040 -13.274 1.00 0.00 C TER -""") - alpha_h1_1ac = iotbx.pdb.hierarchy.input(pdb_string="""\ +""").construct_hierarchy() + alpha_h1_1ac = iotbx.pdb.input(source_info=None, lines="""\ ATOM 1 N AALA 1 1.643 -2.366 -1.408 0.50 0.00 N ATOM 2 CA AALA 1 1.280 -3.608 -2.069 0.50 0.00 C ATOM 3 C AALA 1 -0.114 -3.466 -2.684 0.50 0.00 C @@ -332,9 +332,9 @@ def exercise_helix_bonding_pattern(): ATOM 55 CB ALA 10 -5.358 0.040 -13.274 1.00 0.00 C TER 56 ALA 10 END -""") +""").construct_hierarchy() - alpha_h1_1_10ac = iotbx.pdb.hierarchy.input(pdb_string="""\ + alpha_h1_1_10ac = iotbx.pdb.input(source_info=None, lines="""\ ATOM 1 N AALA 1 1.643 -2.366 -1.408 0.50 0.00 N ATOM 2 CA AALA 1 1.280 -3.608 -2.069 0.50 0.00 C ATOM 3 C AALA 1 -0.114 -3.466 -2.684 0.50 0.00 C @@ -396,9 +396,9 @@ def exercise_helix_bonding_pattern(): ATOM 60 O BALA 10 -5.780 -1.605 -16.177 0.50 0.00 O ATOM 61 CB BALA 10 -5.258 0.040 -13.274 0.50 0.00 C END -""") +""").construct_hierarchy() - alpha_h1_1_5_10ac = iotbx.pdb.hierarchy.input(pdb_string="""\ + alpha_h1_1_5_10ac = iotbx.pdb.input(source_info=None, lines="""\ ATOM 1 N AALA 1 1.643 -2.366 -1.408 0.50 0.00 N ATOM 2 CA AALA 1 1.280 -3.608 -2.069 0.50 0.00 C ATOM 3 C AALA 1 -0.114 -3.466 -2.684 0.50 0.00 C @@ -465,9 +465,9 @@ def exercise_helix_bonding_pattern(): ATOM 65 O BALA 10 -5.780 -1.605 -16.177 0.50 0.00 O ATOM 66 CB BALA 10 -5.258 0.040 -13.274 0.50 0.00 C END -""") +""").construct_hierarchy() - alpha_h1_1_5_10ac_insertions = iotbx.pdb.hierarchy.input(pdb_string="""\ + alpha_h1_1_5_10ac_insertions = iotbx.pdb.input(source_info=None, lines="""\ ATOM 1 N AALA 1 1.643 -2.366 -1.408 0.50 0.00 N ATOM 2 CA AALA 1 1.280 -3.608 -2.069 0.50 0.00 C ATOM 3 C AALA 1 -0.114 -3.466 -2.684 0.50 0.00 C @@ -534,7 +534,7 @@ def exercise_helix_bonding_pattern(): ATOM 65 O BALA 6 -5.780 -1.605 -16.177 0.50 0.00 O ATOM 66 CB BALA 6 -5.258 0.040 -13.274 0.50 0.00 C END -""") +""").construct_hierarchy() alpha_annot_1 = """\ HELIX 1 1 ALA 1 ALA 10 1 10 @@ -547,7 +547,7 @@ def exercise_helix_bonding_pattern(): log = null_out() n_hbonds = [] n_hangles = [] - for pdb_inp, recs in [ + for pdb_h, recs in [ (alpha_h1_simple, alpha_annot_1), (alpha_h1_1ac, alpha_annot_1), (alpha_h1_1_10ac, alpha_annot_1), @@ -561,14 +561,14 @@ def exercise_helix_bonding_pattern(): custom_pars = defpars.fetch(iotbx.phil.parse(ann)) custom_pars_ex = custom_pars.extract() ss_manager = manager( - pdb_inp.hierarchy, + pdb_h, sec_str_from_pdb_file=None, params=custom_pars_ex.secondary_structure, verbose=-1) proxies_for_grm, angle_p = ss_manager.create_protein_hbond_proxies( annotation= None, log = log) - pdb_inp.hierarchy.write_pdb_file(file_name="alpha_h1_1_5_10ac.pdb") + pdb_h.write_pdb_file(file_name="alpha_h1_1_5_10ac.pdb") # print proxies_for_grm.as_pymol_dashes(pdb_inp.hierarchy) # print angle_p.as_pymol_dashes(pdb_hierarchy=pdb_inp.hierarchy) # print "hbonds, hangles:", proxies_for_grm.size(), angle_p.size() @@ -580,7 +580,7 @@ def exercise_helix_bonding_pattern(): assert n_hangles == [18, 21, 24, 28, 28, 16] def exercise_sheets_bonding_pattern(): - pdb_apar_input = iotbx.pdb.hierarchy.input(pdb_string = """\ + pdb_apar_h = iotbx.pdb.input(source_info=None, lines = """\ SCRYST1 46.460 46.460 193.210 90.00 90.00 120.00 P 31 2 1 SCALE1 0.021524 0.012427 0.000000 0.00000 SCALE2 0.000000 0.024854 0.000000 0.00000 @@ -672,9 +672,9 @@ def exercise_sheets_bonding_pattern(): ATOM 237 O SER A 36 24.929 -22.095 -0.497 1.00 6.22 O ATOM 238 CB SER A 36 23.881 -21.071 -3.639 1.00 5.69 C ATOM 239 OG SER A 36 25.213 -20.561 -3.633 1.00 7.12 O -""") +""").construct_hierarchy() - pdb_par_input = iotbx.pdb.hierarchy.input(pdb_string = """\ + pdb_par_h = iotbx.pdb.input(source_info=None, lines = """\ CRYST1 46.460 46.460 193.210 90.00 90.00 120.00 P 31 2 1 SCALE1 0.021524 0.012427 0.000000 0.00000 SCALE2 0.000000 0.024854 0.000000 0.00000 @@ -750,9 +750,9 @@ def exercise_sheets_bonding_pattern(): ATOM 223 CB ALA A 46 6.607 -27.026 -9.678 1.00 4.52 C TER END -""") +""").construct_hierarchy() - pdb_par_ac_input = iotbx.pdb.hierarchy.input(pdb_string = """\ + pdb_par_ac_h = iotbx.pdb.input(source_info=None, lines = """\ CRYST1 46.460 46.460 193.210 90.00 90.00 120.00 P 31 2 1 SCALE1 0.021524 0.012427 0.000000 0.00000 SCALE2 0.000000 0.024854 0.000000 0.00000 @@ -838,10 +838,10 @@ def exercise_sheets_bonding_pattern(): ATOM 79 CB ALA A 46 6.607 -27.026 -9.678 1.00 4.52 C TER 80 ALA A 46 END -""") +""").construct_hierarchy() - pdb_apar2_input = iotbx.pdb.hierarchy.input(pdb_string = """\ + pdb_apar2_h = iotbx.pdb.input(source_info=None, lines = """\ CRYST1 172.640 172.640 172.640 90.00 90.00 90.00 P 1 ATOM 2094 C ASP N 271 109.854 129.638 88.152 1.00 0.00 C ATOM 2095 CA ASP N 271 108.849 130.718 87.818 1.00 0.00 C @@ -958,7 +958,7 @@ def exercise_sheets_bonding_pattern(): ATOM 2636 N LEU N 343 110.810 126.539 82.484 1.00 0.00 N ATOM 2637 O LEU N 343 107.761 124.516 82.764 1.00 0.00 O END -""") +""").construct_hierarchy() s_apar_records1 = """\ SHEET 1 A 2 TYR A 2 VAL A 7 0 @@ -1032,23 +1032,23 @@ def exercise_sheets_bonding_pattern(): # defpars = sec_str_master_phil n_hbonds = [] n_hangles = [] - for pdb_inp, recs in [ - (pdb_apar_input, s_apar_records1), - (pdb_apar_input, s_apar_records2), - (pdb_par_input, s_par_records1), - (pdb_par_input, s_par_records2), - (pdb_par_input, s_par_records3), - (pdb_par_input, s_par_records4), - (pdb_par_input, s_par_records5), - (pdb_par_input, s_par_records6), - (pdb_par_input, s_par_records7), - (pdb_par_input, s_par_records8), - (pdb_apar2_input, s_apar_records3), - (pdb_par_input, s_par_records9), - (pdb_par_input, s_par_records10), - (pdb_par_input, s_par_records11), - (pdb_par_input, s_par_records12), - (pdb_par_ac_input, s_par_records1), # 8 hbonds + for pdb_h, recs in [ + (pdb_apar_h, s_apar_records1), + (pdb_apar_h, s_apar_records2), + (pdb_par_h, s_par_records1), + (pdb_par_h, s_par_records2), + (pdb_par_h, s_par_records3), + (pdb_par_h, s_par_records4), + (pdb_par_h, s_par_records5), + (pdb_par_h, s_par_records6), + (pdb_par_h, s_par_records7), + (pdb_par_h, s_par_records8), + (pdb_apar2_h, s_apar_records3), + (pdb_par_h, s_par_records9), + (pdb_par_h, s_par_records10), + (pdb_par_h, s_par_records11), + (pdb_par_h, s_par_records12), + (pdb_par_ac_h, s_par_records1), # 8 hbonds ]: ioss_annotation = ioss.annotation.from_records(records = recs.split('\n')) ann = ioss_annotation.as_restraint_groups(prefix_scope="secondary_structure") @@ -1056,7 +1056,7 @@ def exercise_sheets_bonding_pattern(): custom_pars = defpars.fetch(iotbx.phil.parse(ann)) custom_pars_ex = custom_pars.extract() ss_manager = manager( - pdb_inp.hierarchy, + pdb_h, sec_str_from_pdb_file=None, params=custom_pars_ex.secondary_structure, verbose=-1) @@ -1074,7 +1074,7 @@ def exercise_segid(): if (not libtbx.env.has_module(name="ksdssp")): print("KSDSSP not available, skipping exercise_segid()") return - pdb_par_segid_input = iotbx.pdb.hierarchy.input(pdb_string = """\ + pdb_par_segid_h = iotbx.pdb.input(source_info=None, lines = """\ CRYST1 46.460 46.460 193.210 90.00 90.00 120.00 P 31 2 1 SCALE1 0.021524 0.012427 0.000000 0.00000 SCALE2 0.000000 0.024854 0.000000 0.00000 @@ -1150,7 +1150,7 @@ def exercise_segid(): ATOM 223 CB ALA A 46 6.607 -27.026 -9.678 1.00 4.52 seg C TER END -""") +""").construct_hierarchy() log = null_out() defpars = iotbx.phil.parse(sec_str_master_phil_str) custom_pars = defpars.extract() @@ -1158,7 +1158,7 @@ def exercise_segid(): # custom_pars = defpars.fetch(iotbx.phil.parse("secondary_structure_restraints=True")) ss_manager = manager( - pdb_par_segid_input.hierarchy, + pdb_par_segid_h, sec_str_from_pdb_file=None, params=custom_pars.secondary_structure, verbose=-1) diff --git a/sphinx/iotbx/iotbx.pdb_tutorial.rst b/sphinx/iotbx/iotbx.pdb_tutorial.rst index ea9adc55f2..84bf97fcc5 100644 --- a/sphinx/iotbx/iotbx.pdb_tutorial.rst +++ b/sphinx/iotbx/iotbx.pdb_tutorial.rst @@ -75,8 +75,8 @@ these steps:: if (len(args) == 0): raise RuntimeError("Please specify one or more pdb file names.") for file_name in args: - pdb_obj = iotbx.pdb.hierarchy.input(file_name=file_name) - pdb_obj.hierarchy.overall_counts().show() + pdb_obj = iotbx.pdb.input(file_name=file_name) + pdb_obj.construct_hierarchy().overall_counts().show() if (__name__ == "__main__"): run(sys.argv[1:]) @@ -104,8 +104,8 @@ us exactly where the error originates. This is often extremely helpful. The meat of the script is in these two lines:: - pdb_obj = iotbx.pdb.hierarchy.input(file_name=file_name) - pdb_obj.hierarchy.overall_counts().show() + pdb_obj = iotbx.pdb.input(file_name=file_name) + pdb_obj.construct_hierarchy().overall_counts().show() The first line executes the two steps outline above. This is really all we need, but the second line produces output that is useful to @@ -206,14 +206,15 @@ as found in `v1_loop_over_atoms.py`_:: from __future__ import division import iotbx.pdb import sys - + def run(args): if (len(args) == 0): raise RuntimeError("Please specify one or more pdb file names.") for file_name in args: - pdb_obj = iotbx.pdb.hierarchy.input(file_name=file_name) - pdb_obj.hierarchy.overall_counts().show() - for model in pdb_obj.hierarchy.models(): + pdb_obj = iotbx.pdb.input(file_name=file_name) + hierarchy = pdb_obj.construct_hierarchy() + hierarchy.overall_counts().show() + for model in hierarchy.models(): for chain in model.chains(): for rg in chain.residue_groups(): print 'resid: "%s"' % rg.resid() @@ -221,7 +222,7 @@ as found in `v1_loop_over_atoms.py`_:: print ' altloc: "%s", resname: "%s"' % (ag.altloc, ag.resname) for atom in ag.atoms(): print ' ', atom.name - + if (__name__ == "__main__"): run(sys.argv[1:]) @@ -300,16 +301,17 @@ The complete source for this script:: import iotbx.pdb import iotbx.pdb.amino_acid_codes import sys - + def run(args): if (len(args) == 0): raise RuntimeError("Please specify one or more pdb file names.") aa_resnames = iotbx.pdb.amino_acid_codes.one_letter_given_three_letter ala_atom_names = set([" N ", " CA ", " C ", " O ", " CB "]) for file_name in args: - pdb_obj = iotbx.pdb.hierarchy.input(file_name=file_name) - pdb_obj.hierarchy.overall_counts().show() - for model in pdb_obj.hierarchy.models(): + pdb_obj = iotbx.pdb.input(file_name=file_name) + hierarchy = pdb_obj.construct_hierarchy() + hierarchy.overall_counts().show() + for model in hierarchy.models(): for chain in model.chains(): for rg in chain.residue_groups(): for ag in rg.atom_groups(): @@ -318,8 +320,8 @@ The complete source for this script:: if (atom.name not in ala_atom_names): ag.remove_atom(atom=atom) output_pdb = "v2_truncated_to_ala_"+file_name - pdb_obj.hierarchy.write_pdb_file(file_name=output_pdb) - + hierarchy.write_pdb_file(file_name=output_pdb) + if (__name__ == "__main__"): run(sys.argv[1:]) @@ -423,16 +425,17 @@ The complete source for this script:: import iotbx.pdb import iotbx.pdb.amino_acid_codes import sys - + def run(args): if (len(args) == 0): raise RuntimeError("Please specify one or more pdb file names.") aa_resnames = iotbx.pdb.amino_acid_codes.one_letter_given_three_letter ala_atom_names = set([" N ", " CA ", " C ", " O ", " CB "]) for file_name in args: - pdb_obj = iotbx.pdb.hierarchy.input(file_name=file_name) - pdb_obj.hierarchy.overall_counts().show() - for model in pdb_obj.hierarchy.models(): + pdb_obj = iotbx.pdb.input(file_name=file_name) + hierarchy = pdb_obj.construct_hierarchy() + hierarchy.overall_counts().show() + for model in hierarchy.models(): for chain in model.chains(): for rg in chain.residue_groups(): def have_amino_acid(): @@ -446,8 +449,8 @@ The complete source for this script:: if (atom.name not in ala_atom_names): ag.remove_atom(atom=atom) output_pdb = "v3_truncated_to_ala_"+file_name - pdb_obj.hierarchy.write_pdb_file(file_name=output_pdb) - + hierarchy.write_pdb_file(file_name=output_pdb) + if (__name__ == "__main__"): run(sys.argv[1:]) @@ -516,7 +519,7 @@ There are three more small enhancements compared to the working directory, not the directory of the input file (which may be in another user's directory or a system directory) - - ``iotbx.pdb.hierarchy.input`` is able to open `.gz` files + - ``iotbx.pdb.input`` is able to open `.gz` files directly (e.g. compressed files as downloaded from the PDB). However, the ``.write_pdb_file()`` method always writes plain (non-compressed) files. Therefore the ``.gz`` extension has to be @@ -535,19 +538,20 @@ Full source:: import iotbx.pdb import iotbx.pdb.amino_acid_codes import sys, os - + def run(args): if (len(args) == 0): raise RuntimeError("Please specify one or more pdb file names.") aa_resnames = iotbx.pdb.amino_acid_codes.one_letter_given_three_letter ala_atom_names = set([" N ", " CA ", " C ", " O ", " CB "]) for file_name in args: - pdb_obj = iotbx.pdb.hierarchy.input(file_name=file_name) - pdb_obj.hierarchy.overall_counts().show() + pdb_obj = iotbx.pdb.input(file_name=file_name) + hierarchy = pdb_obj.construct_hierarchy() + hierarchy.overall_counts().show() n_amino_acid_residues = 0 n_other_residues = 0 n_atoms_removed = 0 - for model in pdb_obj.hierarchy.models(): + for model in hierarchy.models(): for chain in model.chains(): for rg in chain.residue_groups(): def have_amino_acid(): @@ -571,12 +575,12 @@ Full source:: output_pdb = "v4_truncated_to_ala_"+os.path.basename(file_name) if (output_pdb.endswith(".gz")): output_pdb = output_pdb[:-3] print "Writing file:", output_pdb - pdb_obj.hierarchy.write_pdb_file( + hierarchy.write_pdb_file( file_name=output_pdb, - crystal_symmetry=pdb_obj.input.crystal_symmetry(), + crystal_symmetry=pdb_obj.crystal_symmetry(), append_end=True) print - + if (__name__ == "__main__"): run(sys.argv[1:])