コード例 #1
0
ファイル: tst_molprobity_4.py プロジェクト: dials/cctbx
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])
コード例 #2
0
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())
コード例 #3
0
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())
コード例 #4
0
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())
コード例 #5
0
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())
コード例 #6
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)
コード例 #7
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)
コード例 #8
0
ファイル: analysis.py プロジェクト: hskaushik/trialPipeline
def runMolprobity(args, out=sys.stdout):
    import sys, re
    from mmtbx.command_line import molprobity
    molprobity.run(args, out=out)
コード例 #9
0
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 ])
コード例 #10
0
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()
コード例 #11
0
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])
コード例 #12
0
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)