Réimplémentation du programme DSSP en Python

structure.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. class Turn:
  2. def __init__(self, turn_type, res_num):
  3. self.turn_type = turn_type
  4. class Bridge:
  5. def __init__(self, bridge_type, res_num):
  6. self.bridge_type = bridge_type
  7. self.res_num = res_num
  8. class Helix:
  9. def __init__(self, residues):
  10. self.residues = residues
  11. def get_turns(residues):
  12. turns = []
  13. for i,res in enumerate(residues):
  14. for j in range(3,6):
  15. if(i+j<len(residues)):
  16. if(res.h_bond(residues[i+j]<-0.5)):
  17. turns.append(Turn(j,i))
  18. return(turns)
  19. def get_bridges(residues):
  20. bridges = []
  21. bridge = {}
  22. strongest_bridge = {}
  23. for i in range(1,len(residues)-4):
  24. E_min = 0
  25. for j in range(i+2,len(residues)-1):
  26. # select triplet with the minimal energy
  27. if(residues[i-1].h_bond(residues[j])<-0.5
  28. and residues[j].h_bond(residues[i+1])<-0.5):
  29. bridge = {'res1':residues[i-1].h_bond(residues[j]),
  30. 'res2':residues[j].h_bond(residues[i+1]),
  31. 'ipos':i,
  32. 'jpos':j,
  33. 'btype':"para"}
  34. # if(residues[i-1].h_bond(residues[j])+
  35. # residues[j].h_bond(residues[i+1]))<E_min:
  36. # E_min = residues[i-1].h_bond(residues[j])
  37. # +residues[j].h_bond(residues[i+1])
  38. # bridge_type = "para"
  39. if(residues[j-1].h_bond(residues[i])<-0.5
  40. and residues[i].h_bond(residues[j+1])<-0.5):
  41. bridge = {'res1':residues[j-1].h_bond(residues[i]),
  42. 'res2':residues[i].h_bond(residues[j+1]),
  43. 'ipos':i,
  44. 'jpos':j,
  45. 'btype':"para"}
  46. # if(residues[j-1].h_bond(residues[i])+
  47. # residues[i].h_bond(residues[j+1]))<E_min:
  48. # E_min = residues[j-1].h_bond(residues[i])
  49. # +residues[i].h_bond(residues[j+1])
  50. # bridge_type = "para"
  51. if(residues[i].h_bond(residues[j])<-0.5
  52. and residues[j].h_bond(residues[i])<-0.5):
  53. bridge = {'res1':residues[i].h_bond(residues[j]),
  54. 'res2':residues[j].h_bond(residues[i]),
  55. 'ipos':i,
  56. 'jpos':j,
  57. 'btype':"anti"}
  58. # if(residues[i].h_bond(residues[j])+
  59. # residues[j].h_bond(residues[i]))<E_min:
  60. # E_min = residues[i].h_bond(residues[j])
  61. # +residues[j].h_bond(residues[i])
  62. # bridge_type = "anti"
  63. if(residues[i-1].h_bond(residues[j+1])<-0.5
  64. and residues[j-1].h_bond(residues[i+1])<-0.5):
  65. bridge = {'res1':residues[i-1].h_bond(residues[j+1]),
  66. 'res2':residues[j-1].h_bond(residues[i+1]),
  67. 'ipos':i,
  68. 'jpos':j,
  69. 'btype':"anti"}
  70. # if(residues[i-1].h_bond(residues[j+1])+
  71. # residues[j-1].h_bond(residues[i+1]))<E_min:
  72. # E_min = residues[i-1].h_bond(residues[j+1])
  73. # +residues[j-1].h_bond(residues[i+1])
  74. # bridge_type = "anti"
  75. if(bridge):
  76. if(bridge['res1']+bridge['res2']<E_min):
  77. E_min = bridge['res1']+bridge['res2']
  78. strongest_bridge = bridge
  79. bridge = {}
  80. # finally add the strongest bridge at i and j pos
  81. if(strongest_bridge):
  82. bridges.append(Bridge(strongest_bridge['btype'],
  83. strongest_bridge['ipos']))
  84. bridges.append(Bridge(strongest_bridge['btype'],
  85. strongest_bridge['jpos']))
  86. if(len(bridges)>0):
  87. return(bridges)
  88. else:
  89. return(False)
  90. def get_helix(residues, turns):
  91. for i in range(residues):
  92. for j in range(i+1,i+5):
  93. if