Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.19 KB | None | 0 0
  1.  
  2. similarity_table = {'a': {'a': 2, 'g': -2, 'c': -2, 't': -2, '-': -1},
  3.                     'g': {'a': -2, 'g': 2, 'c': -2, 't': -2, '-': -1},
  4.                     'c': {'a': -2, 'g': -2, 'c': 2, 't': -2, '-': -1},
  5.                     't': {'a': -2, 'g': -2, 'c': -2, 't': 2, '-': -1},
  6.                     '-': {'a': -1, 'g': -1, 'c': -1, 't': -1, '-': 0}}
  7.  
  8.  
  9. def similarity(table, a, b):
  10.     if a in table and b in table[a]:
  11.         return table[a][b]
  12.     else:
  13.         return 0
  14.  
  15.  
  16. def optimal_alignment(code_a, code_b, array):
  17.     i = len(code_a)
  18.     j = len(code_b)
  19.  
  20.     alignment_a = ""
  21.     alignment_b = ""
  22.  
  23.     while not (i == 0 and j == 0):
  24.         value_both = array[i - 1][j - 1]
  25.         value_a = array[i - 1][j]
  26.         value_b = array[i][j - 1]
  27.  
  28.         max_value = max(value_both, value_a, value_b)
  29.         if max_value == value_both:
  30.             alignment_a = code_a[i - 1] + alignment_a
  31.             alignment_b = code_b[j - 1] + alignment_b
  32.             i -= 1
  33.             j -= 1
  34.         elif max_value == value_a:
  35.             alignment_b = '-' + alignment_b
  36.             alignment_a = code_a[i - 1] + alignment_a
  37.             i -= 1
  38.         else:
  39.             alignment_a = '-' + alignment_a
  40.             alignment_b = code_b[j - 1] + alignment_b
  41.             j -= 1
  42.  
  43.     return alignment_a, alignment_b
  44.  
  45.  
  46. def test(code_a, code_b):
  47.     n = len(code_a) + 1
  48.     m = len(code_b) + 1
  49.     array = [[0 for j in range(m)] for i in range(n)]
  50.  
  51.     for i in range(1, n):
  52.         array[i][0] = similarity(similarity_table, '-', code_a[i - 1]) + array[i - 1][0]
  53.  
  54.     for j in range(1, m):
  55.         array[0][j] = similarity(similarity_table, code_b[j - 1], '-') + array[0][j - 1]
  56.  
  57.     for i in range(1, n):
  58.         for j in range(1, m):
  59.             array[i][j] = max(array[i - 1][j - 1] + similarity(similarity_table, code_a[i - 1], code_b[j - 1]),
  60.                               array[i][j - 1] + similarity(similarity_table, '-', code_a[i - 1]),
  61.                               array[i - 1][j] + similarity(similarity_table, code_b[j - 1], '-'))
  62.     print array
  63.     a, b = optimal_alignment(code_a, code_b, array)
  64.     print a
  65.     print b
  66.  
  67. test('tcagtcgatagtcgatcg', 'tctctggagtcgatctgg')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement