From bc420e46568294e3b60c66585d40189857a0ee64 Mon Sep 17 00:00:00 2001 From: Thomas Forest Date: Mon, 16 Sep 2019 15:24:42 +0200 Subject: [PATCH] Experimental get_sheets() function --- src/atom.py | 1 + src/dssp.py | 3 ++- src/structure.py | 45 +++++++++++++++++++++++++++++++++++++-------- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/atom.py b/src/atom.py index a9cb136..95abcb1 100644 --- a/src/atom.py +++ b/src/atom.py @@ -38,6 +38,7 @@ class Residue: #e = 1.602176634 * 10*math.exp(-19) # dimensionnal factor f f = 332 + # partial charges q1 = 0.42 q2 = 0.20 # r, distance between O-N atoms, in angströms diff --git a/src/dssp.py b/src/dssp.py index 08fcba9..8c80f19 100644 --- a/src/dssp.py +++ b/src/dssp.py @@ -20,4 +20,5 @@ else: get_bends(pdb_file.residues) get_chirality(pdb_file.residues) bridges = get_bridges(pdb_file.residues) - get_ladders(bridges) + ladders = get_ladders(bridges) + get_sheets(ladders) diff --git a/src/structure.py b/src/structure.py index df720b8..0d47bda 100644 --- a/src/structure.py +++ b/src/structure.py @@ -13,9 +13,10 @@ class Turn(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.res_num = res_num + self.res_partner = res_partner Structure.res = res_num class Helix(Structure): @@ -26,6 +27,7 @@ class Helix(Structure): Structure.res = res_num def get_turns(residues): + # TODO : prevent redondency of overlapping turns turns = {} for i,res in enumerate(residues): for j in range(3,6): @@ -103,9 +105,11 @@ def get_bridges(residues): # finally add the strongest bridge at i and j pos if(strongest_bridge): bridges[strongest_bridge['ipos']] = (Bridge(strongest_bridge['btype'], - strongest_bridge['ipos'])) + strongest_bridge['ipos'], + strongest_bridge['jpos'])) bridges[strongest_bridge['jpos']] = (Bridge(strongest_bridge['btype'], - strongest_bridge['jpos'])) + strongest_bridge['jpos'], + strongest_bridge['ipos'])) if(len(bridges)>0): return(bridges) else: @@ -134,21 +138,46 @@ def get_ladders(bridges): i = 1 while i < len(bridges): k = 1 - while (((i in bridges.keys()) and (i+k in bridges.keys())) and - (bridges[i].bridge_type == bridges[i+k].bridge_type)): - k+=1 + 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)): + temp_bridges.append(bridges[i+k]) + k+=1 if k>1: ladders[bridges[i].res_num] = k-1 print("ladder", bridges[i].res_num, bridges[i+k-1].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 else: 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): bends = {} for i in range(2,len(residues)-2):