/*
* 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 July 7, 2010
* Author: Mark Chapman
*/
package org.biojava.nbio.alignment;
import org.biojava.nbio.alignment.template.GapPenalty;
import org.biojava.nbio.core.alignment.SimpleProfile;
import org.biojava.nbio.core.alignment.matrices.SubstitutionMatrixHelper;
import org.biojava.nbio.core.alignment.template.Profile;
import org.biojava.nbio.core.alignment.template.ProfilePair;
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 SimpleProfileProfileAlignerTest {
private static final double PRECISION = 0.00000001;
private ProteinSequence protein1, protein2, protein3, protein4;
private GapPenalty gaps;
private SubstitutionMatrix<AminoAcidCompound> blosum62;
private Profile<ProteinSequence, AminoAcidCompound> prof1, prof2, prof3, prof4;
private SimpleProfileProfileAligner<ProteinSequence, AminoAcidCompound> sppa1, sppa2, sppa3;
private ProfilePair<ProteinSequence, AminoAcidCompound> pp1, pp2, all;
@Before
public void setup() throws CompoundNotFoundException {
protein1 = new ProteinSequence("ARND");
protein2 = new ProteinSequence("ARND");
protein3 = new ProteinSequence("HILK");
protein4 = new ProteinSequence("ANDR");
gaps = new SimpleGapPenalty(2, 1);
blosum62 = SubstitutionMatrixHelper.getBlosum62();
prof1 = new SimpleProfile<ProteinSequence, AminoAcidCompound>(protein1);
prof2 = new SimpleProfile<ProteinSequence, AminoAcidCompound>(protein2);
prof3 = new SimpleProfile<ProteinSequence, AminoAcidCompound>(protein3);
prof4 = new SimpleProfile<ProteinSequence, AminoAcidCompound>(protein4);
sppa1 = new SimpleProfileProfileAligner<ProteinSequence, AminoAcidCompound>(prof1, prof2, gaps, blosum62);
pp1 = sppa1.getPair();
sppa2 = new SimpleProfileProfileAligner<ProteinSequence, AminoAcidCompound>(prof3, prof4, gaps, blosum62);
pp2 = sppa2.getPair();
sppa3 = new SimpleProfileProfileAligner<ProteinSequence, AminoAcidCompound>(pp1, pp2, gaps, blosum62);
all = sppa3.getPair();
}
@Test
public void testSimpleProfileProfileAligner() {
SimpleProfileProfileAligner<ProteinSequence, AminoAcidCompound> alig =
new SimpleProfileProfileAligner<ProteinSequence, AminoAcidCompound>();
alig.setQuery(prof1);
alig.setTarget(prof2);
alig.setGapPenalty(gaps);
alig.setSubstitutionMatrix(blosum62);
assertEquals(alig.getScore(), sppa1.getScore(), PRECISION);
}
@Test
public void testSimpleProfileProfileAlignerProfileOfSCProfileOfSCGapPenaltySubstitutionMatrixOfC() {
assertNotNull(sppa1);
assertNotNull(sppa2);
assertNotNull(sppa3);
}
@Test
public void testGetQuery() {
assertEquals(prof1, sppa1.getQuery());
assertEquals(prof3, sppa2.getQuery());
assertEquals(pp1, sppa3.getQuery());
}
@Test
public void testGetTarget() {
assertEquals(prof2, sppa1.getTarget());
assertEquals(prof4, sppa2.getTarget());
assertEquals(pp2, sppa3.getTarget());
}
@Test
public void testGetGapPenalty() {
assertEquals(gaps, sppa1.getGapPenalty());
assertEquals(gaps, sppa2.getGapPenalty());
assertEquals(gaps, sppa3.getGapPenalty());
}
@Test
public void testGetSubstitutionMatrix() {
assertEquals(blosum62, sppa1.getSubstitutionMatrix());
assertEquals(blosum62, sppa2.getSubstitutionMatrix());
assertEquals(blosum62, sppa3.getSubstitutionMatrix());
}
@Test
public void testIsStoringScoreMatrix() {
assertFalse(sppa1.isStoringScoreMatrix());
assertFalse(sppa2.isStoringScoreMatrix());
assertFalse(sppa3.isStoringScoreMatrix());
}
@Test
public void testGetScoreMatrix() {
int[][][] scores = sppa1.getScoreMatrix();
assertEquals(1, scores[2][1][1]);
scores = sppa2.getScoreMatrix();
assertEquals(-7, scores[3][4][0]);
scores = sppa3.getScoreMatrix();
assertEquals(1, scores[1][2][2]);
}
@Test
public void testGetScoreMatrixAsString() {
assertEquals(String.format(
"Substitution%n" +
" A R N D%n" +
" 0 -\u221E -\u221E -\u221E -\u221E%n" +
"A -\u221E 4 -4 -6 -7%n" +
"R -\u221E -4 9 1 -2%n" +
"N -\u221E -6 1 15 7%n" +
"D -\u221E -7 -2 7 21%n" +
"%nDeletion%n" +
" A R N D%n" +
" -2 -\u221E -\u221E -\u221E -\u221E%n" +
"A -3 -\u221E -\u221E -\u221E -\u221E%n" +
"R -4 1 -7 -9 -10%n" +
"N -5 0 6 -2 -5%n" +
"D -6 -1 5 12 4%n" +
"%nInsertion%n" +
" A R N D%n" +
" -2 -3 -4 -5 -6%n" +
"A -\u221E -\u221E 1 0 -1%n" +
"R -\u221E -\u221E -7 6 5%n" +
"N -\u221E -\u221E -9 -2 12%n" +
"D -\u221E -\u221E -10 -5 4%n"),
sppa1.getScoreMatrixAsString());
assertEquals(String.format(
"Substitution%n" +
" A N D R%n" +
" 0 -\u221E -\u221E -\u221E -\u221E%n" +
"H -\u221E -2 -2 -5 -5%n" +
"I -\u221E -4 -5 -5 -8%n" +
"L -\u221E -5 -7 -9 -7%n" +
"K -\u221E -6 -5 -7 -6%n" +
"%nDeletion%n" +
" A N D R%n" +
" -2 -\u221E -\u221E -\u221E -\u221E%n" +
"H -3 -\u221E -\u221E -\u221E -\u221E%n" +
"I -4 -5 -5 -8 -8%n" +
"L -5 -6 -6 -8 -9%n" +
"K -6 -7 -7 -9 -10%n" +
"%nInsertion%n" +
" A N D R%n" +
" -2 -3 -4 -5 -6%n" +
"H -\u221E -\u221E -5 -5 -6%n" +
"I -\u221E -\u221E -7 -8 -8%n" +
"L -\u221E -\u221E -8 -9 -10%n" +
"K -\u221E -\u221E -9 -8 -9%n"),
sppa2.getScoreMatrixAsString());
assertEquals(String.format(
"Substitution%n" +
" - H I L K%n" +
" 0 -\u221E -\u221E -\u221E -\u221E -\u221E%n" +
"A -\u221E 4 -5 -5 -6 -7%n" +
"R -\u221E -4 4 -1 -2 3%n" +
"N -\u221E -6 5 3 -2 0%n" +
"D -\u221E -7 0 7 -1 0%n" +
"%nDeletion%n" +
" - H I L K%n" +
" -2 -\u221E -\u221E -\u221E -\u221E -\u221E%n" +
"A -3 -\u221E -\u221E -\u221E -\u221E -\u221E%n" +
"R -4 1 -8 -8 -9 -10%n" +
"N -5 0 1 -4 -5 0%n" +
"D -6 -1 2 0 -5 -1%n" +
"%nInsertion%n" +
" - H I L K%n" +
" -2 -3 -4 -5 -6 -7%n" +
"A -\u221E -\u221E 1 0 -1 -2%n" +
"R -\u221E -\u221E -7 1 0 -1%n" +
"N -\u221E -\u221E -9 2 1 0%n" +
"D -\u221E -\u221E -10 -3 4 3%n"),
sppa3.getScoreMatrixAsString());
}
@Test
public void testGetComputationTime() {
assertTrue(sppa1.getComputationTime() > 0);
assertTrue(sppa2.getComputationTime() > 0);
assertTrue(sppa3.getComputationTime() > 0);
}
@Test
public void testGetProfile() {
assertEquals(sppa1.getProfile().toString(), String.format("ARND%nARND%n"));
assertEquals(sppa2.getProfile().toString(), String.format("-HILK%nAND-R%n"));
assertEquals(sppa3.getProfile().toString(), String.format("ARND--%nARND--%n--HILK%nA-ND-R%n"));
}
@Test
public void testGetMaxScore() {
assertEquals(21, sppa1.getMaxScore(), PRECISION);
assertEquals(21, sppa2.getMaxScore(), PRECISION);
assertEquals(21, sppa3.getMaxScore(), PRECISION);
}
@Test
public void testGetMinScore() {
assertEquals(-12, sppa1.getMinScore(), PRECISION);
assertEquals(-12, sppa2.getMinScore(), PRECISION);
assertEquals(-13, sppa3.getMinScore(), PRECISION);
}
@Test
public void testGetScore() {
assertEquals(21, sppa1.getScore(), PRECISION);
assertEquals(-6, sppa2.getScore(), PRECISION);
assertEquals(3, sppa3.getScore(), PRECISION);
}
@Test
public void testGetPair() {
assertEquals(String.format("ARND%nARND%n"), pp1.toString());
assertEquals(String.format("-HILK%nAND-R%n"), pp2.toString());
assertEquals(String.format("ARND--%nARND--%n--HILK%nA-ND-R%n"), all.toString());
}
}