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()))
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()))
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)
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))
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))
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
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)
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))
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]
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)
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())
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))))
def test_init(self): geometry.TRTMatrix()