Exemple #1
0
 def zeroEV(self, x):
     zev = []
     ca = self.coords_adapter(x)
     cv = self.coords_adapter(np.zeros(x.shape))
         
     translate_rigid = zeroev.zeroEV_translation(ca.posRigid)
     
     for v in translate_rigid:
         cv.posRigid[:] = v
         zev.append(cv.coords.copy())
         
     #rotate_r = zeroev.zeroEV_rotation(ca.posRigid)
     #rotate_aa = 
     transform = TransformAngleAxisCluster(self)
     d = 1e-5
     dx = x.copy()
     transform.rotate(dx, rotations.aa2mx(np.array([d, 0, 0])))
     self.align_path([x, dx])
     dx -= x
     dx /= np.linalg.norm(dx)
     
     dy = x.copy()
     transform.rotate(dy, rotations.aa2mx(np.array([0, d, 0])))
     self.align_path([x, dy])
     dy -= x
     dy /= np.linalg.norm(dy)
     
     dz = x.copy()
     transform.rotate(dz, rotations.aa2mx(np.array([0, 0, d])))
     self.align_path([x, dz])
     dz -= x
     dz /= np.linalg.norm(dz)
     
     #print "Zero eigenvectors", zev         
     return zev + [dx, dy, dz]
Exemple #2
0
    def test_translation_only(self):
        # test orthogopt with translations only
        natoms = 13
        vec = np.random.uniform(-1, 1, natoms * 3)
        vec /= np.linalg.norm(vec)
        coords = np.random.uniform(-1, 1, natoms * 3)

        # orthogonalize vec
        vec = orthogopt_translation_only(vec, coords)

        zeroev = zeroEV_translation(coords)
        for u in zeroev:
            # print np.dot(u, vec)
            self.assertAlmostEqual(0., np.dot(u, vec), 5)

        rotev = zeroEV_rotation(coords)
        for u in rotev:
            # print np.dot(u, vec)
            self.assertNotAlmostEqual(0., np.dot(u, vec), 5)
Exemple #3
0
    def _zeroEV_python(self, x):
        """return a list of zero eigenvectors
        
        This does both translational and rotational eigenvectors
        """
        zev = []
        ca = self.coords_adapter(x)
        cv = self.coords_adapter(np.zeros(x.shape))

        # get the zero eigenvectors corresponding to translation
        translate_rigid = zeroev.zeroEV_translation(ca.posRigid)

        for v in translate_rigid:
            cv.posRigid[:] = v
            zev.append(cv.coords.copy())

        # get the zero eigenvectors corresponding to rotation
        #rotate_r = zeroev.zeroEV_rotation(ca.posRigid)
        #rotate_aa = 
        transform = TransformAngleAxisCluster(self)
        d = 1e-5
        dx = x.copy()
        transform.rotate(dx, rotations.aa2mx(np.array([d, 0, 0])))
        self.align_path([x, dx])
        dx -= x
        dx /= np.linalg.norm(dx)

        dy = x.copy()
        transform.rotate(dy, rotations.aa2mx(np.array([0, d, 0])))
        self.align_path([x, dy])
        dy -= x
        dy /= np.linalg.norm(dy)

        dz = x.copy()
        transform.rotate(dz, rotations.aa2mx(np.array([0, 0, d])))
        self.align_path([x, dz])
        dz -= x
        dz /= np.linalg.norm(dz)

        #print "Zero eigenvectors", zev         
        return zev + [dx, dy, dz]