Working phi_psi

master
Thomas Forest 2019-09-17 17:56:52 +02:00
parent 7ddd47c379
commit 8532e4ecd7
2 changed files with 48 additions and 18 deletions

View File

@ -23,19 +23,17 @@ else:
turns = get_turns(pdb_file.residues) turns = get_turns(pdb_file.residues)
get_helix(pdb_file.residues, turns) get_helix(pdb_file.residues, turns)
# get_bends(pdb_file.residues) get_bends(pdb_file.residues)
# get_chirality(pdb_file.residues) # get_chirality(pdb_file.residues)
bridges = get_bridges(pdb_file.residues) # bridges = get_bridges(pdb_file.residues)
ladders = get_ladders(bridges, pdb_file.residues) # ladders = get_ladders(bridges, pdb_file.residues)
get_sheets(ladders) # get_sheets(ladders)
# print("NBRIDGES",len(bridges)) # print("NBRIDGES",len(bridges))
bridges = get_bridges(pdb_file.residues) # bridges = get_bridges(pdb_file.residues)
get_bonds(pdb_file.residues) # get_bonds(pdb_file.residues)
print(pdb_file.residues[1].h_bond(pdb_file.residues[2]))
residues = pdb_file.residues residues = pdb_file.residues
e_min = 0 e_min = 0
@ -44,4 +42,8 @@ else:
if ene <= e_min: if ene <= e_min:
e_min = ene e_min = ene
best_res = res best_res = res
print(residues[1].resid, best_res.resid,e_min) #print(residues[1].resid, best_res.resid,e_min)
#get_phi_psi(residues)
#print(residues[2].atoms, residues[0].resid, residues[1].resid)
print(get_TCO(residues[2],residues[3]))

View File

@ -144,8 +144,10 @@ def get_helix(residues, turns):
while(i+k in turns): while(i+k in turns):
k+=1 k+=1
temp_res.append(residues[i]) temp_res.append(residues[i])
last_res_pos = residues[i].resid+k
if(k>=1): if(k>=1):
print(k,"- HELIX at", residues[i].resid) helix_size=last_res_pos - residues[i].resid
print(turns[i].turn_type,"- HELIX at", residues[i].resid)
helix.append(Helix(temp_res,residues[i].resid)) helix.append(Helix(temp_res,residues[i].resid))
i = i+k i = i+k
else: else:
@ -167,8 +169,8 @@ def get_ladders(bridges, residues):
ladders[i] = k-1 ladders[i] = k-1
print("ladder", bridges[i].res_num, bridges[i+k-1].res_num) print("ladder", bridges[i].res_num, bridges[i+k-1].res_num)
ladders[i] = {'start':bridges[i].res_num, ladders[i] = {'start':bridges[i].res_num,
'end':bridges[i+k-1].res_num, 'end':bridges[i+k-1].res_num,
'bridges':temp_bridges} 'bridges':temp_bridges}
i+=k-1 i+=k-1
else: else:
i+=1 i+=1
@ -201,10 +203,10 @@ def res_list(ladder):
def get_bends(residues): def get_bends(residues):
bends = {} bends = {}
for i in range(2,len(residues)-2): for i in range(2,len(residues)-2):
angle = vector_angles(vectors_substr(position_vector(residues[i].atoms["CA"].coords), angle = math.degrees(vector_angles(vectors_substr(position_vector(residues[i].atoms["CA"].coords),
position_vector(residues[i-2].atoms["CA"].coords)), position_vector(residues[i-2].atoms["CA"].coords)),
vectors_substr(position_vector(residues[i+2].atoms["CA"].coords), vectors_substr(position_vector(residues[i+2].atoms["CA"].coords),
position_vector(residues[i].atoms["CA"].coords))) position_vector(residues[i].atoms["CA"].coords))))
if(angle>70): if(angle>70):
print("angle", residues[i].resid, angle) print("angle", residues[i].resid, angle)
bends[residues[i].resid] = angle bends[residues[i].resid] = angle
@ -240,8 +242,7 @@ def vector_angles(v1,v2):
norm_v2 = vector_norm(v2) norm_v2 = vector_norm(v2)
term = dot_prod/(abs(norm_v1)*abs(norm_v2)) term = dot_prod/(abs(norm_v1)*abs(norm_v2))
rad_angle = math.acos(term) rad_angle = math.acos(term)
deg_angle = rad_angle*(180/math.pi) return rad_angle
return deg_angle
def calc_dihedral(u1, u2, u3, u4): def calc_dihedral(u1, u2, u3, u4):
""" Calculate dihedral angle method. From bioPython.PDB """ Calculate dihedral angle method. From bioPython.PDB
@ -299,3 +300,30 @@ def get_chirality(residues):
return chirality return chirality
def get_phi_psi(residues):
for i in range(len(residues)):
if(i==0):
phi = 360.0
else:
phi = calc_dihedral(residues[i-1].atoms["C"].coords,
residues[i].atoms["N"].coords,
residues[i].atoms["CA"].coords,
residues[i].atoms["C"].coords)
if(i==len(residues)-1):
psi = 360.0
else:
psi = calc_dihedral(residues[i].atoms["N"].coords,
residues[i].atoms["CA"].coords,
residues[i].atoms["C"].coords,
residues[i+1].atoms["N"].coords)
print("ANGLES", i, phi, psi)
def get_TCO(res1, res2):
CO_res1 = vector_from_pos(res1.atoms["C"].coords,
res1.atoms["O"].coords)
CO_res2 = vector_from_pos(res2.atoms["C"].coords,
res2.atoms["O"].coords)
angle = vector_angles(CO_res1, CO_res2)
return(math.cos(angle))