51 lines
1.7 KiB
Text
51 lines
1.7 KiB
Text
UInt32 seed = 0
|
||
F nonrandom(n)
|
||
:seed = 1664525 * :seed + 1013904223
|
||
R Int(:seed >> 16) % n
|
||
F nonrandom_choice(lst)
|
||
R lst[nonrandom(lst.len)]
|
||
|
||
F basecount(dna)
|
||
DefaultDict[Char, Int] d
|
||
L(c) dna
|
||
d[c]++
|
||
R sorted(d.items())
|
||
|
||
F seq_split(dna, n = 50)
|
||
R (0 .< dna.len).step(n).map(i -> @dna[i .< i + @n])
|
||
|
||
F seq_pp(dna, n = 50)
|
||
L(part) seq_split(dna, n)
|
||
print(‘#5: #.’.format(L.index * n, part))
|
||
print("\n BASECOUNT:")
|
||
V tot = 0
|
||
L(base, count) basecount(dna)
|
||
print(‘ #3: #.’.format(base, count))
|
||
tot += count
|
||
V (base, count) = (‘TOT’, tot)
|
||
print(‘ #3= #.’.format(base, count))
|
||
|
||
F seq_mutate(String =dna; count = 1, kinds = ‘IDSSSS’, choice = ‘ATCG’)
|
||
[(String, Int)] mutation
|
||
V k2txt = [‘I’ = ‘Insert’, ‘D’ = ‘Delete’, ‘S’ = ‘Substitute’]
|
||
L 0 .< count
|
||
V kind = nonrandom_choice(kinds)
|
||
V index = nonrandom(dna.len + 1)
|
||
I kind == ‘I’
|
||
dna = dna[0 .< index]‘’nonrandom_choice(choice)‘’dna[index..]
|
||
E I kind == ‘D’ & !dna.empty
|
||
dna = dna[0 .< index]‘’dna[index+1..]
|
||
E I kind == ‘S’ & !dna.empty
|
||
dna = dna[0 .< index]‘’nonrandom_choice(choice)‘’dna[index+1..]
|
||
mutation.append((k2txt[kind], index))
|
||
R (dna, mutation)
|
||
|
||
print(‘SEQUENCE:’)
|
||
V sequence = ‘TCAATCATTAATCGATTAATACATTCAATTTGAACATCTCCAGGAGAAGGCAGGGTAATCTCGTGTAGCCGTGCTTGGGGCCTCCGATATGGCCGGGGAATTTCAAAGTATAGTGTGCATCCCCTCATAATACATAGATCTATAGGTAAGTATATGGGTTGACGTTGTTAGATGCGATACACGTGCACACTTTATGAATTTTACGTTCCTCTGCCTAGAGTGCCAAGTTTCAATTTGCTACGGTTCCTCA’
|
||
seq_pp(sequence)
|
||
print("\n\nMUTATIONS:")
|
||
V (mseq, m) = seq_mutate(sequence, 10)
|
||
L(kind, index) m
|
||
print(‘ #10 @#.’.format(kind, index))
|
||
print()
|
||
seq_pp(mseq)
|