[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[IMP-dev] Test code for cover bonds



Here is some test code for the cover bonds score state. I forgot to include it before.
Index: kernel/test/states/test_cover_bonds.py
===================================================================
--- kernel/test/states/test_cover_bonds.py	(revision 0)
+++ kernel/test/states/test_cover_bonds.py	(revision 0)
@@ -0,0 +1,71 @@
+import unittest
+import IMP
+import IMP.test
+
+rk = IMP.FloatKey("radius")
+
+class TestBondCover(IMP.test.TestCase):
+    """Tests for BondCover"""
+
+    def _set_up_stuff(self, n):
+        # return [model, particles, bonds]
+        m= IMP.Model()
+        ps= IMP.Particles()
+        for i in range(0,n):
+            p= IMP.Particle()
+            m.add_particle(p)
+            d= IMP.XYZDecorator.create(p)
+            d.randomize_in_box(IMP.Vector3D(0,0,0),
+                               IMP.Vector3D(10,10,10))
+            ps.append(p)
+        bds= []
+        for i in range(1,n):
+            ba= IMP.BondedDecorator.create(ps[i-1])
+            bb= IMP.BondedDecorator.create(ps[i])
+            bds.append(IMP.custom_bond(ba, bb, 10, 1))
+        bl= IMP.BondDecoratorListScoreState(ps)
+        ss= IMP.CoverBondsScoreState(bl, rk)
+        m.add_score_state(bl)
+        m.add_score_state(ss)
+        return [m, ps, bds]
+
+
+
+
+    def test_set_position(self):
+        """Make sure that bond cover coordinates are correct"""
+        IMP.set_log_level(IMP.VERBOSE)
+        [m,ps, bds]= self._set_up_stuff(10)
+        m.evaluate(False)
+        for b in bds:
+            b.get_particle().show()
+            ba= b.get_bonded(0)
+            bb= b.get_bonded(1)
+            da= IMP.XYZDecorator.cast(ba.get_particle())
+            db= IMP.XYZDecorator.cast(bb.get_particle())
+            dc= IMP.XYZDecorator.cast(b.get_particle())
+            center= [(da.get_x()+ db.get_x()) /2.0,
+                     (da.get_y()+ db.get_y()) /2.0,
+                     (da.get_z()+ db.get_z()) /2.0]
+            r= ((center[0]- da.get_x())**2
+                +(center[1]- da.get_y())**2
+                +(center[2]- da.get_z())**2)**.5
+            print r
+            print center
+            da.show()
+            db.show()
+            dc.show()
+            self.assertInTolerance(r, b.get_particle().get_value(rk), r*.1,
+                                   "Radius is not close enough")
+            self.assertInTolerance(center[0], dc.get_x(), .1,
+                                   "X is not close enough")
+            self.assertInTolerance(center[1], dc.get_y(), .1,
+                                   "Y is not close enough")
+            self.assertInTolerance(center[2], dc.get_z(), .1,
+                                   "Z is not close enough")
+
+
+
+
+if __name__ == '__main__':
+    unittest.main()