def test_software_dumper(self): """Test SoftwareDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) IMP.core.add_imp_provenance(h) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") dumper = ihm.dumper._SoftwareDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) # Ignore line breaks, since these will be placed differently depending # on how long the version number is self.assertEqual(out.replace('\n', ' '), ("""# loop_ _software.pdbx_ordinal _software.name _software.classification _software.description _software.version _software.type _software.location 1 'Integrative Modeling Platform (IMP)' 'integrative model building' . %s program https://integrativemodeling.org # """ % IMP.get_module_version()).replace('\n', ' '))
def test_ensemble_info(self): """Test EnsembleDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) e = IMP.mmcif.Ensemble(state, "cluster 1") e.add_model([h], [], "model1") dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) dumper = ihm.dumper._EnsembleDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual( out, """# loop_ _ihm_ensemble_info.ensemble_id _ihm_ensemble_info.ensemble_name _ihm_ensemble_info.post_process_id _ihm_ensemble_info.model_group_id _ihm_ensemble_info.ensemble_clustering_method _ihm_ensemble_info.ensemble_clustering_feature _ihm_ensemble_info.num_ensemble_models _ihm_ensemble_info.num_ensemble_models_deposited _ihm_ensemble_info.ensemble_precision_value _ihm_ensemble_info.ensemble_file_id 1 'cluster 1' . 1 . . 1 1 . . # """)
def test_ensemble_info(self): """Test EnsembleDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) e = IMP.mmcif.Ensemble(state, "cluster 1") e.add_model([h], [], "model1") dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) dumper = ihm.dumper._EnsembleDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual(out, """# loop_ _ihm_ensemble_info.ensemble_id _ihm_ensemble_info.ensemble_name _ihm_ensemble_info.post_process_id _ihm_ensemble_info.model_group_id _ihm_ensemble_info.ensemble_clustering_method _ihm_ensemble_info.ensemble_clustering_feature _ihm_ensemble_info.num_ensemble_models _ihm_ensemble_info.num_ensemble_models_deposited _ihm_ensemble_info.ensemble_precision_value _ihm_ensemble_info.ensemble_file_id 1 'cluster 1' . 1 . . 1 1 . . # """)
def test_modeling_protocol(self): """Test ProtocolDumper""" system = IMP.mmcif.System() h, state = self.make_model_with_protocol(system) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) # Assign assembly IDs dumper = ihm.dumper._ProtocolDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual( out, """# loop_ _ihm_modeling_protocol.id _ihm_modeling_protocol.protocol_name _ihm_modeling_protocol.num_steps 1 . 1 2 . 1 # # loop_ _ihm_modeling_protocol_details.id _ihm_modeling_protocol_details.protocol_id _ihm_modeling_protocol_details.step_id _ihm_modeling_protocol_details.struct_assembly_id _ihm_modeling_protocol_details.dataset_group_id _ihm_modeling_protocol_details.struct_assembly_description _ihm_modeling_protocol_details.step_name _ihm_modeling_protocol_details.step_method _ihm_modeling_protocol_details.num_models_begin _ihm_modeling_protocol_details.num_models_end _ihm_modeling_protocol_details.multi_scale_flag _ihm_modeling_protocol_details.multi_state_flag _ihm_modeling_protocol_details.ordered_flag _ihm_modeling_protocol_details.software_id _ihm_modeling_protocol_details.script_file_id _ihm_modeling_protocol_details.description 1 1 1 2 . 'All components modeled by IMP' Sampling 'Monte Carlo' 0 500 YES NO NO . . . 2 2 1 2 . 'All components modeled by IMP' Sampling 'Replica exchange Molecular Dynamics' 400 2000 YES NO NO . . . # """)
def test_em3d_dumper(self): """Test EM3DDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) em_filename = self.get_input_file_name('test.gmm.txt') r = MockGaussianEMRestraint(state.model, em_filename) r.set_was_used(True) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [r], "model1") # Assign dataset ID (=2 since the gmm is derived from an MRC) self._assign_dataset_ids(system) self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._EM3DDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual( out, """# loop_ _ihm_3dem_restraint.ordinal_id _ihm_3dem_restraint.dataset_list_id _ihm_3dem_restraint.fitting_method _ihm_3dem_restraint.fitting_method_citation_id _ihm_3dem_restraint.struct_assembly_id _ihm_3dem_restraint.number_of_gaussians _ihm_3dem_restraint.model_id _ihm_3dem_restraint.cross_correlation_coefficient 1 2 'Gaussian mixture model' . 1 20 1 0.400 # """)
def test_model_list(self): """Test ModelListDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) e = IMP.mmcif.Ensemble(state, "cluster 1") e.add_model([h], [], "model1") e.add_model([h], [], "model2") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._ModelRepresentationDumper() dumper.finalize(system.system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual( out, """# loop_ _ihm_model_list.ordinal_id _ihm_model_list.model_id _ihm_model_list.model_group_id _ihm_model_list.model_name _ihm_model_list.model_group_name _ihm_model_list.assembly_id _ihm_model_list.protocol_id _ihm_model_list.representation_id 1 1 1 model1 'cluster 1' 1 . 1 2 2 1 model2 'cluster 1' 1 . 1 # """)
def test_post_process(self): """Test PostProcessDumper""" system = IMP.mmcif.System() h, state = self.make_model_with_protocol(system) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._ProtocolDumper() dumper.finalize(system.system) dumper = ihm.dumper._PostProcessDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual( out, """# loop_ _ihm_modeling_post_process.id _ihm_modeling_post_process.protocol_id _ihm_modeling_post_process.analysis_id _ihm_modeling_post_process.step_id _ihm_modeling_post_process.type _ihm_modeling_post_process.feature _ihm_modeling_post_process.num_models_begin _ihm_modeling_post_process.num_models_end _ihm_modeling_post_process.struct_assembly_id _ihm_modeling_post_process.dataset_group_id _ihm_modeling_post_process.software_id _ihm_modeling_post_process.script_file_id 1 1 1 1 filter energy/score 500 400 1 . . . 2 2 1 1 cluster RMSD 2000 2000 1 . . . # """)
def test_em3d_dumper(self): """Test EM3DDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) em_filename = self.get_input_file_name('test.gmm.txt') r = MockGaussianEMRestraint(state.model, em_filename) r.set_was_used(True) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [r], "model1") # Assign dataset ID (=2 since the gmm is derived from an MRC) self._assign_dataset_ids(system) self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._EM3DDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual(out, """# loop_ _ihm_3dem_restraint.ordinal_id _ihm_3dem_restraint.dataset_list_id _ihm_3dem_restraint.fitting_method _ihm_3dem_restraint.fitting_method_citation_id _ihm_3dem_restraint.struct_assembly_id _ihm_3dem_restraint.number_of_gaussians _ihm_3dem_restraint.model_id _ihm_3dem_restraint.cross_correlation_coefficient 1 2 'Gaussian mixture model' . 1 20 1 0.400 # """)
def test_model_list(self): """Test ModelListDumper""" system = IMP.mmcif.System() h, state = self.make_model(system) e = IMP.mmcif.Ensemble(state, "cluster 1") e.add_model([h], [], "model1") e.add_model([h], [], "model2") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._ModelRepresentationDumper() dumper.finalize(system.system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual(out, """# loop_ _ihm_model_list.ordinal_id _ihm_model_list.model_id _ihm_model_list.model_group_id _ihm_model_list.model_name _ihm_model_list.model_group_name _ihm_model_list.assembly_id _ihm_model_list.protocol_id _ihm_model_list.representation_id 1 1 1 model1 'cluster 1' 1 . 1 2 2 1 model2 'cluster 1' 1 . 1 # """)
def test_post_process(self): """Test PostProcessDumper""" system = IMP.mmcif.System() h, state = self.make_model_with_protocol(system) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._ProtocolDumper() dumper.finalize(system.system) dumper = ihm.dumper._PostProcessDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual(out, """# loop_ _ihm_modeling_post_process.id _ihm_modeling_post_process.protocol_id _ihm_modeling_post_process.analysis_id _ihm_modeling_post_process.step_id _ihm_modeling_post_process.type _ihm_modeling_post_process.feature _ihm_modeling_post_process.num_models_begin _ihm_modeling_post_process.num_models_end _ihm_modeling_post_process.struct_assembly_id _ihm_modeling_post_process.dataset_group_id _ihm_modeling_post_process.software_id _ihm_modeling_post_process.script_file_id 1 1 1 1 filter energy/score 500 400 1 . . . 2 2 1 1 cluster RMSD 2000 2000 1 . . . # """)
def test_modeling_protocol(self): """Test ProtocolDumper""" system = IMP.mmcif.System() h, state = self.make_model_with_protocol(system) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) # Assign assembly IDs dumper = ihm.dumper._ProtocolDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual(out, """# loop_ _ihm_modeling_protocol.ordinal_id _ihm_modeling_protocol.protocol_id _ihm_modeling_protocol.step_id _ihm_modeling_protocol.struct_assembly_id _ihm_modeling_protocol.dataset_group_id _ihm_modeling_protocol.struct_assembly_description _ihm_modeling_protocol.protocol_name _ihm_modeling_protocol.step_name _ihm_modeling_protocol.step_method _ihm_modeling_protocol.num_models_begin _ihm_modeling_protocol.num_models_end _ihm_modeling_protocol.multi_scale_flag _ihm_modeling_protocol.multi_state_flag _ihm_modeling_protocol.ordered_flag _ihm_modeling_protocol.software_id _ihm_modeling_protocol.script_file_id 1 1 1 1 . 'All known components & All components modeled by IMP' . Sampling 'Monte Carlo' 0 500 YES NO NO . . 2 2 1 1 . 'All known components & All components modeled by IMP' . Sampling 'Replica exchange Molecular Dynamics' 400 2000 YES NO NO . . # """)
def test_site_dumper_spheres_only(self): """Test SiteDumper, spheres only""" system = IMP.mmcif.System() h, state = self.make_model(system, [("foo", "A", 'A'), ("bar", "AA", "B")]) m = state.model # Add coordinates chains = IMP.atom.get_by_type(h, IMP.atom.CHAIN_TYPE) pres = IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) res = IMP.atom.Residue.setup_particle(pres, IMP.atom.ALA, 1) xyzr = IMP.core.XYZR.setup_particle(pres) xyzr.set_coordinates(IMP.algebra.Vector3D(1, 2, 3)) xyzr.set_radius(4.2) chains[0].add_child(pres) pfrag = IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) frag = IMP.atom.Fragment.setup_particle(pfrag, [1, 2]) xyzr = IMP.core.XYZR.setup_particle(pfrag) xyzr.set_coordinates(IMP.algebra.Vector3D(4, 5, 6)) xyzr.set_radius(9.2) chains[1].add_child(pfrag) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._ModelRepresentationDumper() dumper.finalize(system.system) dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual( out, """# loop_ _ihm_model_list.ordinal_id _ihm_model_list.model_id _ihm_model_list.model_group_id _ihm_model_list.model_name _ihm_model_list.model_group_name _ihm_model_list.assembly_id _ihm_model_list.protocol_id _ihm_model_list.representation_id 1 1 1 model1 'cluster 1' 1 . 1 # # loop_ _ihm_sphere_obj_site.ordinal_id _ihm_sphere_obj_site.entity_id _ihm_sphere_obj_site.seq_id_begin _ihm_sphere_obj_site.seq_id_end _ihm_sphere_obj_site.asym_id _ihm_sphere_obj_site.Cartn_x _ihm_sphere_obj_site.Cartn_y _ihm_sphere_obj_site.Cartn_z _ihm_sphere_obj_site.object_radius _ihm_sphere_obj_site.rmsf _ihm_sphere_obj_site.model_id 1 1 1 1 A 1.000 2.000 3.000 4.200 . 1 2 2 1 2 B 4.000 5.000 6.000 9.200 . 1 # """)
def test_site_dumper_spheres_only(self): """Test SiteDumper, spheres only""" system = IMP.mmcif.System() h, state = self.make_model(system, [("foo", "A", 'A'), ("bar", "AA", "B")]) m = state.model # Add coordinates chains = IMP.atom.get_by_type(h, IMP.atom.CHAIN_TYPE) pres = IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) res = IMP.atom.Residue.setup_particle(pres, IMP.atom.ALA, 1) xyzr = IMP.core.XYZR.setup_particle(pres) xyzr.set_coordinates(IMP.algebra.Vector3D(1,2,3)) xyzr.set_radius(4.2) chains[0].add_child(pres) pfrag = IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) frag = IMP.atom.Fragment.setup_particle(pfrag, [1,2]) xyzr = IMP.core.XYZR.setup_particle(pfrag) xyzr.set_coordinates(IMP.algebra.Vector3D(4,5,6)) xyzr.set_radius(9.2) chains[1].add_child(pfrag) IMP.mmcif.Ensemble(state, "cluster 1").add_model([h], [], "model1") self._assign_entity_ids(system) self._assign_asym_ids(system) dumper = ihm.dumper._AssemblyDumper() dumper.finalize(system.system) dumper = ihm.dumper._ModelRepresentationDumper() dumper.finalize(system.system) dumper = ihm.dumper._ModelDumper() dumper.finalize(system.system) out = _get_dumper_output(dumper, system.system) self.assertEqual(out, """# loop_ _ihm_model_list.ordinal_id _ihm_model_list.model_id _ihm_model_list.model_group_id _ihm_model_list.model_name _ihm_model_list.model_group_name _ihm_model_list.assembly_id _ihm_model_list.protocol_id _ihm_model_list.representation_id 1 1 1 model1 'cluster 1' 1 . 1 # # loop_ _ihm_sphere_obj_site.ordinal_id _ihm_sphere_obj_site.entity_id _ihm_sphere_obj_site.seq_id_begin _ihm_sphere_obj_site.seq_id_end _ihm_sphere_obj_site.asym_id _ihm_sphere_obj_site.Cartn_x _ihm_sphere_obj_site.Cartn_y _ihm_sphere_obj_site.Cartn_z _ihm_sphere_obj_site.object_radius _ihm_sphere_obj_site.rmsf _ihm_sphere_obj_site.model_id 1 1 1 1 A 1.000 2.000 3.000 4.200 . 1 2 2 1 2 B 4.000 5.000 6.000 9.200 . 1 # """)