full output except STRUCTURE column
parent
d745b942bd
commit
651f01f626
75
src/atom.py
75
src/atom.py
|
|
@ -28,10 +28,21 @@ class Residue:
|
||||||
self.atoms[atom.atom_name] = atom
|
self.atoms[atom.atom_name] = atom
|
||||||
self.resid = atom.res_seq_nb
|
self.resid = atom.res_seq_nb
|
||||||
self.res_name = atom.res_name
|
self.res_name = atom.res_name
|
||||||
|
self.res_letter = self.get_amino_letter(atom.res_name)
|
||||||
self.chain_id = atom.chain_id
|
self.chain_id = atom.chain_id
|
||||||
self.insertion_code = atom.insertion_code
|
self.insertion_code = atom.insertion_code
|
||||||
self.indice = indice
|
self.indice = indice
|
||||||
|
|
||||||
|
def get_amino_letter(self, res_name):
|
||||||
|
code3 = ['ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLU', 'GLN', 'GLY',
|
||||||
|
'HIS', 'ILE', 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'SER',
|
||||||
|
'THR', 'TRP', 'TYR', 'VAL']
|
||||||
|
|
||||||
|
|
||||||
|
code1 = ['A','R','N','D','C','E','Q','G','H','I','L','K','M','F','P',
|
||||||
|
'S','T','W','Y','V']
|
||||||
|
|
||||||
|
return code1[code3.index(res_name)]
|
||||||
|
|
||||||
def h_bond(self, res2):
|
def h_bond(self, res2):
|
||||||
if("H" not in res2.atoms.keys()):
|
if("H" not in res2.atoms.keys()):
|
||||||
|
|
@ -70,6 +81,18 @@ class Residue:
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_bends(self, residues):
|
||||||
|
i = residues.index(self)
|
||||||
|
if i >=2 and i <len(residues)-2:
|
||||||
|
angle = math.degrees(vector_angles(vectors_substr(position_vector(residues[i].atoms["CA"].coords),
|
||||||
|
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))))
|
||||||
|
|
||||||
|
return angle
|
||||||
|
else:
|
||||||
|
return 360.0
|
||||||
|
|
||||||
def get_bridges(self, residues):
|
def get_bridges(self, residues):
|
||||||
bridges = {}
|
bridges = {}
|
||||||
bridge = {}
|
bridge = {}
|
||||||
|
|
@ -163,6 +186,58 @@ class Residue:
|
||||||
return ladder
|
return ladder
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_tco(self, residues):
|
||||||
|
i = residues.index(self)
|
||||||
|
if(i!=0):
|
||||||
|
res2 = residues[i-1]
|
||||||
|
CO_res1 = vector_from_pos(self.atoms["C"].coords,
|
||||||
|
self.atoms["O"].coords)
|
||||||
|
CO_res2 = vector_from_pos(res2.atoms["C"].coords,
|
||||||
|
res2.atoms["O"].coords)
|
||||||
|
angle = vector_angles(CO_res1, CO_res2)
|
||||||
|
else:
|
||||||
|
angle = math.pi/2
|
||||||
|
return(math.cos(angle))
|
||||||
|
|
||||||
|
def get_chirality(self, residues):
|
||||||
|
i = residues.index(self)
|
||||||
|
if (i >=1 and i < len(residues)-2):
|
||||||
|
chirality = {}
|
||||||
|
angle = calc_dihedral(residues[i-1].atoms["CA"].coords,
|
||||||
|
residues[i].atoms["CA"].coords,
|
||||||
|
residues[i+1].atoms["CA"].coords,
|
||||||
|
residues[i+2].atoms["CA"].coords)
|
||||||
|
|
||||||
|
if(angle>0 and angle<=180):
|
||||||
|
sign="+"
|
||||||
|
|
||||||
|
if(angle<=0 and angle > -180):
|
||||||
|
sign="-"
|
||||||
|
|
||||||
|
else:
|
||||||
|
angle = 360.0
|
||||||
|
sign = ''
|
||||||
|
|
||||||
|
return [angle, sign]
|
||||||
|
|
||||||
|
def get_phi_psi(self, residues):
|
||||||
|
i = residues.index(self)
|
||||||
|
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)
|
||||||
|
|
||||||
|
return((phi, psi))
|
||||||
def get_bridges(residues):
|
def get_bridges(residues):
|
||||||
bridges = {}
|
bridges = {}
|
||||||
bridge = {}
|
bridge = {}
|
||||||
|
|
|
||||||
73
src/dssp.py
73
src/dssp.py
|
|
@ -13,22 +13,12 @@ if(len(sys.argv)<2):
|
||||||
"call structure and parameters.")
|
"call structure and parameters.")
|
||||||
else:
|
else:
|
||||||
pdb_file = pdb.PDBFile(sys.argv[1])
|
pdb_file = pdb.PDBFile(sys.argv[1])
|
||||||
# print(pdb_file.residues[15].atoms["C"].coord_x)
|
|
||||||
#print(pdb_file.residues[2].atoms["N"].res_seq_nb, pdb_file.residues[2].atoms["N"].coord_x, pdb_file.residues[2].atoms["N"].coord_y, pdb_file.residues[2].atoms["N"].coord_z)
|
|
||||||
#print(pdb_file.residues[2].atoms["H"].coord_x)
|
|
||||||
#print(pdb_file.residues[2].h_bond(pdb_file.residues[40]))
|
|
||||||
#print(get_turns(pdb_file.residues))
|
|
||||||
#print(pdb_file.residues[27].h_bond(pdb_file.residues[28]))
|
|
||||||
#print(get_bridges(pdb_file.residues))
|
|
||||||
|
|
||||||
|
|
||||||
#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)
|
|
||||||
ladders = get_ladders(bridges, pdb_file.residues)
|
|
||||||
sheets = get_sheets(ladders)
|
|
||||||
|
|
||||||
# print("NBRIDGES",len(bridges))
|
# print("NBRIDGES",len(bridges))
|
||||||
|
|
||||||
|
|
@ -36,32 +26,51 @@ else:
|
||||||
|
|
||||||
# get_bonds(pdb_file.residues)
|
# get_bonds(pdb_file.residues)
|
||||||
|
|
||||||
residues = pdb_file.residues
|
|
||||||
e_min = 0
|
# e_min = 0
|
||||||
for res in residues:
|
# for res in residues:
|
||||||
ene = residues[1].h_bond(res)
|
# ene = residues[1].h_bond(res)
|
||||||
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)
|
#get_phi_psi(residues)
|
||||||
#print(residues[2].atoms, residues[0].resid, residues[1].resid)
|
#print(residues[2].atoms, residues[0].resid, residues[1].resid)
|
||||||
#print(get_TCO(residues[2],residues[3]))
|
#print(get_TCO(residues[2],residues[3]))
|
||||||
|
|
||||||
|
|
||||||
|
# for i,ladder in enumerate(ladders.values()):
|
||||||
|
# print(chr(65+i))
|
||||||
|
|
||||||
|
# for ind, sheet in sheets.items():
|
||||||
|
# print(ind, sheet)
|
||||||
|
# for ladder in sheet:
|
||||||
|
# print(ladder['start'], ladder['end'])
|
||||||
|
|
||||||
|
|
||||||
|
################### OUTPUT ####################
|
||||||
|
# print DSSP-style formatted header of PDB file
|
||||||
|
for elem in pdb_file.get_header() :
|
||||||
|
print(pdb_file.get_header()[elem], end="")
|
||||||
|
|
||||||
|
# Get preliminary data for print loop
|
||||||
|
residues = pdb_file.residues
|
||||||
|
bridges = get_bridges(residues)
|
||||||
|
ladders = get_ladders(bridges, residues)
|
||||||
|
sheets = get_sheets(ladders)
|
||||||
|
|
||||||
|
# iterating over residues
|
||||||
for i,res in enumerate(residues):
|
for i,res in enumerate(residues):
|
||||||
#res.get_turns(residues, turns)
|
#res.get_turns(residues, turns)
|
||||||
res.get_helix(residues)
|
#res.get_helix(residues)
|
||||||
#res.get_bridges(residues)
|
kappa = res.get_bends(residues)
|
||||||
#res.get_ladders(residues, ladders)
|
t_co = res.get_tco(residues)
|
||||||
#res.get_sheets(residues)
|
alpha = res.get_chirality(residues)[0]
|
||||||
|
phi = res.get_phi_psi(residues)[0]
|
||||||
for i,ladder in enumerate(ladders.values()):
|
psi = res.get_phi_psi(residues)[1]
|
||||||
print(chr(65+i))
|
x_ca = res.atoms["CA"].coord_x
|
||||||
|
y_ca = res.atoms["CA"].coord_y
|
||||||
for ind, sheet in sheets.items():
|
z_ca = res.atoms["CA"].coord_z
|
||||||
print(ind, sheet)
|
print(i+1, res.resid, res.chain_id, res.res_letter, round(t_co, 3), round(kappa,1),
|
||||||
for ladder in sheet:
|
round(alpha, 1), round(phi, 1), round(psi,1), round(x_ca,1), round(y_ca,1), round(z_ca,1))
|
||||||
print(ladder['start'], ladder['end'])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import math
|
import math
|
||||||
|
import numpy as np
|
||||||
def vector_from_pos(a, b):
|
def vector_from_pos(a, b):
|
||||||
xAB = b[0]-a[0]
|
xAB = b[0]-a[0]
|
||||||
yAB = b[1]-a[1]
|
yAB = b[1]-a[1]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue