-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathedta.py
56 lines (48 loc) · 1.47 KB
/
edta.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @File : edta.py
# @Date : 18-10-29
# @Author : luyang([email protected])
from edit import edit
from module.readfasta import readfasta
def trace(dist, seq1, seq2):
i = len(seq1)
j = len(seq2)
seq1_edit = []
seq2_edit = []
while dist[i, j] != 0:
if seq1[i - 1] == seq2[j - 1]:
i -= 1
j -= 1
seq1_edit.append(seq1[i])
seq2_edit.append(seq2[j])
else:
if dist[i - 1, j - 1] == dist[i, j] - 1:
i -= 1
j -= 1
seq1_edit.append(seq1[i])
seq2_edit.append(seq2[j])
if dist[i - 1, j] == dist[i, j] - 1:
i -= 1
seq1_edit.append(seq1[i])
seq2_edit.append('-')
if dist[i, j - 1] == dist[i, j] - 1:
j -= 1
seq1_edit.append('-')
seq2_edit.append(seq2[j])
seq1_edit = seq1[0:i] + ''.join(seq1_edit[::-1])
seq2_edit = seq2[0:j] + ''.join(seq2_edit[::-1])
return seq1_edit, seq2_edit
def main():
file = 'input/rosalind_edit.txt'
fasta_seq_dict = readfasta(file)
keys = list(fasta_seq_dict.keys())
seq1 = fasta_seq_dict[keys[0]]
seq2 = fasta_seq_dict[keys[1]]
dist = edit(seq1, seq2)
print(dist[-1, -1])
(seq1_edit, seq2_edit) = trace(dist, seq1, seq2)
print(seq1_edit)
print(seq2_edit)
if __name__ == "__main__":
main()