def calc_pucker(self): atom_pos = self.coords[self.pucker_idx] angles = tools.dihedral(atom_pos) angles = angles.reshape(-1,5) # calculate pseudorotation parameters x1 = angles[:,4]+angles[:,1]-angles[:,3]-angles[:,0] #Pconst = 2.0*(np.sin(np.pi/5.) + np.sin(np.pi/2.5)) x2 = 3.0776835*angles[:,2] # phase p0 = np.arctan2(x1,x2) p0[np.where( p0 < 0.0 )] += 2.0*np.pi # amplitude tm = angles[:,2]/np.cos(p0) #print angles.shape,p0.shape,tm.shape angles = np.concatenate((angles,tm[:,np.newaxis]),axis=1) angles = np.concatenate((angles,p0[:,np.newaxis]),axis=1) return np.degrees(angles)
# supone que las moléculas de H2O no están disociadas #rmaxo = float(input("Distancia máxima O a Hg : ")) rmaxo = 2.53 out = tl.SM(NALA,MXYZ,rmaxo) NAW = out[0] if NAW < 1 : print(f"No se calcula dihedro, ya que se necesita almenos una molécula de H2O") else : VR1 = out[1] VR = np.zeros((NAW,4)) for i in range(NAW) : for j in range(4) : VR[i,j] = VR1[i,j] RHg1 = out[2] RHg = np.zeros((3)) for i in range(3) : RHg[i] = RHg1[i] # Función externa que calcula el angulo de torsión entre 2 planos, # que son definidos por 2 puntos (Praxeolitic formule). out = tl.dihedral(NAW,VR,RHg) NO = int(NAW/3) d1 = out dihedros = np.zeros((NO)) print (f"Cantidad de dihedros : ",NO) for i in range(NO): dihedros[i] = d1[i] print(f"dihedro : ",dihedros[i])
def calc_j3(self): atom_pos = self.coords[self.j3_idx] angles = tools.dihedral(atom_pos) return np.degrees(angles)
def calc_bb_torsion(self): atom_pos_bb = self.coords[self.bb_idx] atom_pos_chi = self.coords[self.chi_idx] bb_angles = np.degrees(tools.dihedral(atom_pos_bb)) chi_angles = np.degrees(tools.dihedral(atom_pos_chi)) return bb_angles,chi_angles