-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDNALoops.java
More file actions
131 lines (124 loc) · 4.71 KB
/
DNALoops.java
File metadata and controls
131 lines (124 loc) · 4.71 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import java.util.Scanner;
/**
*
*
* @author Tejasri Addanki
* @version 10-21-24
*/
public class DNALoops
{
public static void main (String[] args) {
Scanner sequences = new Scanner(System.in);
String sequenceOne;
String sequenceTwo;
// Input for first sequence
do {
System.out.println("Enter a single DNA sequence (capitalize):");
sequenceOne = sequences.nextLine();
if (!validateString(sequenceOne)) {
System.out.println("Invalid sequence! Please enter a valid DNA sequence (only A, T, C, G are allowed).");
}
} while (!validateString(sequenceOne));
validateString(sequenceOne);
cCount(sequenceOne);
fractionOfCG(sequenceOne);
complementary(sequenceOne);
// Input for second sequence
do {
System.out.println("Enter a shorter single DNA sequence (capitalize):");
sequenceTwo = sequences.nextLine();
if (!validateString(sequenceOne)) {
System.out.println("Invalid sequence! Please enter a valid DNA sequence (only A, T, C, G are allowed).");
}
} while (!validateString(sequenceTwo));
validateString(sequenceTwo);
cCount(sequenceTwo);
fractionOfCG(sequenceTwo);
complementary(sequenceTwo);
alignmentScore(sequenceOne, sequenceTwo);
}
public static boolean validateString(String dnaSequence) {
for (int i = 0; i < dnaSequence.length(); i++) {
char nucleotide = dnaSequence.charAt(i);
if (nucleotide != 'A' && nucleotide != 'G' && nucleotide != 'T' && nucleotide != 'C') {
return false;
}
}
return true;
}
public static void cCount(String dnaSequence) {
int counter = 0;
for (int i = 0; i < dnaSequence.length(); i++) {
char nucleotide = dnaSequence.charAt(i);
if (nucleotide == 'C') {
counter++;
}
}
System.out.println("C-counter: " + counter);
}
public static void fractionOfCG(String dnaSequence) {
int counterCG = 0;
for (int i = 0; i < dnaSequence.length(); i++) {
char nucleotide = dnaSequence.charAt(i);
if (nucleotide == 'C'|| nucleotide == 'G') {
counterCG++;
}
}
double ratio = (double) counterCG/dnaSequence.length();
System.out.print("CG-ratio: ");
System.out.printf("%.3f", ratio);
System.out.println();
}
public static void complementary(String dnaSequence) {
String complementarySequence = "";
for (int i = 0; i < dnaSequence.length(); i++) {
char nucleotide = dnaSequence.charAt(i);
if (nucleotide == 'A') {
complementarySequence += "T";
} else if (nucleotide == 'T') {
complementarySequence += "A";
} else if (nucleotide == 'C') {
complementarySequence += "G";
} else {
complementarySequence += "C";
}
}
System.out.println("Complement: " + complementarySequence);
}
public static void alignmentScore(String sequenceOne, String sequenceTwo) {
String longerSequence, shorterSequence;
int movementLimit; // limits the number of positions the shorter sequence can be shifted
if (sequenceOne.length() > sequenceTwo.length()) {
longerSequence = sequenceOne;
shorterSequence = sequenceTwo;
movementLimit = sequenceOne.length() - sequenceTwo.length();
} else {
longerSequence = sequenceTwo;
shorterSequence = sequenceOne;
movementLimit = sequenceTwo.length() - sequenceOne.length();
}
int bestScore = 0;
int bestAlignment = 0;
// Try all possible alignments
for (int i = 0; i <= movementLimit; i++) {
int currentScore = 0;
// Calculates score for this alignment
for (int j = 0; j < shorterSequence.length(); j++) {
if (longerSequence.charAt(j + i) == (shorterSequence.charAt(j))) {
currentScore++;
}
}
// Checks if this alignment is better than previous best
if (currentScore > bestScore) {
bestScore = currentScore;
bestAlignment = i;
}
}
System.out.println("Best alignment score: " + bestScore);
System.out.println(longerSequence);
for (int k = 0; k < bestAlignment; k++) {
System.out.print("");
}
System.out.println(shorterSequence);
}
}