/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.analysis; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import org.testng.annotations.Test; public class AAFrequencyTest { private static final String C = AAFrequency.MAXCOUNT; private static final String R = AAFrequency.MAXRESIDUE; private static final String G = AAFrequency.PID_GAPS; private static final String N = AAFrequency.PID_NOGAPS; private static final String P = AAFrequency.PROFILE; @Test(groups = { "Functional" }) public void testCalculate_noProfile() { SequenceI seq1 = new Sequence("Seq1", "CAGT"); SequenceI seq2 = new Sequence("Seq2", "CACT"); SequenceI seq3 = new Sequence("Seq3", "C--G"); SequenceI seq4 = new Sequence("Seq4", "CA-t"); SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 }; Profile[] result = new Profile[seq1.getLength()]; AAFrequency.calculate(seqs, 0, seq1.getLength(), result, false); // col 0 is 100% C Profile col = result[0]; assertEquals(100f, col.getPercentageIdentity(false)); assertEquals(100f, col.getPercentageIdentity(true)); assertEquals(4, col.getMaxCount()); assertEquals("C", col.getModalResidue()); assertNull(col.getCounts()); // col 1 is 75% A col = result[1]; assertEquals(75f, col.getPercentageIdentity(false)); assertEquals(100f, col.getPercentageIdentity(true)); assertEquals(3, col.getMaxCount()); assertEquals("A", col.getModalResidue()); // col 2 is 50% G 50% C or 25/25 counting gaps col = result[2]; assertEquals(25f, col.getPercentageIdentity(false)); assertEquals(50f, col.getPercentageIdentity(true)); assertEquals(1, col.getMaxCount()); assertEquals("CG", col.getModalResidue()); // col 3 is 75% T 25% G col = result[3]; assertEquals(75f, col.getPercentageIdentity(false)); assertEquals(75f, col.getPercentageIdentity(true)); assertEquals(3, col.getMaxCount()); assertEquals("T", col.getModalResidue()); } @Test(groups = { "Functional" }) public void testCalculate_withProfile() { SequenceI seq1 = new Sequence("Seq1", "CAGT"); SequenceI seq2 = new Sequence("Seq2", "CACT"); SequenceI seq3 = new Sequence("Seq3", "C--G"); SequenceI seq4 = new Sequence("Seq4", "CA-t"); SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 }; Profile[] result = new Profile[seq1.getLength()]; AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true); Profile profile = result[0]; assertEquals(4, profile.getCounts().getCount('C')); assertEquals(4, profile.getHeight()); assertEquals(4, profile.getNonGapped()); profile = result[1]; assertEquals(3, profile.getCounts().getCount('A')); assertEquals(4, profile.getHeight()); assertEquals(3, profile.getNonGapped()); profile = result[2]; assertEquals(1, profile.getCounts().getCount('C')); assertEquals(1, profile.getCounts().getCount('G')); assertEquals(4, profile.getHeight()); assertEquals(2, profile.getNonGapped()); profile = result[3]; assertEquals(3, profile.getCounts().getCount('T')); assertEquals(1, profile.getCounts().getCount('G')); assertEquals(4, profile.getHeight()); assertEquals(4, profile.getNonGapped()); } @Test(groups = { "Functional" }) public void testCalculate_withProfileTiming() { SequenceI seq1 = new Sequence("Seq1", "CAGT"); SequenceI seq2 = new Sequence("Seq2", "CACT"); SequenceI seq3 = new Sequence("Seq3", "C--G"); SequenceI seq4 = new Sequence("Seq4", "CA-t"); SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 }; Profile[] result = new Profile[seq1.getLength()]; // ensure class loaded and initialized AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true); int reps = 100000; long start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true); } System.out.println(System.currentTimeMillis() - start); } }