Example #1
0
def test_model_datatype():
    import mmtbx.monomer_library.server
    try:
        mon_lib_srv = mmtbx.monomer_library.server.server()
    except mmtbx.monomer_library.server.MonomerLibraryServerError:
        print(
            "Can not initialize monomer_library, skipping test_model_datatype."
        )
        return

    # 1yjp
    model_str = '''
CRYST1   21.937    4.866   23.477  90.00 107.08  90.00 P 1 21 1      2
ORIGX1      1.000000  0.000000  0.000000        0.00000
ORIGX2      0.000000  1.000000  0.000000        0.00000
ORIGX3      0.000000  0.000000  1.000000        0.00000
SCALE1      0.045585  0.000000  0.014006        0.00000
SCALE2      0.000000  0.205508  0.000000        0.00000
SCALE3      0.000000  0.000000  0.044560        0.00000
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      238    0    0    0    0    0    0    6   66    1    0    1
END
'''

    # test reading/writing PDB
    test_filename = 'test_model.pdb'
    test_output_filename = 'test_model_output.pdb'
    test_eff = 'model.eff'
    dm = DataManager(['model'])
    dm.process_model_str(test_filename, model_str)
    dm.write_model_file(model_str,
                        filename=test_output_filename,
                        overwrite=True)
    m = dm.get_model(test_output_filename)
    assert test_output_filename in dm.get_model_names()
    dm.write_model_file(m, overwrite=True)
    pdb_filename = 'cctbx_program.pdb'
    assert os.path.exists(pdb_filename)
    dm.process_model_file(pdb_filename)
    assert not dm.get_model(pdb_filename).input_model_format_cif()
    dm.write_model_file(m, test_filename, overwrite=True)

    # test reading PDB writing CIF
    test_filename = 'test_model.pdb'
    test_output_filename = 'test_model.cif'
    dm = DataManager(['model'])
    dm.process_model_str(test_filename, model_str)
    m = dm.get_model(test_filename)
    dm.write_model_file(m,
                        filename=test_output_filename,
                        format='cif',
                        overwrite=True)
    m = dm.get_model(test_output_filename)
    assert test_output_filename in dm.get_model_names()
    dm.write_model_file(m, overwrite=True)
    cif_filename = 'cctbx_program.cif'
    assert os.path.exists(cif_filename)
    dm.process_model_file(cif_filename)
    assert dm.get_model(cif_filename).input_model_format_cif()

    # test type
    assert dm.get_model_type() == 'x_ray'
    dm.set_model_type(test_filename, 'neutron')
    assert dm.get_model_type() == 'neutron'
    phil_scope = dm.export_phil_scope()
    extract = phil_scope.extract()
    assert extract.data_manager.model[0].type == 'neutron'
    with open(test_eff, 'w') as f:
        f.write(phil_scope.as_str())
    new_phil_scope = iotbx.phil.parse(file_name=test_eff)
    new_dm = DataManager(['model'])
    new_dm.load_phil_scope(new_phil_scope)
    assert new_dm.get_model_type(test_filename) == 'neutron'
    new_dm = DataManager(['model'])
    try:
        new_dm.set_default_model_type('nonsense')
    except Sorry:
        pass
    new_dm.set_default_model_type('electron')
    new_dm.process_model_file(test_filename)
    assert new_dm.get_model_type() == 'electron'
    assert len(new_dm.get_model_names()) == 1
    assert len(new_dm.get_model_names(model_type='electron')) == 1
    assert len(new_dm.get_model_names(model_type='neutron')) == 0

    os.remove(test_eff)
    os.remove(test_filename)

    # test reading/writing CIF
    test_filename = 'test_model_datatype.cif'
    dm.write_model_file(dm.get_model().model_as_mmcif(),
                        filename=test_filename,
                        overwrite=True)
    dm.process_model_file(test_filename)
    os.remove(test_filename)
    assert test_filename in dm.get_model_names()
    m = dm.get_model(test_filename)
    dm.write_model_file(m, overwrite=True)
    cif_filename = 'cctbx_program.cif'
    assert os.path.exists(cif_filename)
    dm.process_model_file(cif_filename)
    assert dm.get_model(cif_filename).input_model_format_cif()
    os.remove(pdb_filename)
    os.remove(cif_filename)

    # test pdb_interpretation
    extract = mmtbx.model.manager.get_default_pdb_interpretation_params()
    extract.pdb_interpretation.use_neutron_distances = True
    dm.update_pdb_interpretation_for_model(test_filename, extract)
    assert dm.get_model(test_filename).restraints_manager is None
