def test_perturbed(self): """Test reading and writing particles""" m= IMP.Model() p0= IMP.Particle(m) p1= IMP.Particle(m) ik= IMP.IntKey("hi int") fk= IMP.FloatKey("hi float") p0.add_attribute(ik, 1) p1.add_attribute(fk, 2.0) p1.add_attribute(ik, 3) name= self.get_tmp_file_name("particles.rmf") rmf= RMF.create_rmf_file(name) IMP.set_log_level(IMP.VERBOSE) IMP.rmf.add_particles(rmf, [p0, p1]) IMP.rmf.save_frame(rmf, 0) IMP.set_log_level(IMP.MEMORY) onames= RMF.get_open_hdf5_handle_names() print "before", onames del rmf IMP.set_log_level(IMP.VERBOSE) onames= RMF.get_open_hdf5_handle_names() print "closed", onames self.assertEqual(len(onames), 0) rmf= RMF.open_rmf_file_read_only(name) bps= IMP.rmf.create_particles(rmf, m) #IMP.rmf.load_frame(0) self.assertEqual(len(bps), 2) self.assertTrue(bps[0].has_attribute(ik)) self.assertEqual(bps[0].get_value(ik), 1); self.assertTrue(bps[1].has_attribute(ik)) self.assertEqual(bps[1].get_value(ik), 3); self.assertTrue(bps[1].has_attribute(fk)) self.assertEqual(bps[1].get_value(fk), 2.0);
def test_part1(self): """Test round trip 1""" m= IMP.Model() print "reading pdb" h= IMP.atom.read_pdb(self.get_input_file_name("simple.pdb"), m, IMP.atom.NonAlternativePDBSelector()) IMP.set_log_level(IMP.SILENT) IMP.atom.add_bonds(h) print "done" IMP.set_log_level(IMP.VERBOSE) print "writing hierarchy" name=self.get_tmp_file_name("test_rt_parts.rmf") f= RMF.create_rmf_file(name) print f, type(f) IMP.rmf.add_hierarchy(f, h) del f self.assertEqual( RMF.get_open_hdf5_handle_names(), []) f= RMF.open_rmf_file_read_only(name) print "reading" print f, type(f) h2=IMP.rmf.create_hierarchies(f, m) self.assertEqual(len(h2), 1) del f m= IMP.Model() print "reopening" f= RMF.open_rmf_file_read_only(name) print "reading" h2=IMP.rmf.create_hierarchies(f, m)
def _test_round_trip(self, h0, name): f= RMF.create_rmf_file(name) IMP.rmf.add_hierarchy(f, h0) IMP.rmf.save_frame(f, 0) del f self.assertEqual( RMF.get_open_hdf5_handle_names(), []) f= RMF.open_rmf_file(name) h1= IMP.rmf.create_hierarchies(f, h0.get_model()) IMP.rmf.load_frame(f, 0) self._assert_same(h0, h1[0])
def test_perturbed(self): """Test closing an RMF file""" f= RMF.create_rmf_file(self.get_tmp_file_name("test_file.rmf")) r= f.get_root_node() print r.get_type() sc= f.add_category("sequence") ik= f.add_int_key(sc, "ik0", True) r.set_value(ik, 1, 0) del r del f del ik del sc names= RMF.get_open_hdf5_handle_names() print names self.assertEqual(len(names), 0)
def test_navigation(self): """Test that navigation of read hierarchies works""" m= IMP.Model() print "reading pdb" h= IMP.atom.read_pdb(self.get_input_file_name("simple.pdb"), m, IMP.atom.NonAlternativePDBSelector()) IMP.set_log_level(IMP.SILENT) IMP.atom.add_bonds(h) name=self.get_tmp_file_name("test_large_nav.rmf") f= RMF.create_rmf_file(name) IMP.rmf.add_hierarchy(f, h) del f self.assertEqual( RMF.get_open_hdf5_handle_names(), []) f= RMF.open_rmf_file(name) h1= IMP.rmf.create_hierarchies(f, m) res= IMP.atom.get_by_type(h1[0], IMP.atom.RESIDUE_TYPE) nres= IMP.atom.get_next_residue(IMP.atom.Residue(res[0]))
def test_navigation(self): """Test loading and saving of rigid bodies implicitly""" m= IMP.Model() r= IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) r.set_name("rt") rbd= IMP.core.RigidBody.setup_particle(IMP.Particle(m, "rb"), IMP.algebra.ReferenceFrame3D()) for i in range(0,3): p = IMP.Particle(m) v= IMP.algebra.Vector3D(0,0,0) v[i]=1 d=IMP.core.XYZR.setup_particle(p) d.set_coordinates(v) d.set_radius(.5) IMP.atom.Mass.setup_particle(p, .1) r.add_child(IMP.atom.Hierarchy.setup_particle(p)) rbd.add_member(p) fn= self.get_tmp_file_name("rigid_implicit.rmf") f= RMF.create_rmf_file(fn) IMP.rmf.add_hierarchies(f, [r]) IMP.rmf.save_frame(f, 0) frames=[rbd.get_reference_frame()] for i in range(0,10): bb= IMP.algebra.get_unit_bounding_box_3d() tr= IMP.algebra.Transformation3D(IMP.algebra.get_random_rotation_3d(), IMP.algebra.get_random_vector_in(bb)) rf=IMP.algebra.ReferenceFrame3D(tr) rbd.set_reference_frame(rf) frames.append(rf) m.update() IMP.rmf.save_frame(f, i+1) del f self.assertEqual( RMF.get_open_hdf5_handle_names(), []) f= RMF.open_rmf_file(fn) r2=IMP.rmf.create_hierarchies(f, m)[0] self.assert_(IMP.core.RigidMember.particle_is_instance(r2.get_child(0))) print frames for i in range(0,11): IMP.rmf.load_frame(f, i) print rbd.get_reference_frame() for j, c in enumerate(r2.get_children()): oc= IMP.core.XYZ(c).get_coordinates() m.update() nc= IMP.core.XYZ(c).get_coordinates() self.assertAlmostEqual((oc-nc).get_magnitude(), 0, delta=.1)
def test_rt(self): """Test round trip""" m= IMP.Model() print "reading pdb" name=self.get_tmp_file_name("test_round_trip.rmf") h= IMP.atom.read_pdb(self.get_input_file_name("simple.pdb"), m, IMP.atom.NonAlternativePDBSelector()) IMP.set_log_level(IMP.SILENT) IMP.atom.add_bonds(h) print "done" IMP.set_log_level(IMP.VERBOSE) print "writing hierarchy" f= RMF.create_rmf_file(name) IMP.rmf.add_hierarchy(f, h) IMP.rmf.save_frame(f, 0) print "reopening" del f self.assertEqual( RMF.get_open_hdf5_handle_names(), []) print "after closing" #print RMF.get_open_hdf5_handle_names() f= RMF.open_rmf_file_read_only(name) print "reading" print f, type(f) h2=IMP.rmf.create_hierarchies(f, m) IMP.rmf.load_frame(f,0) IMP.atom.show_molecular_hierarchy(h2[0]) print "checking" self.assertEqual(len(h2), 1) self.assertEqual(len(IMP.atom.get_leaves(h)), len(IMP.atom.get_leaves(h2[0]))) self.assertAlmostEqual(IMP.atom.get_mass(h), IMP.atom.get_mass(h2[0]), delta=1e-4) if hasattr(IMP.atom, 'get_surface_area'): self.assertAlmostEqual(IMP.atom.get_surface_area(h), IMP.atom.get_surface_area(h2[0]), delta=1e-4) self.assertAlmostEqual(IMP.atom.get_volume(h), IMP.atom.get_volume(h2[0]), delta=1e-4)