def test_superposition(): n = 4 crds1 = [v3.random_vector() for i in range(n)] random_m = v3.random_rotation() crds2 = [v3.transform(random_m, c) for c in crds1] rms, m = rmsd.calc_rmsd_rot(crds1, crds2) for crd1, crd2 in zip(crds1, crds2): assert v3.is_similar_vector(v3.transform(m, crd1), crd2)
def center_vlist(vlist): """ Center a list of v3 vectors and return (center, centered_vlist_copy) """ center = v3.get_center(vlist) center_matrix = v3.translation(-center) return (center, [v3.transform(center_matrix, v) for v in vlist])
def test_rmsd(): n = 4 crds1 = [v3.random_vector() for i in range(n)] random_m = v3.random_rotation() crds2 = [v3.transform(random_m, c) for c in crds1] rms, m = rmsd.calc_rmsd_rot(crds1, crds2) assert v3.is_similar_mag(0, rms) # test the two algorithms separately rms, m = rmsd.pyqcprot_rmsd_rot(crds1, crds2) assert v3.is_similar_mag(0, rms) if rmsd.is_numpy: rms, m = rmsd.numpy_svd_rmsd_rot(crds1, crds2) assert v3.is_similar_mag(0, rms)
def get_position(self, matrix): """ Get position of residue transformed by matrix, as a new v3 vector. Does not modify instance variable. """ return v3.transform(matrix, self.position)