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
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')
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)