def test1(prefix="tst_mp4"): """ Illustrating failure in twin refine tutorial data, discovered 2/26/2018. """ with open("%s.pdb" % prefix, 'w') as f: f.write(pdb_txt) result = molprobity.run(args=['%s.pdb' % prefix])
def exercise_cdl(): pdb_raw = """ ATOM 1270 N LEU A 199 6.903 55.119 -0.416 1.00 25.48 N ATOM 1271 CA LEU A 199 7.726 56.192 -0.941 1.00 25.93 C ATOM 1272 C LEU A 199 6.996 56.972 -2.047 1.00 26.39 C ATOM 1273 O LEU A 199 7.020 58.180 -2.064 1.00 25.38 O ATOM 1274 CB LEU A 199 9.033 55.633 -1.490 1.00 25.66 C ATOM 1278 N ARG A 200 6.361 56.258 -2.980 1.00 27.31 N ATOM 1279 CA ARG A 200 5.576 56.913 -3.993 1.00 28.53 C ATOM 1280 C ARG A 200 4.520 57.823 -3.397 1.00 27.54 C ATOM 1281 O ARG A 200 4.397 58.949 -3.851 1.00 27.50 O ATOM 1282 CB ARG A 200 4.933 55.879 -4.899 1.00 30.38 C ATOM 1289 N ALA A 201 3.790 57.365 -2.357 1.00 26.90 N ATOM 1290 CA ALA A 201 2.764 58.200 -1.713 1.00 26.49 C ATOM 1291 C ALA A 201 3.406 59.407 -1.045 1.00 26.59 C ATOM 1292 O ALA A 201 2.866 60.516 -1.082 1.00 26.58 O ATOM 1293 CB ALA A 201 1.959 57.412 -0.715 1.00 25.11 C ATOM 1294 N ARG A 202 4.566 59.205 -0.419 1.00 25.66 N ATOM 1295 CA ARG A 202 5.245 60.296 0.240 1.00 26.93 C ATOM 1296 C ARG A 202 5.676 61.346 -0.767 1.00 26.93 C ATOM 1297 O ARG A 202 5.555 62.541 -0.489 1.00 25.79 O ATOM 1298 CB ARG A 202 6.493 59.779 0.996 1.00 28.25 C ATOM 1305 N ILE A 203 6.154 60.912 -1.931 1.00 26.99 N ATOM 1306 CA ILE A 203 6.611 61.848 -2.965 1.00 27.49 C ATOM 1307 C ILE A 203 5.430 62.674 -3.480 1.00 28.29 C ATOM 1308 O ILE A 203 5.548 63.905 -3.624 1.00 27.82 O ATOM 1309 CB ILE A 203 7.322 61.125 -4.075 1.00 28.09 C ATOM 1313 N SER A 204 4.288 62.025 -3.678 1.00 27.96 N ATOM 1314 CA SER A 204 3.119 62.736 -4.184 1.00 28.04 C ATOM 1315 C SER A 204 2.683 63.793 -3.199 1.00 28.16 C ATOM 1316 O SER A 204 2.311 64.910 -3.605 1.00 28.25 O ATOM 1317 CB SER A 204 1.962 61.780 -4.504 1.00 27.64 C """ pdb_raw_2 = """\ REMARK 3 GEOSTD + MON.LIB. + CDL v1.2 """ + pdb_raw open("tst_molprobity_cdl_1.pdb", "w").write(pdb_raw) open("tst_molprobity_cdl_2.pdb", "w").write(pdb_raw_2) files = ["tst_molprobity_cdl_1.pdb", "tst_molprobity_cdl_2.pdb"] rmsds = [0.9019, 0.8769] for file_name, rmsd, cdl_expected in zip(files, rmsds, [False, True]): result = molprobity.run(args=[file_name, "flags.clashscore=False"], ignore_missing_modules=True, out=null_out()).validation assert approx_equal(result.rms_angles(), rmsd, eps=0.001), rmsd if cdl_expected: out = StringIO() result.show(out=out) assert ( "Geometry Restraints Library: GeoStd + Monomer Library + CDL v1.2" in out.getvalue()) else: out = StringIO() result.show(out=out) assert ("CDL" not in out.getvalue())
def exercise_cdl () : pdb_raw = """ ATOM 1270 N LEU A 199 6.903 55.119 -0.416 1.00 25.48 N ATOM 1271 CA LEU A 199 7.726 56.192 -0.941 1.00 25.93 C ATOM 1272 C LEU A 199 6.996 56.972 -2.047 1.00 26.39 C ATOM 1273 O LEU A 199 7.020 58.180 -2.064 1.00 25.38 O ATOM 1274 CB LEU A 199 9.033 55.633 -1.490 1.00 25.66 C ATOM 1278 N ARG A 200 6.361 56.258 -2.980 1.00 27.31 N ATOM 1279 CA ARG A 200 5.576 56.913 -3.993 1.00 28.53 C ATOM 1280 C ARG A 200 4.520 57.823 -3.397 1.00 27.54 C ATOM 1281 O ARG A 200 4.397 58.949 -3.851 1.00 27.50 O ATOM 1282 CB ARG A 200 4.933 55.879 -4.899 1.00 30.38 C ATOM 1289 N ALA A 201 3.790 57.365 -2.357 1.00 26.90 N ATOM 1290 CA ALA A 201 2.764 58.200 -1.713 1.00 26.49 C ATOM 1291 C ALA A 201 3.406 59.407 -1.045 1.00 26.59 C ATOM 1292 O ALA A 201 2.866 60.516 -1.082 1.00 26.58 O ATOM 1293 CB ALA A 201 1.959 57.412 -0.715 1.00 25.11 C ATOM 1294 N ARG A 202 4.566 59.205 -0.419 1.00 25.66 N ATOM 1295 CA ARG A 202 5.245 60.296 0.240 1.00 26.93 C ATOM 1296 C ARG A 202 5.676 61.346 -0.767 1.00 26.93 C ATOM 1297 O ARG A 202 5.555 62.541 -0.489 1.00 25.79 O ATOM 1298 CB ARG A 202 6.493 59.779 0.996 1.00 28.25 C ATOM 1305 N ILE A 203 6.154 60.912 -1.931 1.00 26.99 N ATOM 1306 CA ILE A 203 6.611 61.848 -2.965 1.00 27.49 C ATOM 1307 C ILE A 203 5.430 62.674 -3.480 1.00 28.29 C ATOM 1308 O ILE A 203 5.548 63.905 -3.624 1.00 27.82 O ATOM 1309 CB ILE A 203 7.322 61.125 -4.075 1.00 28.09 C ATOM 1313 N SER A 204 4.288 62.025 -3.678 1.00 27.96 N ATOM 1314 CA SER A 204 3.119 62.736 -4.184 1.00 28.04 C ATOM 1315 C SER A 204 2.683 63.793 -3.199 1.00 28.16 C ATOM 1316 O SER A 204 2.311 64.910 -3.605 1.00 28.25 O ATOM 1317 CB SER A 204 1.962 61.780 -4.504 1.00 27.64 C """ pdb_raw_2 = """\ REMARK 3 GEOSTD + MON.LIB. + CDL v1.2 """ + pdb_raw open("tst_molprobity_cdl_1.pdb", "w").write(pdb_raw) open("tst_molprobity_cdl_2.pdb", "w").write(pdb_raw_2) files = ["tst_molprobity_cdl_1.pdb","tst_molprobity_cdl_2.pdb"] rmsds = [0.9019, 0.8769] for file_name, rmsd, cdl_expected in zip(files, rmsds, [False, True]) : result = molprobity.run(args=[file_name, "flags.clashscore=False"], ignore_missing_modules=True, out=null_out()).validation assert approx_equal(result.rms_angles(), rmsd, eps=0.001), rmsd if cdl_expected : out = StringIO() result.show(out=out) assert ("conformation-dependent library" in out.getvalue()) else: out = StringIO() result.show(out=out) assert ("conformation-dependent library" not in out.getvalue())
def exercise_rna () : regression_pdb = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/pdb2goz_refmac_tls.ent", test=op.isfile) if (regression_pdb is None): print "Skipping exercise_regression(): input pdb (pdb2goz_refmac_tls.ent) not available" return result = molprobity.run(args=[regression_pdb], out=null_out()).validation assert (result.rna is not None) out = StringIO() result.show(out=out) assert ("2/58 pucker outliers present" in out.getvalue()) result = loads(dumps(result)) out2 = StringIO() result.show(out=out2) assert (out2.getvalue() == out.getvalue())
def exercise_rna(): regression_pdb = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/pdb2goz_refmac_tls.ent", test=op.isfile) if (regression_pdb is None): print "Skipping exercise_regression(): input pdb (pdb2goz_refmac_tls.ent) not available" return result = molprobity.run(args=[regression_pdb], out=null_out()).validation assert (result.rna is not None) out = StringIO() result.show(out=out) assert ("2/58 pucker outliers present" in out.getvalue()) result = loads(dumps(result)) out2 = StringIO() result.show(out=out2) assert (out2.getvalue() == out.getvalue())
def exercise_01(): pdb_raw = """\ CRYST1 10.000 15.000 10.000 90.00 90.00 90.00 P 1 ATOM 6407 N GLY A 388 -0.783 9.368 -16.436 1.00 51.96 N ATOM 6408 CA GLY A 388 -0.227 9.888 -15.197 1.00 54.04 C ATOM 6409 C GLY A 388 -0.637 11.320 -14.897 1.00 55.86 C ATOM 6410 O GLY A 388 -1.728 11.738 -15.347 1.00 56.70 O ATOM 6411 OXT GLY A 388 0.129 12.024 -14.203 1.00 56.98 O ATOM 6412 D GLY A 388 -0.460 9.727 -17.309 1.00 51.44 D ATOM 6413 HA2 GLY A 388 -0.561 9.258 -14.385 1.00 54.07 H ATOM 6414 HA3 GLY A 388 0.843 9.835 -15.243 1.00 54.13 H TER 6415 GLY A 388 HETATM 6416 D D8U A 401 2.236 5.695 -12.992 1.00 15.23 D HETATM 6417 O DOD A1001 -4.151 4.107 -16.592 1.00 13.40 O HETATM 6418 D1 DOD A1001 -4.760 3.026 -11.326 1.00 15.45 D HETATM 6419 D2 DOD A1001 -4.625 2.741 -13.845 1.00 14.81 D """ random.seed(12345) flex.set_random_seed(12345) pdb_in = iotbx.pdb.hierarchy.input(pdb_string=pdb_raw) xrs = pdb_in.input.xray_structure_simple() pdb_in.hierarchy.atoms().reset_i_seq() open("tst_validate_experimental.pdb", "w").write(pdb_in.hierarchy.as_pdb_string(crystal_symmetry=xrs)) f_calc = abs(xrs.structure_factors(d_min=2.0).f_calc()) f_calc.set_observation_type_xray_amplitude() flags = f_calc.generate_r_free_flags() mtz = f_calc.as_mtz_dataset(column_root_label="F") mtz.add_miller_array(flags, column_root_label="FreeR_flag") mtz.mtz_object().write("tst_validate_experimental.mtz") args = [ "tst_validate_experimental.pdb", "tst_validate_experimental.mtz", ] args.append("flags.clashscore=%s" % libtbx.env.has_module("probe")) result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation assert result.real_space is not None ds = result.data_stats assert (ds.n_free > 0)
def exercise_01 () : pdb_raw = """\ CRYST1 10.000 15.000 10.000 90.00 90.00 90.00 P 1 ATOM 6407 N GLY A 388 -0.783 9.368 -16.436 1.00 51.96 N ATOM 6408 CA GLY A 388 -0.227 9.888 -15.197 1.00 54.04 C ATOM 6409 C GLY A 388 -0.637 11.320 -14.897 1.00 55.86 C ATOM 6410 O GLY A 388 -1.728 11.738 -15.347 1.00 56.70 O ATOM 6411 OXT GLY A 388 0.129 12.024 -14.203 1.00 56.98 O ATOM 6412 D GLY A 388 -0.460 9.727 -17.309 1.00 51.44 D ATOM 6413 HA2 GLY A 388 -0.561 9.258 -14.385 1.00 54.07 H ATOM 6414 HA3 GLY A 388 0.843 9.835 -15.243 1.00 54.13 H TER 6415 GLY A 388 HETATM 6416 D D8U A 401 2.236 5.695 -12.992 1.00 15.23 D HETATM 6417 O DOD A1001 -4.151 4.107 -16.592 1.00 13.40 O HETATM 6418 D1 DOD A1001 -4.760 3.026 -11.326 1.00 15.45 D HETATM 6419 D2 DOD A1001 -4.625 2.741 -13.845 1.00 14.81 D """ random.seed(12345) flex.set_random_seed(12345) pdb_in = iotbx.pdb.hierarchy.input(pdb_string=pdb_raw) xrs = pdb_in.input.xray_structure_simple() pdb_in.hierarchy.atoms().reset_i_seq() open("tst_validate_experimental.pdb", "w").write( pdb_in.hierarchy.as_pdb_string(crystal_symmetry=xrs)) f_calc =abs( xrs.structure_factors(d_min=2.0).f_calc()) f_calc.set_observation_type_xray_amplitude() flags = f_calc.generate_r_free_flags() mtz = f_calc.as_mtz_dataset(column_root_label="F") mtz.add_miller_array(flags, column_root_label="FreeR_flag") mtz.mtz_object().write("tst_validate_experimental.mtz") args = [ "tst_validate_experimental.pdb", "tst_validate_experimental.mtz", ] args.append("flags.clashscore=%s" % libtbx.env.has_module("probe")) result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation assert result.real_space is not None ds = result.data_stats assert (ds.n_free > 0)
def runMolprobity(args, out=sys.stdout): import sys, re from mmtbx.command_line import molprobity molprobity.run(args, out=out)
def exercise_protein () : pdb_file = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/3ifk.pdb", test=op.isfile) hkl_file = libtbx.env.find_in_repositories( relative_path="phenix_regression/reflection_files/3ifk.mtz", test=op.isfile) if (pdb_file is None) : print "phenix_regression not available, skipping." return args1 = [ pdb_file, "outliers_only=True", "output.prefix=tst_molprobity", "--pickle", "flags.xtriage=True", ] result = molprobity.run(args=args1, out=null_out()).validation out1 = StringIO() result.show(out=out1) result = loads(dumps(result)) out2 = StringIO() result.show(out=out2) assert (result.nqh_flips.n_outliers == 1) assert (not "RNA validation" in out2.getvalue()) assert (out2.getvalue() == out1.getvalue()) dump("tst_molprobity.pkl", result) mc = result.as_multi_criterion_view() assert (result.neutron_stats is None) mpscore = result.molprobity_score() # percentiles out4 = StringIO() result.show_summary(out=out4, show_percentiles=True) assert (""" Clashscore = 49.96 (percentile: 0.2)""" in out4.getvalue()) # misc assert approx_equal(result.r_work(), 0.237) # from PDB header assert approx_equal(result.r_free(), 0.293) # from PDB header assert approx_equal(result.d_min(), 2.03) # from PDB header assert (result.d_max_min() is None) assert approx_equal(result.rms_bonds(), 0.02585) assert approx_equal(result.rms_angles(), 2.356740) assert approx_equal(result.rama_favored(), 96.47059) assert (result.cbeta_outliers() == 10) assert approx_equal(result.molprobity_score(), 3.40, eps=0.01) summary = result.summarize() gui_fields = list(summary.iter_molprobity_gui_fields()) assert (len(gui_fields) == 6) #result.show() assert (str(mc.data()[2]) == ' A 5 THR rota,cb,clash') import mmtbx.validation.molprobity from iotbx import file_reader pdb_in = file_reader.any_file(pdb_file) hierarchy = pdb_in.file_object.hierarchy flags = mmtbx.validation.molprobity.molprobity_flags() flags.clashscore = False flags.model_stats = False flags.cbetadev = False result = mmtbx.validation.molprobity.molprobity( pdb_hierarchy=hierarchy, flags=flags) out3 = StringIO() result.show_summary(out=out3) assert not show_diff(out3.getvalue(), """\ Ramachandran outliers = 1.76 % favored = 96.47 % Rotamer outliers = 20.00 % """) # now with data args2 = args1 + [ hkl_file, "--maps" ] result, cmdline = molprobity.run(args=args2, out=null_out(), return_input_objects=True) out = StringIO() result.show(out=out) stats = result.get_statistics_for_phenix_gui() #print stats stats = result.get_polygon_statistics(["r_work","r_free","adp_mean_all", "angle_rmsd", "bond_rmsd", "clashscore"]) #print stats assert approx_equal(result.r_work(), 0.2276, eps=0.001) assert approx_equal(result.r_free(), 0.2805, eps=0.001) assert approx_equal(result.d_min(), 2.0302, eps=0.0001) assert approx_equal(result.d_max_min(), [34.546125, 2.0302], eps=0.0001) assert approx_equal(result.rms_bonds(), 0.02585) assert approx_equal(result.rms_angles(), 2.356740) assert approx_equal(result.rama_favored(), 96.47059) assert (result.cbeta_outliers() == 10) assert approx_equal(result.unit_cell().parameters(), (55.285, 58.851, 67.115,90,90,90)) assert (str(result.space_group_info()) == "P 21 21 21") bins = result.fmodel_statistics_by_resolution() assert (len(bins) == 10) assert approx_equal(result.atoms_to_observations_ratio(), 0.09755, eps=0.0001) assert approx_equal(result.b_iso_mean(), 31.11739) assert op.isfile("tst_molprobity_maps.mtz") assert approx_equal(result.atoms_to_observations_ratio(), 0.0975493) bins = result.fmodel_statistics_by_resolution() #bins.show() bin_plot = result.fmodel_statistics_graph_data() lg = bin_plot.format_loggraph() # fake fmodel_neutron fmodel_neutron = cmdline.fmodel.deep_copy() result2 = mmtbx.validation.molprobity.molprobity( pdb_hierarchy=cmdline.pdb_hierarchy, fmodel=cmdline.fmodel, fmodel_neutron=fmodel_neutron, geometry_restraints_manager=cmdline.geometry, nuclear=True, keep_hydrogens=True) stats = result2.get_statistics_for_phenix_gui() assert ('R-work (neutron)' in [ label for (label, stat) in stats ])
def exercise_synthetic () : from mmtbx.regression import tst_build_alt_confs pdb_in = iotbx.pdb.hierarchy.input(pdb_string=tst_build_alt_confs.pdb_raw) xrs = pdb_in.input.xray_structure_simple() fc = abs(xrs.structure_factors(d_min=1.5).f_calc()) flags = fc.resolution_filter(d_min=1.6).generate_r_free_flags() ls = fc.lone_set(other=flags) # case 1: no work set in high-res shell flags2 = ls.array(data=flex.bool(ls.size(), True)) flags_all = flags.concatenate(other=flags2) mtz_out = fc.as_mtz_dataset(column_root_label="F") mtz_out.add_miller_array(flags_all, column_root_label="FreeR_flag") mtz_out.mtz_object().write("tst_molprobity_1.mtz") open("tst_molprobity_1.pdb", "w").write(tst_build_alt_confs.pdb_raw) args = [ "tst_molprobity_1.pdb", "tst_molprobity_1.mtz", "--kinemage", "--maps", "flags.clashscore=False", "flags.xtriage=True", ] result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation out = StringIO() result.show(out=out) # case 2: no test set in high-res shell flags2 = ls.array(data=flex.bool(ls.size(), False)) flags_all = flags.concatenate(other=flags2) mtz_out = fc.as_mtz_dataset(column_root_label="F") mtz_out.add_miller_array(flags_all, column_root_label="FreeR_flag") result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation out = StringIO() result.show(out=out) # case 3: multi-MODEL structure # XXX This is not a very sophisticated test - it only ensures that the # program does not crash. We need a test for expected output... hierarchy = pdb_in.hierarchy model2 = hierarchy.only_model().detached_copy() hierarchy.append_model(model2) hierarchy.models()[0].id = "1" hierarchy.models()[1].id = "2" open("tst_molprobity_multi_model.pdb", "w").write(hierarchy.as_pdb_string()) args = [ "tst_molprobity_multi_model.pdb", "tst_molprobity_1.mtz", "--kinemage", "--maps", "flags.clashscore=False", ] result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation out = StringIO() result.show(out=out) # test rotamer distributions open("tst_molprobity_misc1.pdb", "w").write(tst_build_alt_confs.pdb_raw) args = [ "tst_molprobity_1.pdb", "rotamer_library=8000", "outliers_only=False", "flags.clashscore=False", ] out = StringIO() result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation result.show(outliers_only=False, out=out) assert (""" A 7 TYR m-80 93.10 299.6,92.0""" in out.getvalue()), out.getvalue()
def exercise_protein(): pdb_file = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/3ifk.pdb", test=op.isfile) hkl_file = libtbx.env.find_in_repositories( relative_path="phenix_regression/reflection_files/3ifk.mtz", test=op.isfile) if (pdb_file is None): print "phenix_regression not available, skipping." return args1 = [ pdb_file, "outliers_only=True", "output.prefix=tst_molprobity", "--pickle", "flags.xtriage=True", ] result = molprobity.run(args=args1, out=null_out()).validation out1 = StringIO() result.show(out=out1) result = loads(dumps(result)) out2 = StringIO() result.show(out=out2) assert (result.nqh_flips.n_outliers == 6) assert (not "RNA validation" in out2.getvalue()) assert (out2.getvalue() == out1.getvalue()) dump("tst_molprobity.pkl", result) mc = result.as_multi_criterion_view() assert (result.neutron_stats is None) mpscore = result.molprobity_score() # percentiles out4 = StringIO() result.show_summary(out=out4, show_percentiles=True) assert (""" Clashscore = 49.59""" in out4.getvalue()), out4.getvalue() # misc assert approx_equal(result.r_work(), 0.237) # from PDB header assert approx_equal(result.r_free(), 0.293) # from PDB header assert approx_equal(result.d_min(), 2.03) # from PDB header assert (result.d_max_min() is None) assert approx_equal(result.rms_bonds(), 0.02585) assert approx_equal(result.rms_angles(), 2.356740) assert approx_equal(result.rama_favored(), 96.47059) assert (result.cbeta_outliers() == 10) assert approx_equal(result.molprobity_score(), 3.39, eps=0.01) summary = result.summarize() gui_fields = list(summary.iter_molprobity_gui_fields()) assert (len(gui_fields) == 6) #result.show() assert (str(mc.data()[2]) == ' A 5 THR rota,cb,clash') import mmtbx.validation.molprobity from iotbx import file_reader pdb_in = file_reader.any_file(pdb_file) model = mmtbx.model.manager(pdb_in.file_object.input) result = mmtbx.validation.molprobity.molprobity(model) out3 = StringIO() result.show_summary(out=out3) assert """\ Ramachandran outliers = 1.76 % favored = 96.47 % Rotamer outliers = 20.00 % """ in out3.getvalue() # now with data args2 = args1 + [hkl_file, "--maps"] result, cmdline = molprobity.run(args=args2, out=null_out(), return_input_objects=True) out = StringIO() result.show(out=out) stats = result.get_statistics_for_phenix_gui() #print stats stats = result.get_polygon_statistics([ "r_work", "r_free", "adp_mean_all", "angle_rmsd", "bond_rmsd", "clashscore" ]) #print stats assert approx_equal(result.r_work(), 0.2276, eps=0.001) assert approx_equal(result.r_free(), 0.2805, eps=0.001) assert approx_equal(result.d_min(), 2.0302, eps=0.0001) assert approx_equal(result.d_max_min(), [34.546125, 2.0302], eps=0.0001) assert approx_equal(result.rms_bonds(), 0.02585) assert approx_equal(result.rms_angles(), 2.356740) assert approx_equal(result.rama_favored(), 96.47059) assert (result.cbeta_outliers() == 10) assert approx_equal(result.unit_cell().parameters(), (55.285, 58.851, 67.115, 90, 90, 90)) assert (str(result.space_group_info()) == "P 21 21 21") bins = result.fmodel_statistics_by_resolution() assert (len(bins) == 10) assert approx_equal(result.atoms_to_observations_ratio(), 0.09755, eps=0.0001) assert approx_equal(result.b_iso_mean(), 31.11739) assert op.isfile("tst_molprobity_maps.mtz") bins = result.fmodel_statistics_by_resolution() #bins.show() bin_plot = result.fmodel_statistics_graph_data() lg = bin_plot.format_loggraph() # fake fmodel_neutron fmodel_neutron = cmdline.fmodel.deep_copy() result2 = mmtbx.validation.molprobity.molprobity( cmdline.model, fmodel=cmdline.fmodel, fmodel_neutron=fmodel_neutron, nuclear=True, keep_hydrogens=True) stats = result2.get_statistics_for_phenix_gui() assert ('R-work (neutron)' in [label for (label, stat) in stats])
def exercise_synthetic () : from mmtbx.regression import tst_build_alt_confs pdb_in = iotbx.pdb.hierarchy.input(pdb_string=tst_build_alt_confs.pdb_raw) xrs = pdb_in.input.xray_structure_simple() fc = abs(xrs.structure_factors(d_min=1.5).f_calc()) flags = fc.resolution_filter(d_min=1.6).generate_r_free_flags() ls = fc.lone_set(other=flags) # case 1: no work set in high-res shell flags2 = ls.array(data=flex.bool(ls.size(), True)) flags_all = flags.concatenate(other=flags2) mtz_out = fc.as_mtz_dataset(column_root_label="F") mtz_out.add_miller_array(flags_all, column_root_label="FreeR_flag") mtz_out.mtz_object().write("tst_molprobity_1.mtz") open("tst_molprobity_1.pdb", "w").write(tst_build_alt_confs.pdb_raw) args = [ "tst_molprobity_1.pdb", "tst_molprobity_1.mtz", "--kinemage", "--maps", "flags.clashscore=False", "flags.xtriage=True", ] result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation out = StringIO() result.show(out=out) # case 2: no test set in high-res shell flags2 = ls.array(data=flex.bool(ls.size(), False)) flags_all = flags.concatenate(other=flags2) mtz_out = fc.as_mtz_dataset(column_root_label="F") mtz_out.add_miller_array(flags_all, column_root_label="FreeR_flag") result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation out = StringIO() result.show(out=out) # case 3: multi-MODEL structure # XXX This is not a very sophisticated test - it only ensures that the # program does not crash. We need a test for expected output... hierarchy = pdb_in.hierarchy model2 = hierarchy.only_model().detached_copy() hierarchy.append_model(model2) hierarchy.models()[0].id = "1" hierarchy.models()[1].id = "2" open("tst_molprobity_multi_model.pdb", "w").write(hierarchy.as_pdb_string()) args = [ "tst_molprobity_multi_model.pdb", "tst_molprobity_1.mtz", "--kinemage", "--maps", ] result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation out = StringIO() result.show(out=out) # test rotamer distributions open("tst_molprobity_misc1.pdb", "w").write(tst_build_alt_confs.pdb_raw) args = [ "tst_molprobity_1.pdb", "rotamer_library=8000", ] out = StringIO() result = molprobity.run(args=args, ignore_missing_modules=True, out=null_out()).validation result.show(outliers_only=False, out=out)