Advertisement
Guest User

bio6

a guest
Mar 27th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. import numpy
  2.  
  3.  
  4. seq1 = "GCATGCC"
  5. seq2 = "GATTACA"
  6.  
  7. sim_matrix = {
  8. ('A','A'): +2, ('A','G'): -1, ('A','C'): -1, ('A','T'): -1,
  9. ('G','A'): -1, ('G','G'): +2, ('G','C'): -1, ('G','T'): -1,
  10. ('C','A'): -1, ('C','G'): -1, ('C','C'): +2, ('C','T'): -1,
  11. ('T','A'): -1, ('T','G'): -1, ('T','C'): -1, ('T','T'): +2
  12. }
  13.  
  14. gap_penalty = -1
  15.  
  16. rows, cols = len(seq1)+1, len(seq2)+1
  17.  
  18. M = numpy.zeros((rows, cols), int)
  19. P = numpy.zeros((rows, cols), int) #1 = diag, 2 = left, 3 = up
  20. # dynamic programming
  21. """
  22. for i in range(rows):
  23. M[i][0] = i * gap_penalty
  24. for j in range(cols):
  25. M[0][j] = j * gap_penalty"""
  26. for i in range(1, rows):
  27. for j in range(1, cols):
  28. diagonal = M[i-1][j-1] + sim_matrix[(seq1[i-1], seq2[j-1])]
  29. up = M[i-1][j] + gap_penalty
  30. left = M[i][j-1] + gap_penalty
  31.  
  32. M[i][j] = max(diagonal, up, left, 0)
  33.  
  34. if M[i][j] == diagonal:
  35. P[i][j] = 1
  36. elif M[i][j] == left:
  37. P[i][j] = 2
  38. elif M[i][j] == up:
  39. P[i][j] =3
  40.  
  41. print (M)
  42. print (P)
  43. """
  44. # traceback
  45.  
  46. i, j = rows-1, cols-1
  47. al_seq1 = al_seq2 = symbol = ""
  48.  
  49. while i > 0 and j > 0:
  50. score = M[i][j]
  51. diagonal = M[i-1][j-1]
  52. up = M[i-1][j]
  53. left = M[i][j-1]
  54. if score == diagonal + sim_matrix[(seq1[i-1], seq2[j-1])]:
  55. al_seq1 = seq1[i-1] + al_seq1
  56. al_seq2 = seq2[j-1] + al_seq2
  57. if seq1[i-1] == seq2[j-1]:
  58. symbol = "|" + symbol
  59. else:
  60. symbol = " " + symbol
  61. i -= 1
  62. j -= 1
  63. elif score == up + gap_penalty:
  64. al_seq1 = seq1[i-1] + al_seq1
  65. al_seq2 = "-" + al_seq2
  66. symbol = " " + symbol
  67. i -= 1
  68. elif score == left + gap_penalty:
  69. al_seq1 = "-" + al_seq1
  70. al_seq2 = seq2[j-1] + al_seq2
  71. symbol = " " + symbol
  72. j -= 1
  73.  
  74. while i > 0:
  75. al_seq1 = seq1[i-1] + al_seq1
  76. al_seq2 = "-" + al_seq2
  77. symbol = " " + symbol
  78. i -= 1
  79.  
  80. while j > 0:
  81. al_seq1 = "-" + al_seq1
  82. al_seq2 = seq2[j-1] + al_seq2
  83. symbol = " " + symbol
  84. j -= 1
  85.  
  86. print (al_seq1)
  87. print (symbol)
  88. print (al_seq2)"""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement