/*
* 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/
*
*/
package org.biojava.nbio.phylo;
import org.forester.evoinference.matrix.distance.BasicSymmetricalDistanceMatrix;
import org.forester.phylogeny.Phylogeny;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Test for the evaluation of distance trees.
*
* @author Aleix Lafita
*
*/
public class TestDistanceTreeEvaluator {
@Test
public void testErrorFree() throws Exception {
// Create a perfect additive distance matrix
BasicSymmetricalDistanceMatrix DM = new BasicSymmetricalDistanceMatrix(
3);
// dAB = 0.8, dBC = 0.4, dAC = 0.8
for (int i = 0; i < 3; i++) {
char id = (char) ('A' + i);
DM.setIdentifier(i, id + "");
for (int j = i; j < 3; j++) {
if (i == j) {
DM.setValue(i, j, 0.0);
} else if (i == 0) {
DM.setValue(i, j, 0.8);
} else {
DM.setValue(i, j, 0.4);
}
}
}
// Calculate error free tree and get the cv
Phylogeny tree = TreeConstructor.distanceTree(
ForesterWrapper.cloneDM(DM), TreeConstructorType.NJ);
double cv = DistanceTreeEvaluator.evaluate(tree, DM);
// Assert error free
assertEquals(0.0, cv, 0.001);
}
@Test
public void testErrorEstimation() throws Exception {
// Matrix taken from forester test
BasicSymmetricalDistanceMatrix m = new BasicSymmetricalDistanceMatrix(4);
m.setIdentifier(0, "A");
m.setIdentifier(1, "B");
m.setIdentifier(2, "C");
m.setIdentifier(3, "D");
m.setRow("0 1 0 1", 0);
m.setRow("1 0 0 1", 1);
m.setRow("0 0 0 1", 2);
m.setRow("1 1 1 0", 3);
// Calculate error free tree and get the cv
Phylogeny tree = TreeConstructor.distanceTree(
ForesterWrapper.cloneDM(m), TreeConstructorType.NJ);
double cv = DistanceTreeEvaluator.evaluate(tree, m);
// Assert error is about 30%
assertEquals(0.3, cv, 0.05);
}
}