def _create_balls_(self, resseqids, resseqs): ### barrel geometric A = 3.3 # intrastrand Ca distance B = 4.4 # interstrand Ca distance theta = math.atan(self.shearnum * A / (self.strandnum * B)) # tilt angle a = B / (2 * math.sin(math.pi / self.strandnum) * math.cos(theta)) # radius b = a / math.tan(theta) # vertical speed c = math.sqrt(a * a + b * b) # offset on the neigbouring strand to ensure inter H-bond is perpendicular to the strand delta = 2 * math.pi * a * a / (c * self.strandnum) for strandidx in range(self.strandnum): self.strands.append([]) for i in range(self.strandlen[strandidx]): s = (self.startpos[strandidx] + i) * A + strandidx * delta x = a * math.cos(s / c - 2 * math.pi * strandidx / self.strandnum) y = a * math.sin(s / c - 2 * math.pi * strandidx / self.strandnum) z = b * s / c # calculate facing if strandidx % 2 == 0: if i % 2 == 0: fac = self.facing[strandidx] else: fac = 3 - self.facing[strandidx] else: if (self.strandlen[strandidx] % 2 == 0) != (i % 2 == 0): fac = self.facing[strandidx] else: fac = 3 - self.facing[strandidx] # ball = [ballid, seqid, x, y, z, AAid, facing] ball = Ball( [ len(self.balls), resseqids.pop(0), x, y, z, aminoacid.getaaid(resseqs.pop(0)), Ball.Facing.In if fac == Ball.Facing.In else Ball.Facing.Out, ] ) self.balls.append(ball) self.strands[-1].append(ball)
y = a*math.sin(s/c-2*math.pi*strandidx/barrel.strandnum) z = b*s/c # calculate facing if strandidx%2==0: if i%2 == 0: fac = barrel.facing[strandidx] else: fac = 3-barrel.facing[strandidx] else: if (barrel.strandlen[strandidx]%2==0) != (i%2==0): fac = barrel.facing[strandidx] else: fac = 3-barrel.facing[strandidx] # ball = [ballid, seqid, x, y, z, AAid, facing] #ball = [len(barrel.balls), resseqids.pop(0), x, y, z, aminoacid.getaaid(resseqs.pop(0)), BallFacing.In if fac==BallFacing.In else BallFacing.Out ] ball = Ball([ len(barrel.balls), resseqids.pop(0), x, y, z, aminoacid.getaaid(resseqs.pop(0)), BallFacing.In if fac==BallFacing.In else BallFacing.Out ]) barrel.balls.append(ball) barrel.strands[-1].append(ball) #print barrel.reg #print barrel.startpos #print barrel.strandlen #sss=0 #for strd in barrel.strands: # print 'strand',sss # sss+=1 # tmpstr = "" # for ball in strd: # tmpstr += str(ball[-1])+"\t" # print tmpstr