def RMSD ( self ): """ returns RMSD between two sets of points """ # print len ( self [0]), powinna byc jakas obrona prze kreacja emptiseta # quit () ciag1 = []; ciag2 = [] for i in range ( len (self[0] ) ): for j in range ( len(self[0][0]) ): el1 = [ float (c) for c in self[0][i][j] ] el2 = [ float (c) for c in self[1][i][j] ] ciag1. append ( el1 ); ciag2. append ( el2 ); ciag1C = SetOfPoints ( ciag1 ). TranslateToOrigin (). Array ( ); # tu jest blad ciag2C = SetOfPoints ( ciag2 ). TranslateToOrigin ( ). Array ( ); # to jest template! # print rmsd (np.array(ciag1), np.array(ciag2)) return rmsd (np.array(ciag1C), np.array(ciag2C)) # to bedzie z match.py
def SuperpositionMatrix ( self, AllowPerturbations = False, AllowFlip = False ): """ returns rotation between 0th and 1st HierSetOfPoints """ Array1 = self.Content[0]. NonHierarchicalSetOfPoints ( ). Array ( ) if AllowPerturbations: RMSDs = [ ]; Matrices = [ ]; minRMSD = 1000.0 Centres1 = self. Content[1] # bo to przeciez ten drugi, blargh # a wiec ten pierwszy powinien byc zrobiony juz tutaj for Perturbation in Perturbations( len ( self.Content [1] ) ): Centres1Perturbation = [ Centres1 [i] for i in Perturbation ] Array2 = Centres1Perturbation. NonHierarchicalSetOfPoints ( ). Array ( ) Matrices. append ( optimal_superposition ( Array1, Array2 ).T ) RMSDs. append ( rmsd (Array1, Array2) ) if AllowFlip: FlippedSet = [ Helix[::-1] for Helix in Centres1Perturbation ] Array2 = FlippedSet. NonHierarchicalSetOfPoints ( ). Array ( ) Matrices. append ( optimal_superposition ( Array1, Array2 ).T ) RMSDs. append ( rmsd (Array1, Array2) ) minRMSD = min ( RMSDs ); return Matrices [ RMSDs. index ( minRMSD) ] else: Array2 = self.Content[1]. NonHierarchicalSetOfPoints ( ). Array ( ) return optimal_superposition( Array1, Array2 ).T # ok a wiec gdzie jest translacja do zera?
def RMSD ( self, AllowPerturbations = False, AllowFlip = False ): """ compute RMSD between 0th and 1st SetOfPoints """ Array1 = self.Content[0]. NonHierarchicalSetOfPoints ( ). Array ( ) if AllowPerturbations: RMSDs = [ ]; minRMSD = 1000.0 Centres1 = self. Content[1] # bo to przeciez ten drugi, blargh # a wiec ten pierwszy powinien byc zrobiony juz tutaj for Perturbation in Perturbations( len ( self.Content [1] ) ): Centres1Perturbation = [ Centres1 [i] for i in Perturbation ] Array2 = Centres1Perturbation. NonHierarchicalSetOfPoints ( ). Array ( ) RMSDs. append ( rmsd (Array1, Array2) ) if AllowFlip: FlippedSet = [ Helix[::-1] for Helix in Centres1Perturbation ] Array2 = FlippedSet. NonHierarchicalSetOfPoints ( ). Array ( ) RMSDs. append ( rmsd (Array1, Array2) ) minRMSD = min ( RMSDs ); else: Array2 = self.Content[1]. NonHierarchicalSetOfPoints ( ). Array ( ) return rmsd (Array1, Array2).T # ok a wiec gdzie jest translacja do zera?
def testNonMatch(self): "Tests that rmsd=0 works" for i in xrange(0, 20): n = 10 ref_vecs = [vector3d.RandomVec() for i in xrange(0, n)] ref_crds = make_crds(ref_vecs) mov_vecs = [vector3d.RandomTransform().transform_vec(r) for r in ref_vecs] mov_crds = make_crds(mov_vecs) rmsd = match.rmsd(ref_crds, mov_crds) self.assertNotAlmostEquals(0.0, rmsd, 5)
def testRmsdOfGloballyRotatedVectors(self): "Tests that rmsd=0 works" for i in xrange(0, 20): n = 10 ref_vecs = [vector3d.RandomVec() for i in xrange(0, n)] ref_crds = make_crds(ref_vecs) m = vector3d.RandomOriginRotation() mov_vecs = [m.transform_vec(r) for r in ref_vecs] mov_crds = make_crds(mov_vecs) rmsd = match.rmsd(ref_crds, mov_crds) self.assertAlmostEquals(0.0, rmsd, 5)
def SuperpositionMatrix ( self, AllowPerturbations = False, AllowFlip = False ): """ returns rotation from 0th SetOfPoints on 1st SetOfPoints """ print self[0][0] ciag1 = [] for i in range ( len ( self [0] ) ): for j in range ( len ( self [0][0] ) ): Punkt1 = [ float ( Coord ) for Coord in self[0][i][j] ] ciag1. append ( Punkt1 ) # i powinien chodzic # ciag 1 jest gotowy # musze sie doksztalcic z pythona znowu if AllowPerturbations: RMSDs = [ ]; Matrices = [ ]; minRMSD = 1000.0; Centres1 = self.Content[1] for Perturbation in Perturbations( len ( self.Content[1] ) ): Centres1Perturbation = [ Centres1 [i] for i in Perturbation ] ciag2 = [] for i in range ( len (self[0] ) ): for j in range ( len(self[0][0]) ): el2 = [ float (c) for c in Centres1Perturbation [i][j] ] ciag2. append ( el2 ); Matrices. append ( optimal_superposition ( np.array(ciag1), np.array(ciag2) ).T ) RMSDs. append ( rmsd (np.array(ciag1), np.array(ciag2)) ) if AllowFlip: ciag2 = [] for i in range ( len (self[0] ) ): for j in range ( len(self[0][0])-1,-1,-1 ): el2 = [ float (c) for c in Centres1Perturbation [i][j] ] ciag2. append ( el2 ); Matrices. append ( optimal_superposition ( np.array(ciag1), np.array(ciag2) ).T ) RMSDs. append ( rmsd (np.array(ciag1), np.array(ciag2)) ) minRMSD = min ( RMSDs ); return Matrices [ RMSDs. index ( minRMSD) ] else: ciag2 = [ ] for i in range ( len (self[0] ) ): for j in range ( len(self[0][0]) ): el2 = [ float (c) for c in self[1][i][j] ] ciag2. append ( el2 ); return optimal_superposition( np.array(ciag1), np.array(ciag2) ).T # ok a wiec gdzie jest translacja do zera?
def SuperpositionMatrix ( self, AllowPerturbations = False, AllowFlip = False ): """ returns rotation matrix from 0th HierSetOfPoints to 1stHierSetOfPoints """ HierarchicalSetOfPointsInstance1, HierarchicalSetOfPointsInstance2 = self. Content NonHierarchicalSetOfPointsInstance1 = [ ] for SetOfPointsInstance in self. Content [0]: NonHierarchicalSetOfPointsInstance1. append ( SetOfPointsInstance ) # pierwszy set jest gotowy if AllowPerturbations: RMSDs = [ ]; Matrices = [ ]; minRMSD = 1000.0 for Perturbation in Perturbations( len ( self. Content[1] ) ): PerturbationInstance = [ self. Content [ 1 ] [i] for i in Perturbation ] NonHierarchicalSetOfPointsInstance2 = [ ] for SetOfPointsInstance in PerturbationInstance: NonHierarchicalSetOfPointsInstance2. append ( SetOfPointsInstance ) Matrices. append ( optimal_superposition ( np.array(ciag1), np.array(ciag2) ).T ) RMSDs. append ( rmsd (np.array(ciag1), np.array(ciag2)) ) if AllowFlip: ciag2 = [] for i in range ( len (self[0] ) ): for j in range ( len(self[0][0])-1,-1,-1 ): el2 = [ float (c) for c in Centres1Perturbation [i][j] ] ciag2. append ( el2 ); Matrices. append ( optimal_superposition ( np.array(ciag1), np.array(ciag2) ).T ) RMSDs. append ( rmsd (np.array(ciag1), np.array(ciag2)) ) minRMSD = min ( RMSDs ); return Matrices [ RMSDs. index ( minRMSD) ] else: ciag2 = [ ] for i in range ( len (self[0] ) ): for j in range ( len(self[0][0]) ): el2 = [ float (c) for c in self[1][i][j] ] ciag2. append ( el2 ); return optimal_superposition( np.array(ciag1), np.array(ciag2) ).T # ok a wiec gdzie jest translacja do zera?