/*
* 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 17, 2010
* Author: Mark Chapman
*/
package org.biojava.nbio.alignment;
import org.biojava.nbio.core.alignment.matrices.SimpleSubstitutionMatrix;
import org.biojava.nbio.core.alignment.matrices.SubstitutionMatrixHelper;
import org.biojava.nbio.alignment.template.GapPenalty;
import org.biojava.nbio.alignment.template.PairwiseSequenceAligner;
import org.biojava.nbio.core.alignment.template.SequencePair;
import org.biojava.nbio.core.alignment.template.SubstitutionMatrix;
import org.biojava.nbio.core.exceptions.CompoundNotFoundException;
import org.biojava.nbio.core.sequence.DNASequence;
import org.biojava.nbio.core.sequence.ProteinSequence;
import org.biojava.nbio.core.sequence.compound.AmbiguityDNACompoundSet;
import org.biojava.nbio.core.sequence.compound.AminoAcidCompound;
import org.biojava.nbio.core.sequence.compound.DNACompoundSet;
import org.biojava.nbio.core.sequence.compound.NucleotideCompound;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class NeedlemanWunschTest {
private static final double PRECISION = 0.00000001;
private ProteinSequence query, target;
private GapPenalty gaps;
private SubstitutionMatrix<AminoAcidCompound> blosum62;
private NeedlemanWunsch<ProteinSequence, AminoAcidCompound> alignment, self;
@Before
public void setup() throws CompoundNotFoundException {
query = new ProteinSequence("ARND");
target = new ProteinSequence("RDG");
gaps = new SimpleGapPenalty(10, 1);
blosum62 = SubstitutionMatrixHelper.getBlosum62();
alignment = new NeedlemanWunsch<ProteinSequence, AminoAcidCompound>(query, target, gaps, blosum62);
self = new NeedlemanWunsch<ProteinSequence, AminoAcidCompound>(query, query, gaps, blosum62);
}
@Test
public void testComplex() throws Exception {
short match = 2, gop = -5, gep = -3; // 2, 5, and 3 are coprime; -2 is the mismatch score
SimpleSubstitutionMatrix<NucleotideCompound> mx = new SimpleSubstitutionMatrix<NucleotideCompound>(new DNACompoundSet(), match, (short)-match);
DNASequence a = new DNASequence("CGTAT ATATCGCGCGCGCGATATATATATCT TCTCTAAAAAAA".replaceAll(" ", ""));
DNASequence b = new DNASequence("GGTATATATATCGCGCGCACGAT TATATATCTCTCTCTAAAAAAA".replaceAll(" ", ""));
// --CGTATATATCGCGCGCGCGATATATATATCT-TCTCTAAAAAAA
// GGTATATATATCGCGCGCACGAT-TATATATCTCTCTCTAAAAAAA
// mismatches: ^ ^
// The two alignments should have the same score. The bottom one is the one the aligner found.
PairwiseSequenceAligner<DNASequence, NucleotideCompound> aligner = Alignments.getPairwiseAligner(a, b, Alignments.PairwiseSequenceAlignerType.GLOBAL, new SimpleGapPenalty(gop, gep), mx);
SequencePair<DNASequence, NucleotideCompound> pair = aligner.getPair();
int nMatches = "--CGTATATATCGCGCGCGCGATATATATATCT-TCTCTAAAAAAA".length() - 2 - 4;
double expectedScore = nMatches * match
- 2 * match // there are two mismatches
+ 3 * gop + 4 * gep; // there are 3 gap opens and either 1 or 4 extensions, depending on the def
assertEquals(expectedScore, aligner.getScore(), 0.00000001);
}
@Test
public void testNeedlemanWunsch() {
NeedlemanWunsch<ProteinSequence, AminoAcidCompound> nw =
new NeedlemanWunsch<ProteinSequence, AminoAcidCompound>();
nw.setQuery(query);
nw.setTarget(target);
nw.setGapPenalty(gaps);
nw.setSubstitutionMatrix(blosum62);
assertEquals(nw.getScore(), alignment.getScore(), PRECISION);
}
@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 testGetScoreMatrix() {
int[][][] scores = alignment.getScoreMatrix();
assertEquals(-6, scores[2][1][0]);
scores = self.getScoreMatrix();
assertEquals(4, scores[3][4][2]);
}
@Test
public void testGetScoreMatrixAsString() {
//System.out.println(alignment.getScoreMatrixAsString());
//System.out.println(self.getScoreMatrixAsString());
assertEquals(String.format(
"Substitution%n" +
" R D G%n" +
" 0 -\u221E -\u221E -\u221E%n" +
"A -\u221E -1 -13 -12%n" +
"R -\u221E -6 -3 -14%n" +
"N -\u221E -12 -5 -3%n" +
"D -\u221E -15 -6 -6%n" +
"%nDeletion%n" +
" R D G%n" +
" -10 -\u221E -\u221E -\u221E%n" +
"A -11 -\u221E -\u221E -\u221E%n" +
"R -12 -12 -24 -23%n" +
"N -13 -13 -14 -24%n" +
"D -14 -14 -15 -14%n" +
"%nInsertion%n" +
" R D G%n" +
" -10 -11 -12 -13%n" +
"A -\u221E -\u221E -12 -13%n" +
"R -\u221E -\u221E -17 -14%n" +
"N -\u221E -\u221E -23 -16%n" +
"D -\u221E -\u221E -26 -17%n"),
alignment.getScoreMatrixAsString());
assertEquals(String.format(
"Substitution%n" +
" A R N D%n" +
" 0 -\u221E -\u221E -\u221E -\u221E%n" +
"A -\u221E 4 -12 -14 -15%n" +
"R -\u221E -12 9 -7 -10%n" +
"N -\u221E -14 -7 15 -1%n" +
"D -\u221E -15 -10 -1 21%n" +
"%nDeletion%n" +
" A R N D%n" +
" -10 -\u221E -\u221E -\u221E -\u221E%n" +
"A -11 -\u221E -\u221E -\u221E -\u221E%n" +
"R -12 -7 -23 -25 -26%n" +
"N -13 -8 -2 -18 -21%n" +
"D -14 -9 -3 4 -12%n" +
"%nInsertion%n" +
" A R N D%n" +
" -10 -11 -12 -13 -14%n" +
"A -\u221E -\u221E -7 -8 -9%n" +
"R -\u221E -\u221E -23 -2 -3%n" +
"N -\u221E -\u221E -25 -18 4%n" +
"D -\u221E -\u221E -26 -21 -12%n"),
self.getScoreMatrixAsString());
}
@Test
public void testGetComputationTime() {
assertTrue(alignment.getComputationTime() > 0);
assertTrue(self.getComputationTime() > 0);
}
@Test
public void testGetProfile() {
assertEquals(String.format("ARND%n-RDG%n"), alignment.getProfile().toString());
assertEquals(String.format("ARND%nARND%n"), self.getProfile().toString());
}
@Test
public void testGetMaxScore() {
assertEquals(21, alignment.getMaxScore(), PRECISION);
assertEquals(21, self.getMaxScore(), PRECISION);
}
@Test
public void testGetMinScore() {
assertEquals(-27, alignment.getMinScore(), PRECISION);
assertEquals(-28, self.getMinScore(), PRECISION);
}
@Test
public void testGetScore() {
assertEquals(-6, alignment.getScore(), PRECISION);
assertEquals(21, self.getScore(), PRECISION);
}
@Test
public void testGetPair() {
assertEquals(String.format("ARND%n-RDG%n"), alignment.getPair().toString());
assertEquals(String.format("ARND%nARND%n"), self.getPair().toString());
}
/**
* @author Daniel Cameron
*/
@Test
public void should_align_all_anchored() throws CompoundNotFoundException {
DNASequence query = new DNASequence("ACG", AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("CGT", AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)0, (short)10), SubstitutionMatrixHelper.getNuc4_4());
aligner.setAnchors(new int[] { 0, 1, 2} );
assertEquals(String.format("ACG%nCGT%n"), aligner.getPair().toString());
}
/**
* @author Daniel Cameron
*/
@Test
public void should_align_starting_anchor() throws CompoundNotFoundException {
DNASequence query = new DNASequence("AAT", AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("AATT", AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)0, (short)10), SubstitutionMatrixHelper.getNuc4_4());
aligner.setAnchors(new int[] { 1, -1, -1} );
assertEquals(String.format("-AAT%nAATT%n"), aligner.getPair().toString());
}
/**
* @author Daniel Cameron
*/
@Test
public void should_align_ending_anchor() throws CompoundNotFoundException {
DNASequence query = new DNASequence("AAG", AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("AATT", AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)0, (short)10), SubstitutionMatrixHelper.getNuc4_4());
aligner.addAnchor(2, 3);
assertEquals(String.format("AA-G%nAATT%n"), aligner.getPair().toString());
}
/**
* @author Daniel Cameron
*/
@Test
public void should_align_middle_anchor() throws CompoundNotFoundException {
DNASequence query = new DNASequence("ACTTT", AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("ACGTTT", AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)0, (short)10), SubstitutionMatrixHelper.getNuc4_4());
aligner.setAnchors(new int[] { -1, 2, -1} );
assertEquals(String.format("A-CTTT%nACGTTT%n"), aligner.getPair().toString());
}
/**
* @author Daniel Cameron
*/
@Test
public void should_align_multiple_anchors() throws CompoundNotFoundException {
DNASequence query = new DNASequence("ACGT", AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("ATACGT", AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)0, (short)10), SubstitutionMatrixHelper.getNuc4_4());
aligner.addAnchor(0, 0);
aligner.addAnchor(1, 1);
aligner.addAnchor(2, 2);
aligner.addAnchor(3, 5);
assertEquals(String.format("ACG--T%nATACGT%n"), aligner.getPair().toString());
}
/**
* @author Daniel Cameron
*/
@Test
public void anchors_should_not_change_score() throws CompoundNotFoundException {
DNASequence query = new DNASequence("ACGT", AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("ACGT", AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)5, (short)10), SubstitutionMatrixHelper.getNuc4_4());
NeedlemanWunsch<DNASequence, NucleotideCompound> anchored = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)5, (short)10), SubstitutionMatrixHelper.getNuc4_4());
anchored.addAnchor(0, 0);
anchored.addAnchor(1, 1);
anchored.addAnchor(2, 2);
anchored.addAnchor(3, 3);
assertEquals(aligner.getScore(), anchored.getScore(), PRECISION);
}
/**
* @author Daniel Cameron
*/
@Test
public void testAnchoredDNAAlignment() throws CompoundNotFoundException {
DNASequence query = new DNASequence( "ACGTACCGGTTTT", DNACompoundSet.getDNACompoundSet());
DNASequence target = new DNASequence("TACGTCCGGTTACGTACGTT", DNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner = new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, new SimpleGapPenalty((short)5, (short)2), SubstitutionMatrixHelper.getNuc4_4());
assertEquals(String.format("-ACGTACCGGTT-------TT%nTACGT-CCGGTTACGTACGTT%n"), aligner.getPair().toString());
}
/**
* See issue #202 in github
* @author Jose M Duarte
*/
@Test
public void testIntOverflowBug() throws CompoundNotFoundException {
SubstitutionMatrix<NucleotideCompound> matrix = SubstitutionMatrixHelper.getNuc4_4();
SimpleGapPenalty gap = new SimpleGapPenalty();
String str1 =
"AGATATATCTGAAGCTTAAAGGGCAGTGACAATGGCTGGCTCGGTTAACGGGAATCATAGTGCTGTAGGACCTGGTATAAATTATGAGACGGTGTCTCAAGTGGATGAGTTCTGTAAAGCACTTAGAGGGAAAAGGCCGATCCATAGTATTTTGATAGCTAACAATGGAATGGCGGCTGTGAAGTTTATACGTAGTGTCAGAACATGGGCTTATGAAACATTTGGTACGGAAAAAGCCATATTGTTGGTGGGGATGGCAACCCCTGAAGACATGCGGATCAATGCGGAGCATATCAGAATCGCTGATCAGTTTGTTGAGGTTCCCGGAGGAACCAACAATAACAATTATGCTAACGTTCAGCTGATTGTGGAGATGGCTGAAGTAACACGCGTGGATGCAGTTTGGCCTGGTTGGGGTCATGCATCTGAAAACCCCGAATTACCTGATGCCCTAGATGCAAAAGGAATCATATTTCTTGGTCCTCCAGCATCTTCAATGGCAGCACTGGGAGATAAGATTGGTTCTTCGTTGATTGCACAAGCTGCTGATGTACCCACTCTGCCATGGAGTGGTTCCCATGTTAAAATACCTCCTAATAGCAACTTGGTAACCATCCCAGAGGAGATCTACCGGCAAGCATGTGTCTACACAACTGAAGAAGCGATTGCTAGCTGTCAAGTTGTCGGTTACCCAGCAATGATCAAAGCATCGTGGGGTGGTGGTGGTAAAGGAATCAGGAAGGTTCATAATGATGATGAGGTTAGGGCTCTATTCAAGCAAGTTCAGGGTGAGGTCCCAGGCTCACCAATATTCATAATGAAGGTTGCGTCACAGAGTCGGCATCTAGAGGTCCAGCTGCTCTGTGACAAGCATGGAAATGTTTCAGCTCTGCATAGCCGTGATTGTAGCGTCCAGAGAAGACATCAAAAGATCATAGAGGAGGGTCCAATTACTGTGGCTCCGCCAGAAACTGTCAAGAAACTTGAACAAGCAGCTAGAAGGTTGGCTAAGAGTGTTAACTATGTTGGAGCTGCTACTGTTGAGTATCTCTACAGTATGGACACTGGGGAGTACTACTTCTTAGAGCTTAACCCTCGCTTACAGGTTGAGCATCCTGTCACTGAGTGGATTGCCGAGATAAATCTTCCTGCTGCCCAAGTTGCTGTGGGGATGGGAATTCCTCTCTGGCAAATCCCTGAGATAAGACGGTTCTATGGAATAGAACATGGTGGAGGTTATGATTCTTGGCGAAAAACATCTGTTGTAGCCTTCCCTTTTGATTTTGATAAAGCTCAATCTATAAGGCCAAAAGGTCATTGTGTGGCTGTACGTGTGACAAGTGAGGATCCTGATGACGGGTTCAAACCAACCAGCGGTAGAGTTCAGGAGTTGAGTTTTAAGAGCAAGCCAAATGTGTGGGCGTACTTCTCTGTCAAGTCTGGTGGAGGCATCCACGAGTTCTCGGATTCCCAGTTTGGACATGTTTTTGCATTTGGGGAATCCAGAGCCCTGGCGATAGCGAATATGGTTCTTGGGCTAAAAGAAATTCAGATCCGTGGAGAAATTAGGACTAACGTTGACTACACGATCGACCTTTTACATGCTTCTGATTACCGTGATAACAAAATTCACACTGGTTGGTTGGATAGTAGGATTGCTATGCGGGTCAGAGCTGAGAGGCCTCCATGGTATCTCTCTGTTGTCGGCGGAGCTCTCTATAAAGCATCAGCGACCAGTGCTGCTGTGGTTTCAGATTACGTTGGTTATCTGGAGAAGGGGCAAATCCCTCCAAAGCATATATCTCTTGTACATTCTCAAGTGTCTCTGAATATTGAAGGAAGTAAATATACGATTGATGTAGTCCGGGGTGGATCAGGAACCTACAGGCTAAGAATGAACAAGTCAGAAGTGGTAGCAGAAATACACACTCTACGTGATGGAGGTCTGTTGATGCAGTTGGATGGCAAAAGCCATGTGATATATGCAGAGGAAGAAGCTGCAGGAACTCGTCTTCTCATTGATGGAAGAACTTGTTTGCTACAGAATGACCACGATCCATCAAAGTTAATGGCTGAGACACCGTGCAAGTTGATGAGGTATTTGATTTCCGACAACAGCAATATTGACGCTGATACGCCTTATGCCGAAGTTGAGGTCATGAAGATGTGCATGCCACTTCTTTCACCTGCTTCAGGAGTTATCCATTTTAAAATGTCTGAAGGACAAGCCATGCAGGCTGGTGAACTTATAGCCAATCTTGATCTTGATGATCCTTCTGCTGTAAGAAAGGCCGAACCCTTCCATGGAAGTTTCCCAAGATTAGGGCTTCCAACTGCAATATCCGGTAGAGTTCATCAGAGATGTGCCGCAACATTAAATGCTGCACGCATGATTCTTGCTGGCTATGAGCATAAAGTAGATGAGGTTGTTCAAGACTTACTTAATTGCCTTGATAGCCCTGAACTCCCATTTCTTCAGTGGCAAGAGTGCTTTGCAGTTCTGGCGACACGACTACCTAAAAATCTCAGGAACATGCTAGAATCAAAGTATAGGGAATTTGAGAGTATTTCCAGAAACTCTTTGACCACCGATTTCCCTGCCAAACTTTTAAAAGGCATTCTTGAGGCACATTTATCTTCTTGTGATGAGAAAGAGAGAGGTGCCCTTGAAAGGCTCATTGAACCATTGATGAGCCTTGCAAAATCTTATGAAGGTGGTAGAGAAAGTCATGCCCGTGTTATTGTTCATTCTCTCTTTGAAGAATATCTATCAGTAGAAGAATTATTCAATGATAACATGCTGGCTGATGTTATAGAACGCATGCGTCAGCTATACAAGAAAGATCTGTTGAAAATTGTGGATATAGTGCTCTCACACCAGGGCATAAAAAACAAAAACAAACTCGTTCTCCGGCTCATGGAGCAGCTTGTTTACCCTAATCCTGCTGCTTACAGAGATAAACTTATTCGATTCTCAACACTTAACCATACTAACTACTCTGAGTTGGCGCTCAAGGCGAGTCAATTACTTGAACAGACCAAACTAAGTGAGCTTCGTTCAAACATTGCTAGAAGCCTTTCAGAGTTAGAAATGTTTACAGAGGACGGAGAAAATATGGATACTCCCAAGAGGAAAAGTGCCATTAATGAAAGAATAGAAGATCTTGTAAGCGCATCTTTAGCTGTTGAAGACGCTCTCGTGGGACTATTTGACCATAGCGATCACACACTTCAAAGACGGGTTGTTGAGACTTATATTCGCAGATTATACCAGCCCTACGTCGTTAAAGATAGCGTGAGGATGCAGTGGCACCGTTCTGGTCTTCTTGCTTCCTGGGAGTTCCTAGAGGAGCATATGGAAAGAAAAAACATTGGCTTAGACGATCCCGACACATCTGAAAAAGGATTGGTTGAGAAGCGTAGTAAGAGAAAATGGGGGGCTATGGTTATAATCAAATCTTTGCAGTTTCTTCCAAGTATAATAAGTGCAGCATTGAGAGAAACAAAGCACAACGACTATGAAACTGCCGGAGCTCCTTTATCTGGCAATATGATGCACATTGCTATTGTGGGCATCAACAACCAGATGAGTCTGCTTCAGGACAGTGGGGATGAAGACCAAGCTCAGGAAAGAGTAAACAAGTTGGCCAAAATTCTTAAAGAGGAAGAAGTGAGTTCAAGCCTCTGTTCTGCCGGTGTTGGTGTAATCAGCTGTATAATTCAGCGAGATGAAGGACGAACACCCATGAGACATTCTTTCCATTGGTCGTTGGAGAAACAGTATTATGTAGAAGAGCCGTTGCTGCGTCATCTTGAACCTCCTCTGTCCATTTACCTTGAGTTGGATAAGCTGAAAGGATACTCAAATATACAATATACGCCTTCTCGAGATCGTCAATGGCATCTGTATACTGTTACAGACAAGCCAGTGCCAATCAAGAGGATGTTCCTGAGATCTCTTGTTCGACAGGCTACAATGAACGATGGATTTATATTGCAGCAAGGGCAGGATAAGCAGCTTAGCCAAACACTGATCTCCATGGCGTTTACGTCGAAATGTGTTCTGAGGTCTTTGATGGATGCCATGGAGGAACTGGAACTGAATGCCCATAATGCTGCAATGAAACCAGATCACGCACATATGTTTCTTTGCATATTGCGTGAGCAGCAGATAGATGATCTTGTGCCTTTCCCCAGGAGAGTTGAAGTGAATGCGGAGGATGAAGAAACTACAGTTGAAATGATCTTAGAAGAAGCAGCACGAGAGATACATAGATCTGTTGGAGTGAGAATGCATAGGTTGGGCGTGTGCGAGTGGGAAGTGCGGCTGTGGTTGGTGTCCTCTGGACTGGCATGTGGTGCTTGGAGGGTTGTGGTTGCAAACGTGACAGGCCGTACATGCACTGTCCACATATACCGAGAAGTTGAAACTCCTGGAAGAAACAGTTTAATCTACCACTCAATAACCAAGAAGGGACCTTTGCATGAAACACCAATCAGTGATCAATATAAGCCCCTGGGATATCTCGACAGGCAACGTTTAGCAGCAAGGAGGAGTAACACTACTTATTGCTATGACTTCCCGTTGGCATTTGGGACAGCCTTGGAACTGTTGTGGGCATCACAACACCCAGGAGTTAAGAAACCATATAAGGATACTCTGATCAATGTTAAAGAGCTTGTATTCTCAAAACCAGAAGGTTCTTCGGGTACATCTCTAGATCTGGTTGAAAGACCACCCGGTCTCAACGACTTTGGAATGGTTGCCTGGTGCCTAGATATGTCGACCCCAGAGTTTCCTATGGGGCGGAAACTTCTCGTGATTGCGAATGATGTCACCTTCAAAGCTGGTTCTTTTGGTCCTAGAGAGGACGCGTTTTTCCTTGCTGTTACTGAACTCGCTTGTGCCAAGAAGCTTCCCTTGATTTACTTGGCAGCAAATTCTGGTGCCCGACTTGGGGTTGCTGAAGAAGTCAAAGCCTGCTTCAAAGTTGGATGGTCGGATGAAATTTCCCCTGAGAATGGTTTTCAGTATATATACCTAAGCCCTGAAGACCACGAAAGGATTGGATCATCTGTCATTGCCCATGAAGTAAAGCTCTCTAGTGGGGAAACTAGGTGGGTGATTGATACGATCGTTGGCAAAGAAGATGGTATTGGTGTAGAGAACTTAACAGGAAGTGGGGCCATAGCGGGTGCTTACTCAAAGGCATACAATGAAACTTTTACTTTAACCTTTGTTAGTGGAAGAACGGTTGGAATTGGTGCTTATCTTGCCCGCCTAGGTATGCGGTGCATACAGAGACTTGATCAGCCGATCATCTTGACTGGCTTCTCTACACTCAACAAGTTACTTGGGCGTGAGGTCTATAGCTCTCACATGCAACTGGGTGGCCCGAAAATCATGGGCACAAATGGTGTTGTTCATCTTACAGTCTCAGATGATCTTGAAGGCGTATCAGCAATTCTCAACTGGCTCAGCTACATTCCTGCTTACGTGGGTGGTCCTCTTCCTGTTCTTGCCCCTTTAGATCCACCGGAGAGAATTGTGGAGTATGTCCCAGAGAACTCTTGCGACCCACGAGCGGCTATAGCTGGGGTCAAAGACAATACCGGTAAATGGCTTGGAGGTATCTTTGATAAAAATAGTTTCATTGAGACTCTTGAAGGCTGGGCAAGGACGGTAGTGACTGGTAGAGCCAAGCTCGGGGGAATACCCGTTGGAGTTGTTGCAGTTGAGACACAGACTGTCATGCAGATCATCCCAGCCGATCCTGGACAGCTTGACTCTCATGAAAGAGTGGTTCCGCAAGCAGGGCAAGTCTGGTTTCCTGATTCAGCGGCCAAGACTGCTCAAGCGCTTATGGATTTCAACCGGGAAGAGCTTCCATTGTTTATCCTAGCGAACTGGAGAGGGTTTTCAGGTGGGCAGAGAGATCTTTTCGAAGGAATACTTCAGGCAGGTTCAACTATAGTAGAAAATCTGAGAACCTATCGTCAGCCAGTGTTTGTGTACATCCCAATGATGGGAGAGCTGCGCGGTGGAGCGTGGGTTGTTGTTGACAGCCAGATAAATTCGGATTATGTTGAAATGTATGCTGATGAAACAGCTCGTGGAAATGTGCTTGAGCCAGAAGGGACAATAGAGATAAAATTTAGAACAAAAGAGCTATTAGAGTGCATGGGAAGGTTGGACCAGAAGCTAATCAGTCTGAAAGCAAAACTGCAAGATGCCAAGCAAAGCGAGGCCTATGCAAACATCGAGCTTCTCCAGCAACAGATTAAAGCCCGAGAGAAACAGCTTTTACCAGTTTATATCCAAATCGCCACCAAATTTGCAGAACTTCATGACACTTCCATGAGAATGGCTGCAAAGGGAGTGATCAAAAGTGTTGTGGAATGGAGCGGCTCGCGGTCCTTCTTCTACAAAAAGCTCAATAGGAGAATCGCTGAGAGCTCTCTTGTGAAAAACGTAAGAGAAGCATCTGGAGACAACTTAGCATATAAATCTTCAATGCGTCTGATTCAGGATTGGTTCTGCAACTCTGATATTGCAAAGGGGAAAGAAGAAGCTTGGACAGACGACCAAGTGTTCTTTACATGGAAGGACAATGTTAGTAACTACGAGTTGAAGCTGAGCGAGTTGAGAGCGCAGAAACTACTGAACCAACTTGCAGAGATTGGGAATTCCTCAGATTTGCAAGCTCTGCCACAAGGACTTGCTAATCTTCTAAACAAGGTGGAGCCGTCGAAAAGAGAAGAGCTGGTGGCTGCTATTCGAAAGGTCTTGGGTTGACTGA";
String str2 =
"TAAAGTCTTCGATATCAGTCAACCCAAGACCTTTCGAATAGCAGCCACCAGCTCTTCTCTTTTCGACGGCTCCACCTTGTTTAGAAGATTAGCA";
//System.out.println("Lengths: "+str1.length()+" "+str2.length());
DNASequence target = new DNASequence(str1,
AmbiguityDNACompoundSet.getDNACompoundSet());
DNASequence query = new DNASequence(str2,
AmbiguityDNACompoundSet.getDNACompoundSet());
NeedlemanWunsch<DNASequence, NucleotideCompound> aligner =
new NeedlemanWunsch<DNASequence, NucleotideCompound>(query, target, gap, matrix);
//System.out.println("getScore: " + aligner.getScore());
//System.out.println("getMaxScore: " + aligner.getMaxScore());
//System.out.println("getMinScore: " + aligner.getMinScore());
//System.out.println("getSimilarity: " + aligner.getSimilarity());
assertTrue("Similarity must be positive, this must be an integer overflow bug!", aligner.getSimilarity()>0);
}
}