/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * * Created on June 29, 2010 * Author: Mark Chapman */ package org.biojava.nbio.alignment; import org.biojava.nbio.core.alignment.matrices.SubstitutionMatrixHelper; import org.biojava.nbio.alignment.template.GapPenalty; import org.biojava.nbio.core.alignment.template.SubstitutionMatrix; import org.biojava.nbio.core.exceptions.CompoundNotFoundException; import org.biojava.nbio.core.sequence.ProteinSequence; import org.biojava.nbio.core.sequence.compound.AminoAcidCompound; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; public class SmithWatermanTest { private static final double PRECISION = 0.00000001; private ProteinSequence query, target; private GapPenalty gaps; private SubstitutionMatrix<AminoAcidCompound> blosum62; private SmithWaterman<ProteinSequence, AminoAcidCompound> alignment, self; @Before public void setup() throws CompoundNotFoundException { query = new ProteinSequence("AERNDKK"); target = new ProteinSequence("ERDNKGFPS"); gaps = new SimpleGapPenalty((short) 2, (short) 1); blosum62 = SubstitutionMatrixHelper.getBlosum62(); alignment = new SmithWaterman<ProteinSequence, AminoAcidCompound>(query, target, gaps, blosum62); self = new SmithWaterman<ProteinSequence, AminoAcidCompound>(query, query, gaps, blosum62); } @Test public void testSmithWaterman() { SmithWaterman<ProteinSequence, AminoAcidCompound> alig = new SmithWaterman<ProteinSequence, AminoAcidCompound>(); alig.setQuery(query); alig.setTarget(target); alig.setGapPenalty(gaps); alig.setSubstitutionMatrix(blosum62); assertEquals(alig.getPair().toString(), String.format("ERNDKK%nER-DNK%n")); } @Test public void testGetQuery() { assertEquals(alignment.getQuery(), query); assertEquals(self.getQuery(), query); } @Test public void testGetTarget() { assertEquals(alignment.getTarget(), target); assertEquals(self.getTarget(), query); } @Test public void testGetGapPenalty() { assertEquals(alignment.getGapPenalty(), gaps); assertEquals(self.getGapPenalty(), gaps); } @Test public void testGetSubstitutionMatrix() { assertEquals(alignment.getSubstitutionMatrix(), blosum62); assertEquals(self.getSubstitutionMatrix(), blosum62); } @Test public void testIsStoringScoreMatrix() { assertFalse(alignment.isStoringScoreMatrix()); assertFalse(self.isStoringScoreMatrix()); } @Test public void testSetStoringScoreMatrix() { assertFalse(alignment.isStoringScoreMatrix()); alignment.setStoringScoreMatrix(true); assertTrue(alignment.isStoringScoreMatrix()); } @Test public void testGetScoreMatrix() { int[][][] scores = alignment.getScoreMatrix(); assertEquals(scores[2][2][2], 2); assertEquals(scores[4][3][0], 11); scores = self.getScoreMatrix(); assertEquals(scores[2][2][0], 9); assertEquals(scores[4][3][1], 11); } @Test public void testGetScoreMatrixAsString() { assertEquals(alignment.getScoreMatrixAsString(), String.format( "Substitution%n" + " E R D N K G F P S%n" + " 0 0 0 0 0 0 0 0 0 0%n" + "A 0 0 0 0 0 0 0 0 0 1%n" + "E 0 5 0 2 0 1 0 0 0 0%n" + "R 0 0 10 0 2 2 0 0 0 0%n" + "N 0 0 2 11 13 6 5 1 1 3%n" + "D 0 2 0 13 12 12 9 6 7 7%n" + "K 0 1 4 5 13 17 10 6 7 7%n" + "K 0 1 3 4 10 18 15 11 12 12%n" + "%nDeletion%n" + " E R D N K G F P S%n" + " 0 0 0 0 0 0 0 0 0 0%n" + "A 0 0 0 0 0 0 0 0 0 0%n" + "E 0 0 0 0 0 0 0 0 0 0%n" + "R 0 2 0 0 0 0 0 0 0 0%n" + "N 0 1 7 0 0 0 0 0 0 0%n" + "D 0 0 6 8 10 3 2 0 0 0%n" + "K 0 0 5 10 9 9 6 3 4 4%n" + "K 0 0 4 9 10 14 7 3 4 4%n" + "%nInsertion%n" + " E R D N K G F P S%n" + " 0 0 0 0 0 0 0 0 0 0%n" + "A 0 0 0 0 0 0 0 0 0 0%n" + "E 0 0 2 1 0 0 0 0 0 0%n" + "R 0 0 0 7 6 5 4 3 2 1%n" + "N 0 0 0 0 8 10 9 8 7 6%n" + "D 0 0 0 0 10 9 9 8 7 6%n" + "K 0 0 0 1 2 10 14 13 12 11%n" + "K 0 0 0 0 1 7 15 14 13 12%n")); assertEquals(self.getScoreMatrixAsString(), String.format( "Substitution%n" + " A E R N D K K%n" + " 0 0 0 0 0 0 0 0%n" + "A 0 4 0 0 0 0 0 0%n" + "E 0 0 9 1 0 2 1 1%n" + "R 0 0 1 14 6 3 6 5%n" + "N 0 0 0 6 20 12 10 9%n" + "D 0 0 2 3 12 26 16 15%n" + "K 0 0 1 6 10 16 31 28%n" + "K 0 0 1 5 9 15 28 36%n" + "%nDeletion%n" + " A E R N D K K%n" + " 0 0 0 0 0 0 0 0%n" + "A 0 0 0 0 0 0 0 0%n" + "E 0 1 0 0 0 0 0 0%n" + "R 0 0 6 0 0 0 0 0%n" + "N 0 0 5 11 3 0 3 2%n" + "D 0 0 4 10 17 9 7 6%n" + "K 0 0 3 9 16 23 13 12%n" + "K 0 0 2 8 15 22 28 25%n" + "%nInsertion%n" + " A E R N D K K%n" + " 0 0 0 0 0 0 0 0%n" + "A 0 0 1 0 0 0 0 0%n" + "E 0 0 0 6 5 4 3 2%n" + "R 0 0 0 0 11 10 9 8%n" + "N 0 0 0 0 3 17 16 15%n" + "D 0 0 0 0 0 9 23 22%n" + "K 0 0 0 0 3 7 13 28%n" + "K 0 0 0 0 2 6 12 25%n")); } @Test public void testGetComputationTime() { assertTrue(alignment.getComputationTime() > 0); assertTrue(self.getComputationTime() > 0); } @Test public void testGetProfile() { assertEquals(alignment.getProfile().toString(), String.format("ERNDKK%nER-DNK%n")); assertEquals(self.getProfile().toString(), String.format("AERNDKK%nAERNDKK%n")); } @Test public void testGetMaxScore() { assertEquals(alignment.getMaxScore(), 50, PRECISION); assertEquals(self.getMaxScore(), 36, PRECISION); } @Test public void testGetMinScore() { assertEquals(alignment.getMinScore(), 0, PRECISION); assertEquals(self.getMinScore(), 0, PRECISION); } @Test public void testGetScore() { assertEquals(alignment.getScore(), 18, PRECISION); assertEquals(self.getScore(), 36, PRECISION); } @Test public void testGetPair() { assertEquals(alignment.getPair().toString(), String.format("ERNDKK%nER-DNK%n")); assertEquals(self.getPair().toString(), String.format("AERNDKK%nAERNDKK%n")); } }