Implemented bridge search algorithm

master
Thomas Forest 2019-09-18 11:51:52 +02:00
parent a242afd662
commit d745b942bd
2 changed files with 45 additions and 23 deletions

View File

@ -262,8 +262,9 @@ def connected_ladders(ladd_1, ladd_2):
links = [] links = []
for bridge in ladd_1['bridges']: for bridge in ladd_1['bridges']:
if bridge.res_partner in res_list(ladd_2): if bridge.res_partner in res_list(ladd_2):
return([ladd_1['i'], ladd_1['j'], bridge.i, bridge.j, # return([ladd_1['i'], ladd_1['j'], bridge.i, bridge.j,
ladd_2['i'], ladd_2['j']]) # ladd_2['i'], ladd_2['j']])
return ladd_2
return False return False
@ -276,28 +277,43 @@ def get_sheets(ladders):
""" """
ladds = [ elem for elem in ladders.values() ] ladds = [ elem for elem in ladders.values() ]
sheets = {} sheets = {}
i = 0
while i < len(ladds):
j = i+1
ladd = ladds[i]
ladd1 = ladds[i]
ladd2 = ladds[j]
while j < len(ladds): corresp = {}
print(connected_ladders(ladd1, ladd2)) for ladd1 in ladds:
for ladd2 in ladds:
if connected_ladders(ladd1, ladd2)!=False: if connected_ladders(ladd1, ladd2)!=False:
ladd1 = ladd2 corresp_list = [ elem for elem in corresp.keys() ]
#print(connected_ladders(ladd1, ladd2)[4]) if ladd1['i'] not in corresp_list and ladd2['i'] not in corresp_list:
ladd2 = ladders[connected_ladders(ladd1, ladd2)[4]] ind = len(sheets.keys())
j+=1 sheets[ind] = []
print(ladd['i'], ladd2['i']) sheets[ind].append(ladd1)
i+=1 sheets[ind].append(ladd2)
# for ladder in ladders: corresp[ladd1['i']] = ind
# for ladd2 in ladders: corresp[ladd2['i']] = ind
# if connected_ladders(ladders[ladder], ladders[ladd2]): elif ladd2 not in corresp_list and ladd1 in corresp_list:
# pass sheets[corresp[ladd1['i']]].append(ladd2)
#print("ladder",ladders[ladder]['i'], ladders[ladder]['j'],"bridge",bridge.i, bridge.j, corresp[ladd2['i']] = corresp[ladd1['i']]
# "ladder 2",ladders[ladd2]['i'], ladders[ladd2]['j']) elif ladd1 not in corresp_list and ladd2 in corresp_list:
sheets[corresp[ladd2['i']]].append(ladd1)
corresp[ladd1['i']] = corresp[ladd2['i']]
return sheets
def get_sheets2(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.
"""
sheets = {}
for ladder in ladders:
for ladd2 in ladders:
if connected_ladders(ladders[ladder], ladders[ladd2]):
pass
print("ladder",ladders[ladder]['i'], ladders[ladder]['j'],"bridge",bridge.i, bridge.j,
"ladder 2",ladders[ladd2]['i'], ladders[ladd2]['j'])
def res_list(ladder): def res_list(ladder):
# TODO : method in ladder class # TODO : method in ladder class

View File

@ -28,7 +28,7 @@ else:
# 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) sheets = get_sheets(ladders)
# print("NBRIDGES",len(bridges)) # print("NBRIDGES",len(bridges))
@ -59,3 +59,9 @@ else:
for i,ladder in enumerate(ladders.values()): for i,ladder in enumerate(ladders.values()):
print(chr(65+i)) print(chr(65+i))
for ind, sheet in sheets.items():
print(ind, sheet)
for ladder in sheet:
print(ladder['start'], ladder['end'])