Пример #1
0
 def test_rot(self):
     one = geometry.TRTMatrix()
     mat = geometry.TRTMatrix()
     for (theta, axis) in self.l:
         mat.add_rotation(rotmat(theta, axis))
     for (theta, axis) in reversed(self.l):
         mat.add_rotation(rotmat(-theta, axis))
     map(self.assertAlmostEqual,
         itertools.chain(*mat.rotation_matrix.tolist()),
         itertools.chain(*one.rotation_matrix.tolist()))
Пример #2
0
 def test_transpose(self):
     one = geometry.TRTMatrix()
     mat = geometry.TRTMatrix()
     for (theta, axis) in self.l:
         mat.add_rotation(rotmat(theta, axis))
     trmat = geometry.TRTMatrix().rotation_matrix
     for i in range(3):
         for j in range(3):
             trmat[i, j] = mat.rotation_matrix[j, i]
     mat.add_rotation(trmat)
     map(self.assertAlmostEqual,
         itertools.chain(*mat.rotation_matrix.tolist()),
         itertools.chain(*one.rotation_matrix.tolist()))
Пример #3
0
 def test_transform(self):
     for (theta, axis) in self.l:
         mat = geometry.TRTMatrix()
         mat.add_rotation(rotmat(theta, axis))
         vec = [0, 0, 0]
         vec[axis] = randomcoord(1)[0]
         map(self.assertAlmostEqual, mat.transform(0, 0, 0), (0, 0, 0))
         map(self.assertAlmostEqual, mat.transform(*vec), vec)
Пример #4
0
 def test_dotprod(self):
     mat = geometry.TRTMatrix()
     for (theta, axis) in self.l:
         mat.add_rotation(rotmat(theta, axis))
     for dummy in range(100):
         v1 = randomcoord()
         v2 = randomcoord()
         self.assertAlmostEqual(dot(mat.transform(*v1), mat.transform(*v2)),
                                dot(v1, v2))
Пример #5
0
 def test_linearity(self):
     mat = geometry.TRTMatrix()
     for (theta, axis) in self.l:
         mat.add_rotation(rotmat(theta, axis))
     scale = lambda vec, f: [x * f for x in vec]
     for dummy in range(100):
         vec = randomcoord()
         for f in randomcoord(100):
             map(self.assertAlmostEqual, mat.transform(*scale(vec, f)),
                 scale(mat.transform(*vec), f))
Пример #6
0
    def to_trtmatrix(self):
        """ Returns geometry.TRTMatrix containing the same transformation. """
        res = geometry.TRTMatrix()

        for i in range(3):
            for j in range(3):
                res.rotation_matrix[i, j] = self.U[j][i]
            res.translation_vector[i] = self.Tr[i]

        return res
Пример #7
0
 def multifit(self):
     dev_prv = numpy.inf
     dev = 999999
     mtxs_prv = [geometry.TRTMatrix() for i in self.tokens[0]]
     while dev_prv - dev > .1:
         dev_prv = dev
         rmsds, mtxs = zip(*self.iter_once(mtxs=mtxs_prv))
         dev = max([rmsd**2 * len(self.tokens) for rmsd in rmsds])
         mtxs_prv = [i.combine(j) for i, j in zip(mtxs_prv, mtxs)]
         #~ print "ITER %f" % (dev_prv - dev)
     return zip(rmsds, mtxs_prv)
Пример #8
0
 def test_trans(self):
     mat1 = geometry.TRTMatrix()
     mat2 = geometry.TRTMatrix()
     mat = geometry.TRTMatrix()
     for (theta, axis) in self.l:
         mat.add_rotation(rotmat(theta, axis))
         mat1.add_rotation(rotmat(theta, axis))
         mat2.add_rotation(rotmat(theta, axis))
     for dummy in range(100):
         v1 = randomcoord()
         v2 = mat.transform(*v1)
         if random.choice([True, False]):
             mat1.add_prerotational_translation(v1)
             mat2.add_translation(v2)
         else:
             mat2.add_prerotational_translation(v1)
             mat1.add_translation(v2)
         for dummy in range(100):
             vec = randomcoord()
             map(self.assertAlmostEqual, mat1.transform(*vec),
                 mat2.transform(*vec))
Пример #9
0
 def iter_once(self, mtxs=None):
     if not mtxs:
         mtxs = [geometry.TRTMatrix() for i in self.tokens[0]]
     n = len(self.tokens[0])
     av_stc = [
         reduce(
             operator.add,
             [mtx.transform(vec=coords)
              for coords, mtx in zip(vec, mtxs)]) / n for vec in self.tokens
     ]
     ovfs = [Overfit() for i in self.tokens[0]]
     for row, av_atm in zip(self.tokens, av_stc):
         for atm, ovf, mtx in zip(row, ovfs, mtxs):
             ovf.add_point(av_atm, mtx.transform(vec=atm))
     return [ovf.overfit() for ovf in ovfs]
Пример #10
0
    def assertIdent(self, motif, res, msg):
        almost_equal = functools.partial(self.assertAlmostEqual, msg=msg)

        rmsd, pair_al, mat = res
        almost_equal(rmsd, 0, places=3)

        one = geometry.TRTMatrix()
        map(almost_equal, itertools.chain(*mat.rotation_matrix.tolist()),
            itertools.chain(*one.rotation_matrix.tolist()))
        map(almost_equal, mat.prerotational_translation_vector.tolist(),
            one.prerotational_translation_vector.tolist())
        map(almost_equal, mat.translation_vector.tolist(),
            one.translation_vector.tolist())

        self.assertListEqual(*map(list, zip(*list(pair_al))), msg=msg)
        self.assertListEqual(list(motif),
                             list(zip(*list(pair_al))[0]),
                             msg=msg)
Пример #11
0
    def test_identity(self):
        for dummy in range(10):
            point_list = [
                self.points1[n]
                for n in random.sample(range(100), random.randint(3, 50))
            ]

            overfit_obj = overfit.Overfit()
            overfit_obj.add(point_list, point_list)

            rmsd, mat = overfit_obj.overfit()

            self.assertAlmostEqual(rmsd, 0, places=3)

            one = geometry.TRTMatrix()
            map(self.assertAlmostEqual,
                itertools.chain(*mat.rotation_matrix.tolist()),
                itertools.chain(*one.rotation_matrix.tolist()))
            map(self.assertAlmostEqual,
                mat.prerotational_translation_vector.tolist(),
                one.prerotational_translation_vector.tolist())
            map(self.assertAlmostEqual, mat.translation_vector.tolist(),
                one.translation_vector.tolist())
Пример #12
0
 def test_basicops(self):
     mat = geometry.TRTMatrix()
     mat.add_translation(randomcoord())
     mat.add_prerotational_translation(randomcoord())
     mat.add_rotation(
         rotmat(random.uniform(-math.pi, math.pi), random.choice(range(3))))
Пример #13
0
 def test_init(self):
     geometry.TRTMatrix()