def pdbBoxString(box): # Box vectors u, v, w = box[0:3], box[3:6], box[6:9] # Box vector lengths nu, nv, nw = [math.sqrt(FUNC.norm2(i)) for i in (u, v, w)] # Box vector angles alpha = nv*nw == 0 and 90 or math.acos(FUNC.cos_angle(v, w))/d2r beta = nu*nw == 0 and 90 or math.acos(FUNC.cos_angle(u, w))/d2r gamma = nu*nv == 0 and 90 or math.acos(FUNC.cos_angle(u, v))/d2r return pdbBoxLine % (10*FUNC.norm(u), 10*FUNC.norm(v), 10*FUNC.norm(w), alpha, beta, gamma)
def add_dummy(beads, dist=0.11, n=2): # Generate a random vector in a sphere of -1 to +1, to add to the bead position v = [random.random()*2.-1, random.random()*2.-1, random.random()*2.-1] # Calculated the length of the vector and divide by the final distance of the dummy bead norm_v = FUNC.norm(v)/dist # Resize the vector vn = [i/norm_v for i in v] # m sets the direction of the added vector, currently only works when adding one or two beads. m = 1 for j in range(n): newName = 'SCD' newBead = (newName, tuple([i+(m*j) for i, j in zip(beads[-1][1], vn)]), beads[-1][2]) beads.append(newBead) m *= -2 return beads