def _get_gly_cb_vector(self, residue): """ Return a pseudo CB vector for a Gly residue. The pseudoCB vector is centered at the origin. CB coord=N coord rotated over -120 degrees along the CA-C axis. """ try: n_v = residue["N"].get_vector() c_v = residue["C"].get_vector() ca_v = residue["CA"].get_vector() except: return None # center at origin n_v = n_v - ca_v c_v = c_v - ca_v # rotation around c-ca over -120 deg rot = rotaxis(-pi * 120.0 / 180.0, c_v) cb_at_origin_v = n_v.left_multiply(rot) # move back to ca position cb_v = cb_at_origin_v + ca_v # This is for PyMol visualization self.ca_cb_list.append((ca_v, cb_v)) return cb_at_origin_v
def _get_gly_cb_vector(self, residue): """ Return a pseudo CB vector for a Gly residue. The pseudoCB vector is centered at the origin. CB coord=N coord rotated over -120 degrees along the CA-C axis. """ try: n_v=residue["N"].get_vector() c_v=residue["C"].get_vector() ca_v=residue["CA"].get_vector() except: return None # center at origin n_v=n_v-ca_v c_v=c_v-ca_v # rotation around c-ca over -120 deg rot=rotaxis(-pi*120.0/180.0, c_v) cb_at_origin_v=n_v.left_multiply(rot) # move back to ca position cb_v=cb_at_origin_v+ca_v # This is for PyMol visualization self.ca_cb_list.append((ca_v, cb_v)) return cb_at_origin_v
def calculateCoordinates(refA, refB, refC, L, ang, di): AV=refA.get_vector() BV=refB.get_vector() CV=refC.get_vector() CA=AV-CV CB=BV-CV ##CA vector AX=CA[0] AY=CA[1] AZ=CA[2] ##CB vector BX=CB[0] BY=CB[1] BZ=CB[2] ##Plane Parameters A=(AY*BZ)-(AZ*BY) B=(AZ*BX)-(AX*BZ) G=(AX*BY)-(AY*BX) ##Dot Product Constant F= math.sqrt(BX*BX + BY*BY + BZ*BZ) * L * math.cos(ang*(math.pi/180.0)) ##Constants const=math.sqrt( math.pow((B*BZ-BY*G),2) *(-(F*F)*(A*A+B*B+G*G)+(B*B*(BX*BX+BZ*BZ) + A*A*(BY*BY+BZ*BZ)- (2*A*BX*BZ*G) + (BX*BX+ BY*BY)*G*G - (2*B*BY)*(A*BX+BZ*G))*L*L)) denom= (B*B)*(BX*BX+BZ*BZ)+ (A*A)*(BY*BY+BZ*BZ) - (2*A*BX*BZ*G) + (BX*BX+BY*BY)*(G*G) - (2*B*BY)*(A*BX+BZ*G) X= ((B*B*BX*F)-(A*B*BY*F)+(F*G)*(-A*BZ+BX*G)+const)/denom if((B==0 or BZ==0) and (BY==0 or G==0)): const1=math.sqrt( G*G*(-A*A*X*X+(B*B+G*G)*(L-X)*(L+X))) Y= ((-A*B*X)+const1)/(B*B+G*G) Z= -(A*G*G*X+B*const1)/(G*(B*B+G*G)) else: Y= ((A*A*BY*F)*(B*BZ-BY*G)+ G*( -F*math.pow(B*BZ-BY*G,2) + BX*const) - A*( B*B*BX*BZ*F- B*BX*BY*F*G + BZ*const)) / ((B*BZ-BY*G)*denom) Z= ((A*A*BZ*F)*(B*BZ-BY*G) + (B*F)*math.pow(B*BZ-BY*G,2) + (A*BX*F*G)*(-B*BZ+BY*G) - B*BX*const + A*BY*const) / ((B*BZ-BY*G)*denom) #GET THE NEW VECTOR from the orgin D=Vector(X, Y, Z) + CV with warnings.catch_warnings(): # ignore inconsequential warning warnings.simplefilter("ignore") temp=calc_dihedral(AV, BV, CV, D)*(180.0/math.pi) di=di-temp rot= rotaxis(math.pi*(di/180.0), CV-BV) D=(D-BV).left_multiply(rot)+BV return D.get_array()
def get_expected_cb_pos(aa): n = aa['N'].get_vector() c = aa['C'].get_vector() ca = aa['CA'].get_vector() # center at origin n = n - ca c = c - ca # find rotation matrix that rotates n -120 degrees along the ca-c vector rot = rotaxis(-math.pi * 120.0 / 180.0, c) # apply rotation to ca-n vector cb_at_origin = n.left_multiply(rot) # put on top of ca atom return (cb_at_origin + ca)
def get_gly_cb_coords(residue): try: n_v = residue["N"].get_vector() c_v = residue["C"].get_vector() ca_v = residue["CA"].get_vector() except: return None n_v = n_v - ca_v c_v = c_v - ca_v rot = rotaxis(-np.pi * 120.0 / 180.0, c_v) cb_at_origin_v = n_v.left_multiply(rot) cb_v = cb_at_origin_v + ca_v return cb_v.get_array()
def get_expected_cb_pos(aa): n = aa['N'].get_vector() c = aa['C'].get_vector() ca = aa['CA'].get_vector() # center at origin n = n - ca c = c - ca # find rotation matrix that rotates n -120 degrees along the ca-c vector rot = rotaxis(-math.pi*120.0/180.0, c) # apply rotation to ca-n vector cb_at_origin = n.left_multiply(rot) # put on top of ca atom return (cb_at_origin + ca)