From d745b942bda3ead2dbafd1301f42dc64a470e6da Mon Sep 17 00:00:00 2001 From: Thomas Forest Date: Wed, 18 Sep 2019 11:51:52 +0200 Subject: [PATCH] Implemented bridge search algorithm --- src/atom.py | 60 +++++++++++++++++++++++++++++++++-------------------- src/dssp.py | 8 ++++++- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/atom.py b/src/atom.py index 92a78da..a4c754c 100644 --- a/src/atom.py +++ b/src/atom.py @@ -262,8 +262,9 @@ def connected_ladders(ladd_1, ladd_2): links = [] for bridge in ladd_1['bridges']: if bridge.res_partner in res_list(ladd_2): - return([ladd_1['i'], ladd_1['j'], bridge.i, bridge.j, - ladd_2['i'], ladd_2['j']]) + # return([ladd_1['i'], ladd_1['j'], bridge.i, bridge.j, + # ladd_2['i'], ladd_2['j']]) + return ladd_2 return False @@ -276,29 +277,44 @@ def get_sheets(ladders): """ ladds = [ elem for elem in ladders.values() ] sheets = {} - i = 0 - while i < len(ladds): - j = i+1 - ladd = ladds[i] - ladd1 = ladds[i] - ladd2 = ladds[j] - while j < len(ladds): - print(connected_ladders(ladd1, ladd2)) + corresp = {} + for ladd1 in ladds: + for ladd2 in ladds: if connected_ladders(ladd1, ladd2)!=False: - ladd1 = ladd2 - #print(connected_ladders(ladd1, ladd2)[4]) - ladd2 = ladders[connected_ladders(ladd1, ladd2)[4]] - j+=1 - print(ladd['i'], ladd2['i']) - i+=1 - # 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']) + corresp_list = [ elem for elem in corresp.keys() ] + if ladd1['i'] not in corresp_list and ladd2['i'] not in corresp_list: + ind = len(sheets.keys()) + sheets[ind] = [] + sheets[ind].append(ladd1) + sheets[ind].append(ladd2) + corresp[ladd1['i']] = ind + corresp[ladd2['i']] = ind + elif ladd2 not in corresp_list and ladd1 in corresp_list: + sheets[corresp[ladd1['i']]].append(ladd2) + corresp[ladd2['i']] = corresp[ladd1['i']] + 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): # TODO : method in ladder class l=[] diff --git a/src/dssp.py b/src/dssp.py index 955df8d..8d72452 100644 --- a/src/dssp.py +++ b/src/dssp.py @@ -28,7 +28,7 @@ else: # get_chirality(pdb_file.residues) bridges = get_bridges(pdb_file.residues) ladders = get_ladders(bridges, pdb_file.residues) - get_sheets(ladders) + sheets = get_sheets(ladders) # print("NBRIDGES",len(bridges)) @@ -59,3 +59,9 @@ else: 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']) + +