package test.dr.evomodel.substmodel; import dr.evolution.util.Taxon; import dr.evolution.util.Taxa; import dr.evolution.datatype.Microsatellite; import dr.evolution.alignment.Patterns; import dr.evolution.io.NewickImporter; import dr.evolution.tree.Tree; import dr.evomodel.tree.TreeModel; import dr.evomodel.tree.MicrosatelliteSamplerTreeModel; import dr.oldevomodel.substmodel.AsymmetricQuadraticModel; import dr.oldevomodel.substmodel.TwoPhaseModel; import dr.oldevomodel.substmodel.LinearBiasModel; import dr.oldevomodel.treelikelihood.MicrosatelliteSamplerTreeLikelihood; import dr.evomodel.branchratemodel.BranchRateModel; import dr.evomodel.branchratemodel.StrictClockBranchRates; import dr.inference.model.Parameter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import junit.framework.TestCase; /** * @author Chieh-Hsi Wu */ public class MsatSamplingTreeLikelihoodTest extends TestCase { MicrosatelliteSamplerTreeLikelihood eu1Likelihood; MicrosatelliteSamplerTreeLikelihood eu2Likelihood; MicrosatelliteSamplerTreeLikelihood ec1Likelihood; MicrosatelliteSamplerTreeLikelihood ec2Likelihood; MicrosatelliteSamplerTreeLikelihood el1Likelihood; MicrosatelliteSamplerTreeLikelihood pu1Likelihood; MicrosatelliteSamplerTreeLikelihood pu2Likelihood; MicrosatelliteSamplerTreeLikelihood pc1Likelihood; MicrosatelliteSamplerTreeLikelihood pc2Likelihood; MicrosatelliteSamplerTreeLikelihood pl1Likelihood; public void setUp() throws Exception{ super.setUp(); //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,6); Patterns msatPatterns = new Patterns(msat, taxa3); msatPatterns.addPattern(new int[]{0,1,3,2,4,5,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 eu1 = new AsymmetricQuadraticModel(msat, null); //create msatSamplerTreeModel Parameter internalVal = new Parameter.Default(new double[]{2, 3, 4, 2, 1, 5}); int[] externalValues = msatPatterns.getPattern(0); HashMap<String, Integer> taxaMap = new HashMap<String, Integer>(externalValues.length); boolean internalValuesProvided = true; for(int i = 0; i < externalValues.length; i++){ taxaMap.put(msatPatterns.getTaxonId(i),i); } MicrosatelliteSamplerTreeModel msatTreeModel = new MicrosatelliteSamplerTreeModel("JUnitTestEx", treeModel, internalVal, msatPatterns, externalValues, taxaMap, internalValuesProvided); //create msatSamplerTreeLikelihood BranchRateModel branchRateModel = new StrictClockBranchRates(new Parameter.Default(1.0)); eu1Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,eu1, branchRateModel); //eu2 TwoPhaseModel eu2 = new TwoPhaseModel( msat, null, eu1, new Parameter.Default(0.0), new Parameter.Default(0.4), null, false ); eu2Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,eu2, branchRateModel); //ec1 LinearBiasModel ec1 = new LinearBiasModel( msat, null, eu1, new Parameter.Default(0.48), new Parameter.Default(0.0), false, false, false ); ec1Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,ec1, branchRateModel); //ec2 TwoPhaseModel ec2 = new TwoPhaseModel( msat, null, ec1, new Parameter.Default(0.0), new Parameter.Default(0.4), null, false ); ec2Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,ec2, branchRateModel); //el1 LinearBiasModel el1 = new LinearBiasModel( msat, null, eu1, new Parameter.Default(0.2), new Parameter.Default(-0.018), true, false, false ); el1Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,el1, branchRateModel); AsymmetricQuadraticModel pu1 = new AsymmetricQuadraticModel( msat, null, new Parameter.Default(1.0), new Parameter.Default(0.015), new Parameter.Default(0.0), new Parameter.Default(1.0), new Parameter.Default(0.015), new Parameter.Default(0.0), false ); pu1Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,pu1, branchRateModel); //ec2 TwoPhaseModel pu2 = new TwoPhaseModel( msat, null, pu1, new Parameter.Default(0.0), new Parameter.Default(0.4), null, false ); pu2Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,pu2, branchRateModel); //ec1 LinearBiasModel pc1 = new LinearBiasModel( msat, null, pu1, new Parameter.Default(0.48), new Parameter.Default(0.0), false, false, false ); pc1Likelihood = new MicrosatelliteSamplerTreeLikelihood(msatTreeModel,pc1, branchRateModel); } public void testMsatSamplerTreeLikelihood(){ double eu1LogLik = -40.83979410253295; assertEquals(eu1LogLik, eu1Likelihood.getLogLikelihood(), 1e-10); double eu2LogLik = -31.06158432691919; assertEquals(eu2LogLik, eu2Likelihood.getLogLikelihood(), 1e-10); double ec1LogLik = -40.78984094007343; assertEquals(ec1LogLik, ec1Likelihood.getLogLikelihood(), 1e-10); double ec2LogLik = -31.0303143412092; assertEquals(ec2LogLik, ec2Likelihood.getLogLikelihood(), 1e-10); double el1LogLik = -40.8979343964233; assertEquals(el1LogLik, el1Likelihood.getLogLikelihood(), 1e-10); double pu1LogLik = -40.8068080725352; assertEquals(pu1LogLik, pu1Likelihood.getLogLikelihood(), 1e-10); double pu2LogLik = -31.07280789202575; assertEquals(pu2LogLik, pu2Likelihood.getLogLikelihood(), 1e-10); double pc1LogLik = -40.7148747667439; assertEquals(pc1LogLik, pc1Likelihood.getLogLikelihood(), 1e-10); } }