2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.analysis;
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNull;
26 import jalview.datamodel.Sequence;
27 import jalview.datamodel.SequenceI;
29 import org.testng.annotations.Test;
31 public class AAFrequencyTest
33 private static final String C = AAFrequency.MAXCOUNT;
35 private static final String R = AAFrequency.MAXRESIDUE;
37 private static final String G = AAFrequency.PID_GAPS;
39 private static final String N = AAFrequency.PID_NOGAPS;
41 private static final String P = AAFrequency.PROFILE;
43 @Test(groups = { "Functional" })
44 public void testCalculate_noProfile()
46 SequenceI seq1 = new Sequence("Seq1", "CAGT");
47 SequenceI seq2 = new Sequence("Seq2", "CACT");
48 SequenceI seq3 = new Sequence("Seq3", "C--G");
49 SequenceI seq4 = new Sequence("Seq4", "CA-t");
50 SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 };
51 Profile[] result = new Profile[seq1.getLength()];
53 AAFrequency.calculate(seqs, 0, seq1.getLength(), result, false);
56 Profile col = result[0];
57 assertEquals(100f, col.getPercentageIdentity(false));
58 assertEquals(100f, col.getPercentageIdentity(true));
59 assertEquals(4, col.getMaxCount());
60 assertEquals("C", col.getModalResidue());
61 assertNull(col.getCounts());
65 assertEquals(75f, col.getPercentageIdentity(false));
66 assertEquals(100f, col.getPercentageIdentity(true));
67 assertEquals(3, col.getMaxCount());
68 assertEquals("A", col.getModalResidue());
70 // col 2 is 50% G 50% C or 25/25 counting gaps
72 assertEquals(25f, col.getPercentageIdentity(false));
73 assertEquals(50f, col.getPercentageIdentity(true));
74 assertEquals(1, col.getMaxCount());
75 assertEquals("CG", col.getModalResidue());
77 // col 3 is 75% T 25% G
79 assertEquals(75f, col.getPercentageIdentity(false));
80 assertEquals(75f, col.getPercentageIdentity(true));
81 assertEquals(3, col.getMaxCount());
82 assertEquals("T", col.getModalResidue());
85 @Test(groups = { "Functional" })
86 public void testCalculate_withProfile()
88 SequenceI seq1 = new Sequence("Seq1", "CAGT");
89 SequenceI seq2 = new Sequence("Seq2", "CACT");
90 SequenceI seq3 = new Sequence("Seq3", "C--G");
91 SequenceI seq4 = new Sequence("Seq4", "CA-t");
92 SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 };
93 Profile[] result = new Profile[seq1.getLength()];
95 AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true);
96 Profile profile = result[0];
97 assertEquals(4, profile.getCounts().getCount('C'));
98 assertEquals(4, profile.getHeight());
99 assertEquals(4, profile.getNonGapped());
102 assertEquals(3, profile.getCounts().getCount('A'));
103 assertEquals(4, profile.getHeight());
104 assertEquals(3, profile.getNonGapped());
107 assertEquals(1, profile.getCounts().getCount('C'));
108 assertEquals(1, profile.getCounts().getCount('G'));
109 assertEquals(4, profile.getHeight());
110 assertEquals(2, profile.getNonGapped());
113 assertEquals(3, profile.getCounts().getCount('T'));
114 assertEquals(1, profile.getCounts().getCount('G'));
115 assertEquals(4, profile.getHeight());
116 assertEquals(4, profile.getNonGapped());
119 @Test(groups = { "Functional" })
120 public void testCalculate_withProfileTiming()
122 SequenceI seq1 = new Sequence("Seq1", "CAGT");
123 SequenceI seq2 = new Sequence("Seq2", "CACT");
124 SequenceI seq3 = new Sequence("Seq3", "C--G");
125 SequenceI seq4 = new Sequence("Seq4", "CA-t");
126 SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 };
127 Profile[] result = new Profile[seq1.getLength()];
129 // ensure class loaded and initialized
130 AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true);
132 long start = System.currentTimeMillis();
133 for (int i = 0; i < reps; i++)
135 AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true);
137 System.out.println(System.currentTimeMillis() - start);