-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgenerateSequences.py
executable file
·64 lines (58 loc) · 1.65 KB
/
generateSequences.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
57
58
59
60
61
62
63
64
"""
Generating random sequences for testing the global sequence alignment algorithm.
python generateSequences.py
@Chuankai Zhao, czhao37@illinois.edu
"""
import random
#Create a random sequence.
def creat_seq(L):
seq = ""
for i in range(L):
random.seed()
num = random.random()
if 0. <= num < 0.25:
seq = seq + "A"
if 0.25 <= num < 0.5:
seq = seq + "C"
if 0.5 <= num < 0.75:
seq = seq + "G"
if 0.75 <= num <= 1.0:
seq = seq + "T"
return seq
#Randomly mutate the sequences.
def mutate_seq(seq,L):
N = int(L/10)
for i in range(N):
random.seed()
pos = random.randrange(0,len(seq))
var_1 = random.random()
if 0. <= var_1 < 0.5:
list = ['A','C','G','T']
list.remove(seq[pos])
var_2 = random.random()
if 0. <= var_2 < 1./3:
seq = seq[0:pos] + list[0] + seq[pos+1:]
if 1./3 <= var_2 < 2./3:
seq = seq[0:pos] + list[1] + seq[pos+1:]
if 2./3 <= var_2 < 1.:
seq = seq[0:pos] + list[2] + seq[pos+1:]
if 0.5 <= var_1 <= 1.:
if pos == 0:
seq = seq[1:]
if pos != 0:
seq = seq[0:pos] + seq[pos+1:]
return seq
#Main program.
if __name__ == "__main__":
L = 100
seq1 = creat_seq(L)
seq2 = mutate_seq(seq1,L)
seq3 = mutate_seq(seq1,L)
f1 = open("seq2.fasta", "w")
f1.write(">seq2\n")
f1.write(seq2)
f1.close()
f2 = open("seq3.fasta", "w")
f2.write(">seq3\n")
f2.write(seq3)
f2.close()