예제 #1
0
 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);
예제 #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)
예제 #3
0
 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])
예제 #4
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)
예제 #5
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)
예제 #7
0
 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)