Bioinformatics/Sequence mutation: Difference between revisions
Content added Content deleted
(Added FreeBasic) |
|||
Line 1,599: | Line 1,599: | ||
└─────┴────┴──────────────────────────────────────────────────┘</pre> |
└─────┴────┴──────────────────────────────────────────────────┘</pre> |
||
=={{header|Java}}== |
=={{header|Java}}== |
||
<p> |
|||
This example use a <code>List</code> to hold the base values.<br /> |
|||
The <code>Random</code> class is used to generate random integer values.<br /> |
|||
A <code>record</code> is used to hold the counts of each base. |
|||
</p> |
|||
<p> |
|||
The "pretty print" is defined within the <code>toString</code> method.<br /> |
|||
Which uses a <code>StringBuilder</code> to generate a <kbd>string</kbd> of sequential bases.<br /> |
|||
A <code>BufferedReader</code> to read the augmented <kbd>string</kbd> line-for-line.<br /> |
|||
Finally, a <kbd>string</kbd> formatter is used to justify and format the output text. |
|||
</p> |
|||
<syntaxhighlight lang="java"> |
|||
import java.io.BufferedReader; |
|||
import java.io.IOException; |
|||
import java.io.StringReader; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.Random; |
|||
class Program { |
|||
List<Character> sequence; |
|||
Random random; |
|||
SequenceMutation() { |
|||
sequence = new ArrayList<>(); |
|||
random = new Random(); |
|||
} |
|||
void generate(int amount) { |
|||
for (int count = 0; count < amount; count++) |
|||
sequence.add(randomBase()); |
|||
} |
|||
void mutate(int amount) { |
|||
int index; |
|||
for (int count = 0; count < amount; count++) { |
|||
index = random.nextInt(0, sequence.size()); |
|||
switch (random.nextInt(0, 3)) { |
|||
case 0 -> sequence.set(index, randomBase()); |
|||
case 1 -> sequence.remove(index); |
|||
case 2 -> sequence.add(index, randomBase()); |
|||
} |
|||
} |
|||
} |
|||
private char randomBase() { |
|||
return switch (random.nextInt(0, 4)) { |
|||
case 0 -> 'A'; |
|||
case 1 -> 'C'; |
|||
case 2 -> 'G'; |
|||
case 3 -> 'T'; |
|||
default -> '?'; |
|||
}; |
|||
} |
|||
private Base count(String string) { |
|||
int a = 0, c = 0, g = 0, t = 0; |
|||
for (char base : string.toCharArray()) { |
|||
switch (base) { |
|||
case 'A' -> a++; |
|||
case 'C' -> c++; |
|||
case 'G' -> g++; |
|||
case 'T' -> t++; |
|||
} |
|||
} |
|||
return new Base(a, c, g, t); |
|||
} |
|||
/* used exclusively for count totals */ |
|||
private record Base(int a, int c, int g, int t) { |
|||
int total() { |
|||
return a + c + g + t; |
|||
} |
|||
@Override |
|||
public String toString() { |
|||
return "[A %2d, C %2d, G %2d, T %2d]".formatted(a, c, g, t); |
|||
} |
|||
} |
|||
@Override |
|||
public String toString() { |
|||
StringBuilder string = new StringBuilder(); |
|||
StringBuilder stringB = new StringBuilder(); |
|||
String newline = System.lineSeparator(); |
|||
for (int index = 0; index < sequence.size(); index++) { |
|||
if (index != 0 && index % 50 == 0) |
|||
string.append(newline); |
|||
string.append(sequence.get(index)); |
|||
stringB.append(sequence.get(index)); |
|||
} |
|||
try { |
|||
BufferedReader reader = new BufferedReader(new StringReader(string.toString())); |
|||
string = new StringBuilder(); |
|||
int count = 0; |
|||
String line; |
|||
while ((line = reader.readLine()) != null) { |
|||
string.append(count++); |
|||
string.append(" %-50s ".formatted(line)); |
|||
string.append(count(line)); |
|||
string.append(newline); |
|||
} |
|||
} catch (IOException exception) { |
|||
/* ignore */ |
|||
} |
|||
string.append(newline); |
|||
Base bases = count(stringB.toString()); |
|||
int total = bases.total(); |
|||
string.append("Total of %d bases%n".formatted(total)); |
|||
string.append("A %3d (%.2f%%)%n".formatted(bases.a, ((double) bases.a / total) * 100)); |
|||
string.append("C %3d (%.2f%%)%n".formatted(bases.c, ((double) bases.c / total) * 100)); |
|||
string.append("G %3d (%.2f%%)%n".formatted(bases.g, ((double) bases.g / total) * 100)); |
|||
string.append("T %3d (%.2f%%)%n".formatted(bases.t, ((double) bases.t / total) * 100)); |
|||
return string.toString(); |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
<p> |
|||
Here is a sequence of 200 mutated 10 times. |
|||
</p> |
|||
<pre> |
|||
Before mutation |
|||
0 TCGCTTGGGGGGAGCAAGGTGTTCGCAATAGATCACAGCCGGTCTCGCAT [A 10, C 12, G 17, T 11] |
|||
1 AGCTATTTCTACGCTATCGAGCCTGTACTGTGTCAGTAGACCATGTACTC [A 11, C 13, G 10, T 16] |
|||
2 CCCAGACTCGTCTTGCCAAGTGACTGCTCAAGGGGAGCGCCCACAGGGTA [A 11, C 16, G 15, T 8] |
|||
3 TCTAGAGCATTCGATCACACGGAAAAATTTTATTCGGCAGATCCAGTTAA [A 17, C 10, G 9, T 14] |
|||
Total of 200 bases |
|||
A 49 (24.50%) |
|||
C 51 (25.50%) |
|||
G 51 (25.50%) |
|||
T 49 (24.50%) |
|||
After mutation |
|||
0 TCGCTTGGGGGGAGTAAGGTGTTCGCAATAGTCACAGCCGGTCTCGCATA [A 10, C 11, G 17, T 12] |
|||
1 GCTTTTCTACGCATCGAGCCTGTACTGTGTCAGTAGACATGTACTCCCCA [A 10, C 15, G 10, T 15] |
|||
2 GACTCGTTTGCCAAGTGACCTGCTCAAGGGGAGCGCCCACAGGGTACTAG [A 11, C 14, G 16, T 9] |
|||
3 AGCAGTTCGATCACACGGAAAAATTTTTTCGGCAGATCCAGTTAA [A 15, C 9, G 9, T 12] |
|||
Total of 195 bases |
|||
A 46 (23.59%) |
|||
C 49 (25.13%) |
|||
G 52 (26.67%) |
|||
T 48 (24.62%) |
|||
</pre> |
|||
<p> |
|||
Here is a sequence of 200 mutated 90,000 times |
|||
</p> |
|||
<pre> |
|||
Before mutation |
|||
0 CGCACCCTCCTTCGGGCGAAGCGGGGTTATTTACCCGATTCACCGCACCT [A 8, C 19, G 12, T 11] |
|||
1 CGCGGCTCTAAAAGTTCGAAGATCCCTGCGTAGACTGGACCTCATAACAA [A 15, C 14, G 11, T 10] |
|||
2 CCGTATTACGCTCCGTACGAATAACTCGGTTGTGCGATGCGGAAAGCGAC [A 12, C 13, G 14, T 11] |
|||
3 ATTTCTCAGGCCGAACGTACGCTTCTCTCCTACACCTCGCCTCGAGTATG [A 9, C 18, G 9, T 14] |
|||
Total of 200 bases |
|||
A 44 (22.00%) |
|||
C 64 (32.00%) |
|||
G 46 (23.00%) |
|||
T 46 (23.00%) |
|||
After mutation |
|||
0 CGTTTAAGCGGGAAGGTCGTCCACCACACGAAGGCCCCCCTCCAGCACTA [A 12, C 19, G 12, T 7] |
|||
1 CCCTGGGCGAGTGCGACCGGCTACAAGAATACGGACAACCGCACTTCGTA [A 13, C 16, G 14, T 7] |
|||
2 GTTGCGACGCCAAACCGAGGTTTGAAAGGCAGCCGAAACTCCTAGCCATC [A 14, C 15, G 13, T 8] |
|||
3 CGGGCAGCCCACTGGTTTAGATGTTACGTGATGGAAAGGTGGATCATCGT [A 11, C 9, G 17, T 13] |
|||
4 GGTTGCCCTGGCGTTGCGTACTTCGTGTCTGAATATTGGTTACAATCGCT [A 7, C 11, G 14, T 18] |
|||
5 CGACGACCTGACGATTCTGGATCAACCAACTGCCTAAAGTCGCGAATTAA [A 16, C 14, G 10, T 10] |
|||
6 TAATCGACTGCATCACATGTTAGTCTAGTCATCACGAGTACATAGTGTGG [A 14, C 10, G 11, T 15] |
|||
7 CCACCTCCTAACGTACTATTTACATAGGATATGGCAGCCCTAACGCACAC [A 15, C 17, G 7, T 11] |
|||
8 TGTACGAAAGTGAGACTCCTTACCGAGATTCTAGGCTTAGTGATCCTTGA [A 13, C 10, G 12, T 15] |
|||
9 AAACGCTAGCCTAGGAATGACGGGGACTTGATCGGCC [A 10, C 9, G 12, T 6] |
|||
Total of 487 bases |
|||
A 125 (25.67%) |
|||
C 130 (26.69%) |
|||
G 122 (25.05%) |
|||
T 110 (22.59%) |
|||
</pre> |
|||
<br /> |
|||
Here is an alternate demonstration |
|||
<syntaxhighlight lang="java">import java.util.Arrays; |
<syntaxhighlight lang="java">import java.util.Arrays; |
||
import java.util.Random; |
import java.util.Random; |
||
Line 1,743: | Line 1,924: | ||
A: 71, C: 62, G: 58, T: 61, Total: 252 |
A: 71, C: 62, G: 58, T: 61, Total: 252 |
||
</pre> |
</pre> |
||
=={{header|JavaScript}}== |
=={{header|JavaScript}}== |
||
<syntaxhighlight lang="javascript">// Basic set-up |
<syntaxhighlight lang="javascript">// Basic set-up |