package dr.app.bss; import java.io.File; import dr.app.beagle.evomodel.branchmodel.BranchModel; import dr.app.beagle.evomodel.branchmodel.HomogeneousBranchModel; import dr.app.beagle.evomodel.sitemodel.GammaSiteRateModel; import dr.app.beagle.evomodel.substmodel.FrequencyModel; import dr.app.beagle.evomodel.substmodel.GTR; import dr.app.beagle.evomodel.substmodel.GY94CodonModel; import dr.app.beagle.evomodel.substmodel.HKY; import dr.app.beagle.evomodel.substmodel.TN93; import dr.evolution.datatype.Codons; import dr.evolution.datatype.Nucleotides; import dr.evomodel.branchratemodel.BranchRateModel; import dr.evomodel.branchratemodel.StrictClockBranchRates; import dr.evomodel.tree.TreeModel; import dr.inference.model.Parameter; //TODO: serialize public class PartitionData { public int from = 1; public int to = 1000; public int every = 1; // ////////////////// // ---TREE MODEL---// // ////////////////// public File treeFile = null; public TreeModel treeModel = null; // /////////////////////////// // ---SUBSTITUTION MODELS---// // /////////////////////////// public int substitutionModel = 0; public static String[] substitutionModels = { "HKY", // "GTR", // "TN93", // "Yang Codon Model" // }; public static String[] substitutionParameterNames = new String[] { "Kappa value", // HKY "AC", // GTR "AG", // GTR "AT", // GTR "CG", // GTR "CT", // GTR "GT", // GTR "Kappa 1", // TN93 "Kappa 2", // TN93 "Omega value", // Yang Codon Model "Kappa value" // Yang Codon Model }; public int[][] substitutionParameterIndices = { { 0 }, // HKY { 1, 2, 3, 4, 5, 6 }, // GTR { 7, 8 }, // TN93 { 9, 10 }, // Yang Codon Model }; public double[] substitutionParameterValues = new double[] { 1.0, // Kappa-value 1.0, // AC 1.0, // AG 1.0, // AT 1.0, // CG 1.0, // CT 1.0, // GT 1.0, // Kappa 1 1.0, // Kappa 2 0.1, // Omega value 1.0 // Kappa value }; public BranchModel createBranchModel() { BranchModel branchModel = null; if (this.substitutionModel == 0) { // HKY Parameter kappa = new Parameter.Default(1, substitutionParameterValues[0]); FrequencyModel frequencyModel = this.createFrequencyModel(); HKY hky = new HKY(kappa, frequencyModel); branchModel = new HomogeneousBranchModel(hky); } else if (this.substitutionModel == 1) { // GTR Parameter ac = new Parameter.Default(1, substitutionParameterValues[1]); Parameter ag = new Parameter.Default(1, substitutionParameterValues[2]); Parameter at = new Parameter.Default(1, substitutionParameterValues[3]); Parameter cg = new Parameter.Default(1, substitutionParameterValues[4]); Parameter ct = new Parameter.Default(1, substitutionParameterValues[5]); Parameter gt = new Parameter.Default(1, substitutionParameterValues[6]); FrequencyModel frequencyModel = this.createFrequencyModel(); GTR gtr = new GTR(ac, ag, at, cg, ct, gt, frequencyModel); branchModel = new HomogeneousBranchModel(gtr); } else if (this.substitutionModel == 2) { // TN93 Parameter kappa1 = new Parameter.Default(1, substitutionParameterValues[7]); Parameter kappa2 = new Parameter.Default(1, substitutionParameterValues[8]); FrequencyModel frequencyModel = this.createFrequencyModel(); TN93 tn93 = new TN93(kappa1, kappa2, frequencyModel); branchModel = new HomogeneousBranchModel(tn93); } else if (this.substitutionModel == 3) { // Yang Codon Model FrequencyModel frequencyModel = this.createFrequencyModel(); Parameter kappa = new Parameter.Default(1, substitutionParameterValues[9]); Parameter omega = new Parameter.Default(1, substitutionParameterValues[10]); GY94CodonModel yangCodonModel = new GY94CodonModel(Codons.UNIVERSAL, omega, kappa, frequencyModel); branchModel = new HomogeneousBranchModel(yangCodonModel); } else if (this.substitutionModel == 4) { System.out.println("Not yet implemented"); } return branchModel; }// END: createBranchSubstitutionModel // //////////////////// // ---CLOCK MODELS---// // //////////////////// public int clockModel = 0; public static String[] clockModels = { "Strict Clock", // }; public static String[] clockParameterNames = new String[] { "Clock rate", // }; public int[][] clockParameterIndices = { { 0 }, // StrictClock }; public double[] clockParameterValues = new double[] { 1.2E-2, // clockrate }; public BranchRateModel createBranchRateModel() { BranchRateModel branchRateModel = null; if (this.clockModel == 0) { // Strict Clock Parameter rateParameter = new Parameter.Default(1, clockParameterValues[0]); branchRateModel = new StrictClockBranchRates(rateParameter); } else if (this.clockModel == 1) { System.out.println("Not yet implemented"); } return branchRateModel; }// END: createBranchRateModel // //////////////////////// // ---FREQUENCY MODELS---// // //////////////////////// public int frequencyModel = 0; public static String[] frequencyModels = { "Nucleotide frequencies", // "Codon frequencies" }; public static String[] frequencyParameterNames = new String[] { "Nucleotide frequencies 1", // "Nucleotide frequencies 2", // "Nucleotide frequencies 3", // "Nucleotide frequencies 4", // "Codon frequencies 1", // "Codon frequencies 2", // "Codon frequencies 3", // "Codon frequencies 4", // "Codon frequencies 5", // "Codon frequencies 6", // "Codon frequencies 7", // "Codon frequencies 8", // "Codon frequencies 9", // "Codon frequencies 10", // "Codon frequencies 11", // "Codon frequencies 12", // "Codon frequencies 13", // "Codon frequencies 14", // "Codon frequencies 15", // "Codon frequencies 16", // "Codon frequencies 17", // "Codon frequencies 18", // "Codon frequencies 19", // "Codon frequencies 20", // "Codon frequencies 21", // "Codon frequencies 22", // "Codon frequencies 23", // "Codon frequencies 24", // "Codon frequencies 25", // "Codon frequencies 26", // "Codon frequencies 27", // "Codon frequencies 28", // "Codon frequencies 29", // "Codon frequencies 30", // "Codon frequencies 31", // "Codon frequencies 32", // "Codon frequencies 33", // "Codon frequencies 34", // "Codon frequencies 35", // "Codon frequencies 36", // "Codon frequencies 37", // "Codon frequencies 38", // "Codon frequencies 39", // "Codon frequencies 40", // "Codon frequencies 41", // "Codon frequencies 42", // "Codon frequencies 43", // "Codon frequencies 44", // "Codon frequencies 45", // "Codon frequencies 46", // "Codon frequencies 47", // "Codon frequencies 48", // "Codon frequencies 49", // "Codon frequencies 50", // "Codon frequencies 51", // "Codon frequencies 52", // "Codon frequencies 53", // "Codon frequencies 54", // "Codon frequencies 55", // "Codon frequencies 56", // "Codon frequencies 57", // "Codon frequencies 58", // "Codon frequencies 59", // "Codon frequencies 60", // "Codon frequencies 61", // }; public int[][] frequencyParameterIndices = { { 0, 1, 2, 3 }, // Nucleotidefrequencies { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, // 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, // 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, // 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, // 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, // 64 } // Codonfrequencies }; public double[] frequencyParameterValues = new double[] { 0.25, // nucleotidefrequencies1 0.25, // nucleotidefrequencies2 0.25, // nucleotidefrequencies3 0.25, // nucleotidefrequencies4 0.0163936, // codonfrequencies1 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344, // 0.01639344 // codonfrequencies61 }; public FrequencyModel createFrequencyModel() { FrequencyModel frequencyModel = null; if (this.frequencyModel == 0) { // Nucleotidefrequencies Parameter freqs = new Parameter.Default(new double[] { frequencyParameterValues[0], frequencyParameterValues[1], frequencyParameterValues[2], frequencyParameterValues[3] }); frequencyModel = new FrequencyModel(Nucleotides.INSTANCE, freqs); } else if (this.frequencyModel == 1) { Parameter freqs = new Parameter.Default(new double[] { frequencyParameterValues[4], frequencyParameterValues[5], frequencyParameterValues[6], frequencyParameterValues[7], frequencyParameterValues[8], frequencyParameterValues[9], frequencyParameterValues[10], frequencyParameterValues[11], frequencyParameterValues[12], frequencyParameterValues[13], frequencyParameterValues[14], frequencyParameterValues[15], frequencyParameterValues[16], frequencyParameterValues[17], frequencyParameterValues[18], frequencyParameterValues[19], frequencyParameterValues[20], frequencyParameterValues[21], frequencyParameterValues[22], frequencyParameterValues[23], frequencyParameterValues[24], frequencyParameterValues[25], frequencyParameterValues[26], frequencyParameterValues[27], frequencyParameterValues[28], frequencyParameterValues[29], frequencyParameterValues[30], frequencyParameterValues[31], frequencyParameterValues[32], frequencyParameterValues[33], frequencyParameterValues[34], frequencyParameterValues[35], frequencyParameterValues[36], frequencyParameterValues[37], frequencyParameterValues[38], frequencyParameterValues[39], frequencyParameterValues[40], frequencyParameterValues[41], frequencyParameterValues[42], frequencyParameterValues[43], frequencyParameterValues[44], frequencyParameterValues[45], frequencyParameterValues[46], frequencyParameterValues[47], frequencyParameterValues[48], frequencyParameterValues[49], frequencyParameterValues[50], frequencyParameterValues[51], frequencyParameterValues[52], frequencyParameterValues[53], frequencyParameterValues[54], frequencyParameterValues[55], frequencyParameterValues[56], frequencyParameterValues[57], frequencyParameterValues[58], frequencyParameterValues[59], frequencyParameterValues[60], frequencyParameterValues[61], frequencyParameterValues[62], frequencyParameterValues[63], frequencyParameterValues[64] }); frequencyModel = new FrequencyModel(Codons.UNIVERSAL, freqs); } else if (this.frequencyModel == 2) { System.out.println("Not yet implemented"); } return frequencyModel; }// END: createFrequencyModel // //////////////////////// // ---SITE RATE MODELS---// // //////////////////////// public int siteModel = 0; public static String[] siteModels = { "No model", // "Gamma Site Rate Model", // }; public static String[] siteParameterNames = new String[] { "Gamma categories", // "alpha", // }; public int[][] siteParameterIndices = { {}, // nomodel { 0, 1 }, // GammaSiteRateModel }; public double[] siteParameterValues = new double[] { 4.0, // GammaCategories 0.5, // alpha }; public GammaSiteRateModel createSiteRateModel() { GammaSiteRateModel siteModel = null; String name = "siteModel"; if (this.siteModel == 0) { // no model siteModel = new GammaSiteRateModel("siteModel"); } else if (this.siteModel == 1) { // GammaSiteRateModel siteModel = new GammaSiteRateModel(name, siteParameterValues[1], (int) siteParameterValues[0]); } else if (this.siteModel == 2) { System.out.println("Not yet implemented"); } return siteModel; }// END: createGammaSiteRateModel public PartitionData() { }// END: Constructor // /////////////////// // ---EPOCH MODEL---// // /////////////////// // public int epochCount = 3; // // public int[] transitionTimes = new int[] { 10, 20 }; // // public double[] parameterValues = new double[] { 1.0, 10.0, 1.0 }; // // public EpochBranchModel createEpochBranchModel() { // // // create Frequency Model // FrequencyModel frequencyModel = this.createFrequencyModel(); // List<FrequencyModel> frequencyModelList = new ArrayList<FrequencyModel>(); // frequencyModelList.add(frequencyModel); // // // create branch rate model //// BranchRateModel branchRateModel = this.createBranchRateModel(); // // // 1st epoch // Parameter epochTimes = null; // List<SubstitutionModel> substModelList = new ArrayList<SubstitutionModel>(); // Parameter kappa = new Parameter.Default(1, parameterValues[0]); // HKY hky = new HKY(kappa, frequencyModel); // substModelList.add(hky); // // // epochs 2, 3, ... // for (int i = 1; i < epochCount; i++) { // // if (i == 1) { // epochTimes = new Parameter.Default(1, transitionTimes[0]); // } else { // epochTimes.addDimension(1, transitionTimes[i - 1]); // } // // kappa = new Parameter.Default(1, parameterValues[i]); // hky = new HKY(kappa, frequencyModel); // substModelList.add(hky); // // }//END: i loop // // EpochBranchModel epochModel = new EpochBranchModel( // treeModel, // substModelList, // // epochTimes // // ); // // return (epochModel); // }// END: createBranchRateModel }// END: class