Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. from Bio.SubsMat import MatrixInfo
  2. from Bio import SeqIO
  3.  
  4. def global_alignment_score(input):
  5. return tmp(input)[1]
  6.  
  7. def affine_penalty(sigma, eps, k):
  8. return sigma + eps * (k - 1)
  9.  
  10.  
  11. def tmp(input):
  12. blosum = MatrixInfo.blosum62
  13. fasta_sequences = SeqIO.parse(open(input), 'fasta')
  14. first = str(next(fasta_sequences).seq)
  15. second = str(next(fasta_sequences).seq)
  16. gap_opening = 11
  17. gap_extension = 1
  18.  
  19. lower = [[0]]
  20. middle = [[("",0)]]
  21. upper = [[0]]
  22.  
  23. # 1 = rechts 0 = schuin 2 = onder
  24.  
  25. for i in range(1,len(first)+1):
  26. upper[0].append(-gap_opening)
  27. lower[0].append(-affine_penalty(gap_opening, gap_extension, i))
  28. middle[0].append(("1",-affine_penalty(gap_opening, gap_extension, i)))
  29.  
  30.  
  31. for i in range(1, len(second)+1):
  32. lower.append([-gap_opening])
  33. upper.append([-affine_penalty(gap_opening, gap_extension, i)])
  34. middle.append([("2", -affine_penalty(gap_opening, gap_extension, i))])
  35.  
  36.  
  37. for i in range(1, len(second)+1):
  38. for j in range(1, len(first)+1):
  39. maxLower = max(lower[i-1][j]-gap_extension, middle[i-1][j][1]-gap_opening)
  40. maxUpper = max(upper[i][j-1]-gap_extension, middle[i][j-1][1]-gap_opening)
  41.  
  42. maxMiddle = middle[i-1][j-1][1]
  43. code = 0
  44. if (first[j - 1], second[i - 1]) in blosum:
  45. maxMiddle += blosum[(first[j - 1], second[i - 1])]
  46. else:
  47. maxMiddle += blosum[(second[i - 1], first[j - 1])]
  48.  
  49. if maxLower > maxMiddle:
  50. code = 2
  51. maxMiddle = maxLower
  52. if maxUpper > maxMiddle:
  53. code = 1
  54. maxMiddle = maxUpper
  55.  
  56. lower[i].append(maxLower)
  57. upper[i].append(maxUpper)
  58. middle[i].append((middle[i-1][j-1][0]+str(code), maxMiddle))
  59.  
  60. code = middle[-1][-1][0]
  61. fi = []
  62. se = []
  63. index1 = 0
  64. index2 = 0
  65. for i in range(0, len(code)):
  66. if code[i] == '0':
  67. fi.append(first[index1])
  68. se.append(second[index2])
  69. index1 += 1
  70. index2 += 1
  71. elif code[i] == '1':
  72. fi.append(first[index1])
  73. se.append('-')
  74. index1 += 1
  75. else:
  76. fi.append('-')
  77. se.append(second[index2])
  78. index2 += 1
  79.  
  80. return [(''.join(fi), ''.join(se)), middle[-1][-1][1]]
  81.  
  82.  
  83. def global_alignment(input):
  84. return tmp(input)[0]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement