package test.dr.evomodel.substmodel;
import junit.framework.TestCase;
import dr.evolution.datatype.Microsatellite;
import dr.evolution.util.Taxa;
import dr.evolution.util.Taxon;
import dr.evolution.alignment.Patterns;
import dr.evolution.io.NewickImporter;
import dr.evolution.tree.Tree;
import dr.evomodel.tree.TreeModel;
import dr.oldevomodel.substmodel.AsymmetricQuadraticModel;
import dr.oldevomodel.sitemodel.GammaSiteModel;
import dr.oldevomodel.treelikelihood.TreeLikelihood;
import java.util.ArrayList;
import java.util.Collections;
/**
* @author Chieh-Hsi Wu
*
* JUnit test for testing the full likelihood calculation with microsatellite models.
*/
public class MsatFullLikelihoodTest extends TestCase {
TreeLikelihood treeLikelihood1;
TreeLikelihood treeLikelihood2;
TreeLikelihood treeLikelihood3;
public void setUp() throws Exception {
super.setUp();
//taxa
ArrayList<Taxon> taxonList1= new ArrayList<Taxon>();
Collections.addAll(taxonList1, new Taxon("taxon1"), new Taxon("taxon2"), new Taxon("taxon3"));
Taxa taxa1 = new Taxa(taxonList1);
//msat datatype
Microsatellite msat = new Microsatellite(1,3);
Patterns msatPatterns = new Patterns(msat, taxa1);
msatPatterns.addPattern(new int[]{0, 1, 2}); //pattern in the correct code form.
//create tree
NewickImporter importer = new NewickImporter("(taxon1:7.5,(taxon2:5.3,taxon3:5.3):2.2);");
Tree tree = importer.importTree(null);
//treeModel
TreeModel treeModel = new TreeModel(tree);
//msatsubstModel
AsymmetricQuadraticModel aqm1 = new AsymmetricQuadraticModel(msat, null);
//siteModel
GammaSiteModel siteModel = new GammaSiteModel(aqm1);
//treeLikelihood
treeLikelihood1 = new TreeLikelihood(
msatPatterns,
treeModel,
siteModel,
null,
null,
false, false, true, false, false);
setUpExample2();
setUpExample3();
}
private void setUpExample2()throws Exception{
//taxa
ArrayList<Taxon> taxonList2= new ArrayList<Taxon>();
Collections.addAll(
taxonList2,
new Taxon("taxon1"),
new Taxon("taxon2"),
new Taxon("taxon3"),
new Taxon("taxon4"),
new Taxon("taxon5")
);
Taxa taxa2 = new Taxa(taxonList2);
//msat datatype
Microsatellite msat = new Microsatellite(1,3);
Patterns msatPatterns = new Patterns(msat, taxa2);
msatPatterns.addPattern(new int[]{0, 1, 2, 1, 2}); //pattern in the correct code form.
//create tree
NewickImporter importer = new NewickImporter("(((taxon1:1.5,taxon2:1.5):1.5,(taxon3:2.1,taxon4:2.1):0.9):0.7,taxon5:3.7);");
Tree tree = importer.importTree(null);
//treeModel
TreeModel treeModel = new TreeModel(tree);
//msatsubstModel
AsymmetricQuadraticModel aqm2 = new AsymmetricQuadraticModel(msat, null);
//siteModel
GammaSiteModel siteModel = new GammaSiteModel(aqm2);
//treeLikelihood
treeLikelihood2 = new TreeLikelihood(
msatPatterns,
treeModel,
siteModel,
null,
null,
false, false, true, false, false);
}
private void setUpExample3() throws Exception{
//taxa
ArrayList<Taxon> taxonList3= new ArrayList<Taxon>();
Collections.addAll(
taxonList3,
new Taxon("taxon1"),
new Taxon("taxon2"),
new Taxon("taxon3"),
new Taxon("taxon4"),
new Taxon("taxon5"),
new Taxon("taxon6"),
new Taxon("taxon7")
);
Taxa taxa3 = new Taxa(taxonList3);
//msat datatype
Microsatellite msat = new Microsatellite(1,4);
Patterns msatPatterns = new Patterns(msat, taxa3);
msatPatterns.addPattern(new int[]{0,3,1,2,3,0,1}); //pattern in the correct code form.
//create tree
NewickImporter importer =
new NewickImporter("(((taxon1:0.3,taxon2:0.3):0.6,taxon3:0.9):0.9,((taxon4:0.5,taxon5:0.5):0.3,(taxon6:0.7,taxon7:0.7):0.1):1.0);");
Tree tree = importer.importTree(null);
//treeModel
TreeModel treeModel = new TreeModel(tree);
//msatsubstModel
AsymmetricQuadraticModel aqm3 = new AsymmetricQuadraticModel(msat, null);
//siteModel
GammaSiteModel siteModel = new GammaSiteModel(aqm3);
//treeLikelihood
treeLikelihood3 = new TreeLikelihood(
msatPatterns,
treeModel,
siteModel,
null,
null,
false, false, true, false, false);
}
public void testMsatFullLikelihood(){
double logL1 = -3.29585637705580; //answer calculated by hand.
assertEquals(logL1, treeLikelihood1.getLogLikelihood(), 1e-10);
double logL2 = -5.51026695214529;
assertEquals(logL2, treeLikelihood2.getLogLikelihood(), 1e-10);
double logL3 = -14.39899197302407;
assertEquals(logL3, treeLikelihood3.getLogLikelihood(), 1e-10);
}
}