def _get_pdbballs_(self): chaincoorddict = { res.get_id()[1]: res["CA"].get_coord() for res in self.pdbchain if res.child_dict.has_key("CA") } pdbcoords = [chaincoorddict[ball[Ball.p_resseqid]] for ball in self.balls] pdbcoords = np.array(pdbcoords) weights = np.array([aminoacid.getaaweight(ball[Ball.p_aaid]) for ball in self.balls]) masscenter = np.average(pdbcoords, axis=0, weights=weights) pdbcoords = np.subtract(pdbcoords, masscenter) self.pdbballs = copy.deepcopy(self.balls) for i in range(len(self.balls)): self.pdbballs[i][Ball.p_coordx] = pdbcoords[i][0] self.pdbballs[i][Ball.p_coordy] = pdbcoords[i][1] self.pdbballs[i][Ball.p_coordz] = pdbcoords[i][2]
def _align_(self): ballcoords = np.array(self.balls)[:, [Ball.p_coordx, Ball.p_coordy, Ball.p_coordz]] weights = np.array([aminoacid.getaaweight(ball[Ball.p_aaid]) for ball in self.balls]) masscenter = np.average(ballcoords, axis=0, weights=weights) ballcoords = np.subtract(ballcoords, masscenter) pdbballcoords = np.array(self.pdbballs)[:, [Ball.p_coordx, Ball.p_coordy, Ball.p_coordz]] U = np.dot(pdbballcoords.T, ballcoords) V, S, WT = np.linalg.svd(U) rotation_matrix = np.dot(WT.T, V.T) pdbballcoords = np.dot(rotation_matrix, pdbballcoords.T).T # fromdat.setcoords(rotated_coords) for i in range(len(self.balls)): self.balls[i][Ball.p_coordx] = ballcoords[i][0] self.balls[i][Ball.p_coordy] = ballcoords[i][1] self.balls[i][Ball.p_coordz] = ballcoords[i][2] self.pdbballs[i][Ball.p_coordx] = pdbballcoords[i][0] self.pdbballs[i][Ball.p_coordy] = pdbballcoords[i][1] self.pdbballs[i][Ball.p_coordz] = pdbballcoords[i][2]
else: # non hbond ji1 = j - barrel.reg[i+1] if 0<=ji1 and ji1 < barrel.strandlen[i1] : stick = Stick( [len(barrel.sticks), barrel.strands[i][j][0], barrel.strands[i1][ji1][0], BondType.NH ] ) barrel.sticks.append(stick) # week hbond ji1 = j - barrel.reg[i+1] - 1 if 0<=ji1 and ji1 < barrel.strandlen[i1] : stick = Stick( [len(barrel.sticks), barrel.strands[i][j][0], barrel.strands[i1][ji1][0], BondType.WH ] ) barrel.sticks.append(stick) ### recenter barrel ballcoords = np.array(barrel.balls)[:,[2,3,4]] weights = np.array([ aminoacid.getaaweight(ball[-2]) for ball in barrel.balls ]) masscenter = np.average(ballcoords, axis=0, weights=weights) ballcoords = np.subtract( ballcoords, masscenter ) for i in range(len(barrel.balls)): barrel.balls[i][2] = ballcoords[i][0] barrel.balls[i][3] = ballcoords[i][1] barrel.balls[i][4] = ballcoords[i][2] ### recenter pdb chaincoorddict = { res.get_id()[1] : res['CA'].get_coord() for res in pdbchain if res.child_dict.has_key('CA') } pdbcoords = [ chaincoorddict[ ball[1] ] for ball in barrel.balls ] pdbcoords = np.array(pdbcoords) masscenter = np.average(pdbcoords, axis=0, weights=weights) pdbcoords = np.subtract( pdbcoords, masscenter )