Example #2
0
def test_data_manager():
    a = DataManager(['model'])

    a.add_model('a', 'b')
    a.add_model('c', 'd')
    assert a.get_model() == 'b'
    assert a.get_model('a') == 'b'
    assert a.get_model('c') == 'd'
    assert a.get_model_names() == ['a', 'c']

    assert a.has_models()
    assert a.has_models(exact_count=True, expected_n=2)
    assert not a.has_models(expected_n=3, raise_sorry=False)

    # exporting phil
    working_phil = a.export_phil_scope()
    assert len(working_phil.extract().data_manager.model) == 2

    # data tracking
    try:
        a.has_models(expected_n=3, raise_sorry=True)
    except Sorry:
        pass

    try:
        a.has_models(exact_count=True, raise_sorry=True)
    except Sorry:
        pass

    a.set_default_model('c')
    assert a.get_model() == 'd'

    assert a.get_model_names() == ['a', 'c'
                                   ] or a.get_model_names() == ['c', 'a']

    a.remove_model('c')
    try:
        a.get_model()
    except Sorry:
        pass
    try:
        a.get_model('missing')
    except Sorry:
        pass
    try:
        a.set_default_model('missing')
    except Sorry:
        pass

    a = DataManager(datatypes=['sequence', 'phil'])
    assert a.get_sequence_names() == []
    assert not hasattr(a, 'get_model')

    # phil functions
    test_phil_str = '''
data_manager {
  phil_files = data_manager_test.eff
}
'''
    with open('data_manager_test.eff', 'w') as f:
        f.write(test_phil_str)

    # loading file with get function
    assert len(a.get_phil_names()) == 0
    p = a.get_phil('data_manager_test.eff')
    assert type(p) == libtbx.phil.scope
    assert 'data_manager_test.eff' in a.get_phil_names()

    # loading file with phil
    a = DataManager(datatypes=['phil'])
    test_phil = iotbx.phil.parse(test_phil_str)
    a.load_phil_scope(test_phil)

    assert 'data_manager_test.eff' in a.get_phil_names()
    assert a.get_default_phil_name() == 'data_manager_test.eff'

    os.remove('data_manager_test.eff')

    # writing
    a = DataManager(datatypes=['model', 'phil', 'sequence'])
    a.add_model('a', 'b')
    a.add_phil('c', 'd')
    a.add_sequence('e', 'f')

    a.write_model_file(a.get_model(), filename='a.dat', overwrite=True)
    a.write_phil_file(a.get_phil(), filename='c.dat', overwrite=True)
    a.write_sequence_file(a.get_sequence(), filename='e.dat', overwrite=True)

    with open('a.dat', 'r') as f:
        lines = f.readlines()
    assert lines[0] == 'b'

    os.remove('a.dat')
    os.remove('c.dat')
    os.remove('e.dat')
Example #3
0
def test_model_datatype():

    # 1yjp
    model_str = '''
CRYST1   21.937    4.866   23.477  90.00 107.08  90.00 P 1 21 1      2
ORIGX1      1.000000  0.000000  0.000000        0.00000
ORIGX2      0.000000  1.000000  0.000000        0.00000
ORIGX3      0.000000  0.000000  1.000000        0.00000
SCALE1      0.045585  0.000000  0.014006        0.00000
SCALE2      0.000000  0.205508  0.000000        0.00000
SCALE3      0.000000  0.000000  0.044560        0.00000
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      238    0    0    0    0    0    0    6   66    1    0    1
END
'''

    dm = DataManager(['model'])
    dm.process_model_str('test', model_str)
    assert ('test' in dm.get_model_names())

    test_filename = 'test_model_datatype.cif'
    dm.write_model_file(test_filename,
                        dm.get_model().model_as_mmcif(),
                        overwrite=True)
    dm.process_model_file(test_filename)
    os.remove(test_filename)
    assert (test_filename in dm.get_model_names())

    extract = mmtbx.model.manager.get_default_pdb_interpretation_params()
    extract.pdb_interpretation.use_neutron_distances = True
    dm.update_pdb_interpretation_for_model('test', extract)
    assert (dm.get_model().restraints_manager is None)