Experimental get_sheets() function

master
Thomas Forest 2019-09-16 15:24:42 +02:00
parent 1621940855
commit bc420e4656
3 changed files with 40 additions and 9 deletions

View File

@ -38,6 +38,7 @@ class Residue:
#e = 1.602176634 * 10*math.exp(-19) #e = 1.602176634 * 10*math.exp(-19)
# dimensionnal factor f # dimensionnal factor f
f = 332 f = 332
# partial charges
q1 = 0.42 q1 = 0.42
q2 = 0.20 q2 = 0.20
# r, distance between O-N atoms, in angströms # r, distance between O-N atoms, in angströms

View File

@ -20,4 +20,5 @@ else:
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)
get_ladders(bridges) ladders = get_ladders(bridges)
get_sheets(ladders)

View File

@ -13,9 +13,10 @@ class Turn(Structure):
class Bridge(Structure): class Bridge(Structure):
def __init__(self, bridge_type, res_num): def __init__(self, bridge_type, res_num, res_partner):
self.bridge_type = bridge_type self.bridge_type = bridge_type
self.res_num = res_num self.res_num = res_num
self.res_partner = res_partner
Structure.res = res_num Structure.res = res_num
class Helix(Structure): class Helix(Structure):
@ -26,6 +27,7 @@ class Helix(Structure):
Structure.res = res_num Structure.res = res_num
def get_turns(residues): def get_turns(residues):
# TODO : prevent redondency of overlapping turns
turns = {} turns = {}
for i,res in enumerate(residues): for i,res in enumerate(residues):
for j in range(3,6): for j in range(3,6):
@ -103,9 +105,11 @@ def get_bridges(residues):
# finally add the strongest bridge at i and j pos # finally add the strongest bridge at i and j pos
if(strongest_bridge): if(strongest_bridge):
bridges[strongest_bridge['ipos']] = (Bridge(strongest_bridge['btype'], bridges[strongest_bridge['ipos']] = (Bridge(strongest_bridge['btype'],
strongest_bridge['ipos'])) strongest_bridge['ipos'],
bridges[strongest_bridge['jpos']] = (Bridge(strongest_bridge['btype'],
strongest_bridge['jpos'])) strongest_bridge['jpos']))
bridges[strongest_bridge['jpos']] = (Bridge(strongest_bridge['btype'],
strongest_bridge['jpos'],
strongest_bridge['ipos']))
if(len(bridges)>0): if(len(bridges)>0):
return(bridges) return(bridges)
else: else:
@ -134,20 +138,45 @@ def get_ladders(bridges):
i = 1 i = 1
while i < len(bridges): while i < len(bridges):
k = 1 k = 1
while (((i in bridges.keys()) and (i+k in bridges.keys())) and if i in bridges.keys():
temp_bridges = [bridges[i]]
while ((i+k in bridges.keys()) and
(bridges[i].bridge_type == bridges[i+k].bridge_type)): (bridges[i].bridge_type == bridges[i+k].bridge_type)):
temp_bridges.append(bridges[i+k])
k+=1 k+=1
if k>1: if k>1:
ladders[bridges[i].res_num] = k-1 ladders[bridges[i].res_num] = 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[bridges[i].res_num] = {'start':bridges[i].res_num, ladders[bridges[i].res_num] = {'start':bridges[i].res_num,
'end':bridges[i+k-1].res_num} 'end':bridges[i+k-1].res_num,
'bridges':temp_bridges}
i+=k-1 i+=k-1
else: else:
i+=1 i+=1
return ladders return ladders
def get_sheets(ladders):
"""
Bridges between ladders.
Check if 1 bridge between one ladder and one or more other ladders.
Iterate over all residues of one ladder and check if bridge with other residues
of the other ladders.
"""
for ladder in ladders:
for bridge in ladders[ladder]['bridges']:
for ladd2 in ladders:
if bridge.res_partner in res_list(ladders[ladd2]):
print("ladder",ladders[ladder]['start'], ladders[ladder]['end'],"bridge",bridge.res_num, bridge.res_partner,
"ladder 2",ladders[ladd2]['start'], ladders[ladd2]['end'])
def res_list(ladder):
# TODO : method in ladder class
l=[]
for i in range(ladder['start'], ladder['end']):
l.append(i)
return(l)
def get_bends(residues): def get_bends(residues):
bends = {} bends = {}