/*
* PartitionData.java
*
* Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard
*
* This file is part of BEAST.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* BEAST is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package dr.app.bss;
import java.io.Serializable;
import dr.evomodel.branchmodel.BranchModel;
import dr.evomodel.branchmodel.HomogeneousBranchModel;
import dr.evomodel.siteratemodel.GammaSiteRateModel;
import dr.evomodel.substmodel.EmpiricalRateMatrix;
import dr.evomodel.substmodel.FrequencyModel;
import dr.evomodel.substmodel.nucleotide.GTR;
import dr.evomodel.substmodel.codon.GY94CodonModel;
import dr.evomodel.substmodel.nucleotide.HKY;
import dr.evomodel.substmodel.codon.MG94HKYCodonModel;
import dr.evomodel.substmodel.nucleotide.TN93;
import dr.evolution.coalescent.CoalescentSimulator;
import dr.evolution.coalescent.ConstantPopulation;
import dr.evolution.coalescent.DemographicFunction;
import dr.evolution.coalescent.ExponentialGrowth;
import dr.evolution.datatype.AminoAcids;
import dr.evolution.datatype.Codons;
import dr.evolution.datatype.DataType;
import dr.evolution.datatype.Nucleotides;
import dr.evolution.sequence.Sequence;
import dr.evolution.util.Taxa;
import dr.evolution.util.Units;
import dr.evomodel.branchratemodel.BranchRateModel;
import dr.evomodel.branchratemodel.DiscretizedBranchRates;
import dr.evomodel.branchratemodel.StrictClockBranchRates;
import dr.evomodel.substmodel.aminoacid.*;
import dr.oldevomodel.sitemodel.SiteModel;
import dr.evomodel.tree.TreeModel;
import dr.evoxml.TaxaParser;
import dr.inference.distribution.ExponentialDistributionModel;
import dr.inference.distribution.InverseGaussianDistributionModel;
import dr.inference.distribution.LogNormalDistributionModel;
import dr.inference.distribution.ParametricDistributionModel;
import dr.inference.model.Parameter;
import dr.inferencexml.distribution.DistributionModelParser;
import dr.inferencexml.distribution.InverseGaussianDistributionModelParser;
import dr.inferencexml.distribution.LogNormalDistributionModelParser;
/**
* @author Filip Bielejec
* @version $Id$
*/
@SuppressWarnings("serial")
public class PartitionData implements Serializable {
public PartitionData() {
}// END: Constructor
public int from = 1;
public int to = 10;
public int every = 1;
public int createPartitionSiteCount() {
return ((to - from) / every) + 1;
}
public void resetIdrefs() {
resetClockModelIdref();
resetFrequencyModelIdref();
resetSiteRateModelIdref();
resetSubstitutionModelIdref();
resetTreeModelIdref();
resetDemographicModelIdref();
resetTaxaIdref();
}
// ///////////////////////
// ---TREE ANNOTATING---//
// ///////////////////////
// private LinkedHashMap<NodeRef, int[]> sequenceMap;
//
// public void setSequenceMap(LinkedHashMap<NodeRef, int[]> sequenceMap) {
// this.sequenceMap = sequenceMap;
// }
//
// public LinkedHashMap<NodeRef, int[]> getSequenceMap() {
// return sequenceMap;
// }
// /////////////////////////
// ---DEMOGRAPHIC MODEL---//
// /////////////////////////
//TODO: LogisticGrowth.getInverseIntensity
public static final int lastImplementedIndex = 3;
public int demographicModelIndex = 0;
public String demographicModelIdref = Utils.DEMOGRAPHIC_MODEL;
public void resetDemographicModelIdref() {
this.demographicModelIdref = Utils.DEMOGRAPHIC_MODEL;
}
public static String[] demographicModels = {
"No Model (user-specified tree)",
"Constant Population",
"Exponential Growth (Growth Rate)",
"Exponential Growth (Doubling Time)",
// "Logistic Growth (Growth Rate)",
// "Logistic Growth (Doubling Time)",
// "Expansion (Growth Rate)",
// "Expansion (Doubling Time)",
};
public static String[] demographicParameterNames = new String[] {
"Population Size", // Constant Population
"Population Size", // Exponential Growth (Growth Rate)
"Growth Rate", // Exponential Growth (Growth Rate)
"Population Size", // Exponential Growth (Doubling Time)
"Doubling Time", // Exponential Growth (Doubling Time)
// "Population Size", // Logistic Growth (Growth Rate)
// "Growth Rate", // Logistic Growth (Growth Rate)
// "Logistic Shape (Half-life)", // Logistic Growth (Growth Rate)
// "Population Size", // Logistic Growth (Doubling Time)
// "Doubling Time", // Logistic Growth (Doubling Time)
// "Logistic Shape (Half-life)", // Logistic Growth (Doubling Time)
// "Population Size", // Expansion (Growth Rate)
// "Ancestral Proportion", // Expansion (Growth Rate)
// "Growth Rate", // Expansion (Growth Rate)
// "Population Size", // Expansion (Doubling Time)
// "Ancestral Proportion", // Expansion (Doubling Time)
// "Doubling Time", // Expansion (Doubling Time)
};
public static int[][] demographicParameterIndices = {
{ }, // No model
{ 0 }, // Constant Population
{ 1, 2 }, // Exponential Growth (Growth Rate)
{ 3, 4 }, // Exponential Growth (Doubling Time)
// { 5, 6, 7 }, // Logistic Growth (Growth Rate)
// { 8, 9, 10 }, // Logistic Growth (Doubling Time)
// { 11, 12, 13 }, // Expansion (Growth Rate)
// { 14, 15, 16 } // Expansion (Doubling Time)
};
public double[] demographicParameterValues = new double[] {
/*Constant Population*/
1000.0, // Population Size
/*Exponential Growth (Growth Rate)*/
1000.0, // Population Size
0.5, // Growth Rate
/*Exponential Growth (Doubling Time)*/
1000.0, // Population Size
10.0, // Doubling Time
// /*Logistic Growth (Growth Rate)*/
// 1000.0, // Population Size
// 0.5, // Growth Rate
// 50.0, // Logistic Shape (Half-life)
// 1000.0, // Population Size
// 10.0, // Doubling Time
// 50.0, // Logistic Shape (Half-life)
// 1000.0, // Population Size
// 0.1, // Ancestral Proportion
// 0.5, // Growth Rate
// 1000.0, // Population Size
// 0.1, // Ancestral Proportion
// 10.0 // Doubling Time
};
public DemographicFunction createDemographicFunction() {
DemographicFunction demographicFunction = null;
if (this.demographicModelIndex == 0) { // No model
// do nothing
} else if (this.demographicModelIndex == 1) {// Constant Population
demographicFunction = new ConstantPopulation(Units.Type.YEARS);
((ConstantPopulation)demographicFunction).setN0(demographicParameterValues[0]);
} else if (this.demographicModelIndex == 2) {// Exponential Growth (Growth Rate)
demographicFunction = new ExponentialGrowth(Units.Type.YEARS);
((ExponentialGrowth) demographicFunction).setN0(demographicParameterValues[1]);
((ExponentialGrowth) demographicFunction).setGrowthRate(demographicParameterValues[2]);
} else if (this.demographicModelIndex == 3) {// Exponential Growth (Doubling Time)
demographicFunction = new ExponentialGrowth(Units.Type.YEARS);
((ExponentialGrowth) demographicFunction).setN0(demographicParameterValues[3]);
((ExponentialGrowth) demographicFunction).setDoublingTime(demographicParameterValues[4]);
// } else if (this.demographicModelIndex == 4) {// Logistic Growth (Growth Rate)
//
// demographicFunction = new LogisticGrowth(Units.Type.YEARS);
// ((LogisticGrowth) demographicFunction).setN0(demographicParameterValues[5]);
// ((LogisticGrowth) demographicFunction).setGrowthRate(demographicParameterValues[6]);
// ((LogisticGrowth) demographicFunction).setTime50(demographicParameterValues[7]);
//
// } else if (this.demographicModelIndex == 5) {// Logistic Growth (Doubling Time)
//
// demographicFunction = new LogisticGrowth(Units.Type.YEARS);
// ((LogisticGrowth) demographicFunction).setN0(demographicParameterValues[8]);
// ((LogisticGrowth) demographicFunction).setDoublingTime(demographicParameterValues[9]);
// ((LogisticGrowth) demographicFunction).setTime50(demographicParameterValues[10]);
//
// } else if (this.demographicModelIndex == 6) {// Expansion (Growth Rate)
//
// demographicFunction = new Expansion(Units.Type.YEARS);
// ((Expansion) demographicFunction).setN0(demographicParameterValues[11]);
// ((Expansion) demographicFunction).setProportion(demographicParameterValues[12]);
// ((Expansion) demographicFunction).setGrowthRate(demographicParameterValues[13]);
//
// } else if (this.demographicModelIndex == 7) {// Expansion (Doubling Time)
//
// demographicFunction = new Expansion(Units.Type.YEARS);
// ((Expansion) demographicFunction).setN0(demographicParameterValues[14]);
// ((Expansion) demographicFunction).setProportion(demographicParameterValues[15]);
// ((Expansion) demographicFunction).setDoublingTime(demographicParameterValues[16]);
} else {
System.out.println("Not yet implemented");
}
return demographicFunction;
}// END: createDemographicFunction
// ////////////
// ---TAXA---//
// ////////////
public TreesTableRecord record = null;
public String taxaIdref = TaxaParser.TAXA;
public void resetTaxaIdref() {
this.taxaIdref = TaxaParser.TAXA;
}
// //////////////////
// ---TREE MODEL---//
// //////////////////
// public Tree tree = null;
public String treeModelIdref = TreeModel.TREE_MODEL;
public void resetTreeModelIdref() {
this.treeModelIdref = TreeModel.TREE_MODEL;
}
public TreeModel createTreeModel() {
TreeModel treeModel = null;
if (this.demographicModelIndex == 0 && this.record.isTreeSet()) {
treeModel = new TreeModel(this.record.getTree());
} else if( (this.demographicModelIndex > 0 && this.demographicModelIndex <= lastImplementedIndex) && this.record.isTreeSet()) {
Taxa taxa = new Taxa(this.record.getTree().asList());
CoalescentSimulator topologySimulator = new CoalescentSimulator();
treeModel = new TreeModel(topologySimulator.simulateTree(taxa, createDemographicFunction()));
} else if((this.demographicModelIndex > 0 && this.demographicModelIndex <= lastImplementedIndex) && this.record.isTaxaSet()) {
Taxa taxa = this.record.getTaxa();
CoalescentSimulator topologySimulator = new CoalescentSimulator();
treeModel = new TreeModel(topologySimulator.simulateTree(taxa, createDemographicFunction()));
// } else if (this.demographicModelIndex == 0 && this.record.taxaSet) {
// throw new RuntimeException("Data and demographic model incompatible for partition ");
} else {
throw new RuntimeException("Data and demographic model incompatible.");
}// END: demo model check
return treeModel;
}//END: createTreeModel
// /////////////////
// ---DATA TYPE---//
// /////////////////
public int dataTypeIndex = 0;
public static String[] dataTypes = { "Nucleotide", //
"Codon", //
"Amino acid" //
};
public DataType createDataType() {
DataType dataType = null;
if (this.dataTypeIndex == 0) { // Nucleotide
dataType = Nucleotides.INSTANCE;
} else if (this.dataTypeIndex == 1) { // Codon
dataType = Codons.UNIVERSAL;
} else if (this.dataTypeIndex == 2) { // AminoAcid
dataType = AminoAcids.INSTANCE;
} else {
System.out.println("Not yet implemented");
}
return dataType;
}// END: createDataType
// ///////////////////////////
// ---SUBSTITUTION MODELS---//
// ///////////////////////////
public int substitutionModelIndex = 0;
public String substitutionModelIdref = Utils.SUBSTITUTION_MODEL;
public void resetSubstitutionModelIdref() {
this.substitutionModelIdref = Utils.SUBSTITUTION_MODEL;
}
public static String[] substitutionModels = { "HKY", //
"GTR", //
"TN93", //
"GY94CodonModel", //
"MG94CodonModel",
"Blosum62", //
"CPREV", //
"Dayhoff", //
"FLU", //
"JTT", //
"LG", //
"MTREV", //
"WAG" //
};
public static int[] substitutionCompatibleDataTypes = { 0, // HKY
0, // GTR
0, // TN93
1, // GY94CodonModel
1, // MG94CodonModel
2, // Blosum62
2, // CPREV
2, // Dayhoff
2, // FLU
2, // JTT
2, // LG
2, // MTREV
2 // WAG
};
public static String[] substitutionParameterNames = new String[] {
"Kappa value", // HKY
"AC", // GTR
"AG", // GTR
"AT", // GTR
"CG", // GTR
"CT", // GTR
"GT", // GTR
"Kappa 1 (A-G)", // TN93
"Kappa 2 (C-T)", // TN93
"Omega value", // GY94CodonModel
"Kappa value", // GY94CodonModel
"Alpha value", // MG94CodonModel
"Beta value", // MG94CodonModel
"Kappa value" // MG94CodonModel
};
public static int[][] substitutionParameterIndices = { { 0 }, // HKY
{ 1, 2, 3, 4, 5, 6 }, // GTR
{ 7, 8 }, // TN93
{ 9, 10 }, // GY94CodonModel
{11, 12, 13}, // MG94CodonModel
{}, // Blosum62
{}, // CPREV
{}, // Dayhoff
{}, // FLU
{}, // JTT
{}, // LG
{}, // MTREV
{} // WAG
};
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
10.0, // Alpha value
1.0, // Beta value
1.0 // kappa value
};
public BranchModel createBranchModel() {
BranchModel branchModel = null;
if (this.substitutionModelIndex == 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.substitutionModelIndex == 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.substitutionModelIndex == 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.substitutionModelIndex == 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.substitutionModelIndex == 4) { // MG94CodonModel
FrequencyModel frequencyModel = this.createFrequencyModel();
Parameter alpha = new Parameter.Default(1, substitutionParameterValues[11]);
Parameter beta = new Parameter.Default(1, substitutionParameterValues[12]);
Parameter kappa = new Parameter.Default(1, substitutionParameterValues[13]);
MG94HKYCodonModel mg94 = new MG94HKYCodonModel(Codons.UNIVERSAL, alpha, beta, kappa, frequencyModel);
branchModel = new HomogeneousBranchModel(mg94);
} else if (this.substitutionModelIndex == 5) { // Blosum62
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = Blosum62.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else if (this.substitutionModelIndex == 6) { // CPREV
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = CPREV.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else if (this.substitutionModelIndex == 7) { // Dayhoff
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = Dayhoff.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else if (this.substitutionModelIndex == 8) { // JTT
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = JTT.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else if (this.substitutionModelIndex == 9) { // LG
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = LG.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else if (this.substitutionModelIndex == 10) { // MTREV
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = MTREV.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else if (this.substitutionModelIndex == 11) { // WAG
FrequencyModel frequencyModel = this.createFrequencyModel();
EmpiricalRateMatrix rateMatrix = WAG.INSTANCE;
EmpiricalAminoAcidModel empiricalAminoAcidModel = new EmpiricalAminoAcidModel(
rateMatrix, frequencyModel);
branchModel = new HomogeneousBranchModel(
empiricalAminoAcidModel);
} else {
System.out.println("Not yet implemented");
}
return branchModel;
}// END: createBranchSubstitutionModel
// ////////////////////////
// ---FREQUENCY MODELS---//
// ////////////////////////
public String frequencyModelIdref = Utils.FREQUENCY_MODEL;
public void resetFrequencyModelIdref() {
this.frequencyModelIdref = Utils.FREQUENCY_MODEL;
}
public int frequencyModelIndex = 0;
public static String[] frequencyModels = { "Nucleotide frequencies", //
"Codon frequencies", //
"Amino acid frequencies"
};
public static int[] frequencyCompatibleDataTypes = { 0, // Nucleotide
1, // Codon
2 // Amino acid
};
public static String[] frequencyParameterNames = new String[] {
"A frequency", // Nucleotide frequencies
"C frequency", // Nucleotide frequencies
"G frequency", // Nucleotide frequencies
"T frequency", // Nucleotide frequencies
"AAA frequency", // Codon frequencies
"AAC frequency", //
"AAG frequency", //
"AAT frequency", //
"ACA frequency", //
"ACC frequency", //
"ACG frequency", //
"ACT frequency", //
"AGA frequency", //
"AGC frequency", //
"AGG frequency", //
"AGT frequency", //
"ATA frequency", //
"ATC frequency", //
"ATG frequency", //
"ATT frequency", //
"CAA frequency", //
"CAC frequency", //
"CAG frequency", //
"CAT frequency", //
"CCA frequency", //
"CCC frequency", //
"CCG frequency", //
"CCT frequency", //
"CGA frequency", //
"CGC frequency", //
"CGG frequency", //
"CGT frequency", //
"CTA frequency", //
"CTC frequency", //
"CTG frequency", //
"CTT frequency", //
"GAA frequency", //
"GAC frequency", //
"GAG frequency", //
"GAT frequency", //
"GCA frequency", //
"GCC frequency", //
"GCG frequency", //
"GCT frequency", //
"GGA frequency", //
"GGC frequency", //
"GGG frequency", //
"GGT frequency", //
"GTA frequency", //
"GTC frequency", //
"GTG frequency", //
"GTT frequency", //
"TAC frequency", //
"TAT frequency", //
"TCA frequency", //
"TCC frequency", //
"TCG frequency", //
"TCT frequency", //
"TGC frequency", //
"TGG frequency", //
"TGT frequency", //
"TTA frequency", //
"TTC frequency", //
"TTG frequency", //
"TTT frequency", // Codon frequencies
"amino acid frequency 1", //
"amino acid frequency 2", //
"amino acid frequency 3", //
"amino acid frequency 4", //
"amino acid frequency 5", //
"amino acid frequency 6", //
"amino acid frequency 7", //
"amino acid frequency 8", //
"amino acid frequency 9", //
"amino acid frequency 10", //
"amino acid frequency 11", //
"amino acid frequency 12", //
"amino acid frequency 13", //
"amino acid frequency 14", //
"amino acid frequency 15", //
"amino acid frequency 16", //
"amino acid frequency 17", //
"amino acid frequency 18", //
"amino acid frequency 19", //
"amino acid frequency 20" //
};
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
{ 65, 66, 67, 68, 69, //
70, 71, 72, 73, 74, //
75, 76, 77, 78, 79, //
80, 81, 82, 83, 84 //
} // AminoAcidFrequencies
};
public double[] frequencyParameterValues = new double[] { 0.25, // A frequency
0.25, // C frequency
0.25, // G frequency
0.25, // T frequency
0.0163936, // AAA frequency
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, // TTT frequency
0.05, // aminoacidfrequency1
0.05, // aminoacidfrequency2
0.05, // aminoacidfrequency3
0.05, // aminoacidfrequency4
0.05, // aminoacidfrequency5
0.05, // aminoacidfrequency6
0.05, // aminoacidfrequency7
0.05, // aminoacidfrequency8
0.05, // aminoacidfrequency9
0.05, // aminoacidfrequency10
0.05, // aminoacidfrequency11
0.05, // aminoacidfrequency12
0.05, // aminoacidfrequency13
0.05, // aminoacidfrequency14
0.05, // aminoacidfrequency15
0.05, // aminoacidfrequency16
0.05, // aminoacidfrequency17
0.05, // aminoacidfrequency18
0.05, // aminoacidfrequency19
0.05 // aminoacidfrequency20
};
public FrequencyModel createFrequencyModel() {
FrequencyModel frequencyModel = null;
if (this.frequencyModelIndex == 0) { // Nucleotidefrequencies
Parameter freqs = new Parameter.Default(new double[] {
frequencyParameterValues[0], frequencyParameterValues[1],
frequencyParameterValues[2], frequencyParameterValues[3] });
DataType dataType = this.createDataType();
frequencyModel = new FrequencyModel(dataType, freqs);
} else if (this.frequencyModelIndex == 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] });
DataType dataType = this.createDataType();
frequencyModel = new FrequencyModel(dataType, freqs);
} else if (this.frequencyModelIndex == 2) {
Parameter freqs = new Parameter.Default(new double[] {
frequencyParameterValues[65], frequencyParameterValues[66], frequencyParameterValues[67], frequencyParameterValues[68],
frequencyParameterValues[69], frequencyParameterValues[70], frequencyParameterValues[71], frequencyParameterValues[72],
frequencyParameterValues[73], frequencyParameterValues[74], frequencyParameterValues[75], frequencyParameterValues[76],
frequencyParameterValues[77], frequencyParameterValues[78], frequencyParameterValues[79], frequencyParameterValues[80],
frequencyParameterValues[81], frequencyParameterValues[82], frequencyParameterValues[83], frequencyParameterValues[84]
});
DataType dataType = this.createDataType();
frequencyModel = new FrequencyModel(dataType, freqs);
} else {
System.out.println("Not yet implemented");
}
return frequencyModel;
}// END: createFrequencyModel
// ////////////////////
// ---CLOCK MODELS---//
// ////////////////////
public int clockModelIndex = 0;
public int LRC_INDEX = 1;
public String clockModelIdref = BranchRateModel.BRANCH_RATES;
public void resetClockModelIdref() {
this.clockModelIdref = BranchRateModel.BRANCH_RATES;
}
public static String[] clockModels = { "Strict Clock", // 0
"Lognormal relaxed clock (Uncorrelated)", // 1
"Exponential relaxed clock (Uncorrelated)", // 2
"Inverse Gaussian relaxed clock" // 3
};
public static String[] clockParameterNames = new String[] { "clock.rate", // StrictClock
"ucld.mean", // Lognormal relaxed clock
"ucld.stdev", // Lognormal relaxed clock
"ucld.offset", // Lognormal relaxed clock
"uced.mean", // Exponential relaxed clock
"uced.offset", // Exponential relaxed clock
"ig.mean", // Inverse Gaussian
"ig.stdev", // Inverse Gaussian
"ig.offset" // Inverse Gaussian
};
public static int[][] clockParameterIndices = { { 0 }, // StrictClock
{ 1, 2, 3 }, // Lognormal relaxed clock
{ 4, 5 }, // Exponential relaxed clock
{ 6, 7, 8 } // Inverse Gaussian
};
public double[] clockParameterValues = new double[] { 1.0, // clockrate
0.001, // ucld.mean
1.0, // ucld.stdev
0.0, // ucld.offset
1.0, // uced.mean
0.0, // uced.offset
0.0, // ig.mean
1.0, // ig.stdev
0.0 // ig.offset
};
public boolean lrcParametersInRealSpace = true;
public BranchRateModel createClockRateModel() {
BranchRateModel branchRateModel = null;
if (this.clockModelIndex == 0) { // Strict Clock
Parameter rateParameter = new Parameter.Default(1, clockParameterValues[0]);
branchRateModel = new StrictClockBranchRates(rateParameter);
} else if (this.clockModelIndex == LRC_INDEX) {// Lognormal relaxed clock
double numberOfBranches = 2 * (createTreeModel().getTaxonCount() - 1);
Parameter rateCategoryParameter = new Parameter.Default(numberOfBranches);
Parameter mean = new Parameter.Default(LogNormalDistributionModelParser.MEAN, 1, clockParameterValues[1]);
Parameter stdev = new Parameter.Default(LogNormalDistributionModelParser.STDEV, 1, clockParameterValues[2]);
//TODO: choose between log scale / real scale
ParametricDistributionModel distributionModel = new LogNormalDistributionModel(mean, stdev, clockParameterValues[3], lrcParametersInRealSpace, lrcParametersInRealSpace);
branchRateModel = new DiscretizedBranchRates(createTreeModel(), //
rateCategoryParameter, //
distributionModel, //
1, //
false, //
Double.NaN, //
true, //randomizeRates
false, // keepRates
false // cacheRates
);
} else if(this.clockModelIndex == 2) { // Exponential relaxed clock
double numberOfBranches = 2 * (createTreeModel().getTaxonCount() - 1);
Parameter rateCategoryParameter = new Parameter.Default(numberOfBranches);
Parameter mean = new Parameter.Default(DistributionModelParser.MEAN, 1, clockParameterValues[4]);
ParametricDistributionModel distributionModel = new ExponentialDistributionModel(mean, clockParameterValues[5]);
// branchRateModel = new DiscretizedBranchRates(createTreeModel(), rateCategoryParameter,
// distributionModel, 1, false, Double.NaN);
branchRateModel = new DiscretizedBranchRates(createTreeModel(), //
rateCategoryParameter, //
distributionModel, //
1, //
false, //
Double.NaN, //
true, //randomizeRates
false, // keepRates
false // cacheRates
);
} else if(this.clockModelIndex == 3) { // Inverse Gaussian
double numberOfBranches = 2 * (createTreeModel().getTaxonCount() - 1);
Parameter rateCategoryParameter = new Parameter.Default(numberOfBranches);
Parameter mean = new Parameter.Default(InverseGaussianDistributionModelParser.MEAN, 1, clockParameterValues[6]);
Parameter stdev = new Parameter.Default(InverseGaussianDistributionModelParser.STDEV, 1, clockParameterValues[7]);
ParametricDistributionModel distributionModel = new InverseGaussianDistributionModel(
mean, stdev, clockParameterValues[8], false);
branchRateModel = new DiscretizedBranchRates(createTreeModel(), //
rateCategoryParameter, //
distributionModel, //
1, //
false, //
Double.NaN, //
true, //randomizeRates
false, // keepRates
false // cacheRates
);
} else {
System.out.println("Not yet implemented");
}
return branchRateModel;
}// END: createBranchRateModel
// ///////////////////////
// ---SITE RATE MODEL---//
// ///////////////////////
public int siteRateModelIndex = 0;
public String siteRateModelIdref = SiteModel.SITE_MODEL;
public void resetSiteRateModelIdref() {
this.siteRateModelIdref = SiteModel.SITE_MODEL;
}
public static String[] siteRateModels = { "No Model", //
"Gamma Site Rate Model" //
};
public static String[] siteRateModelParameterNames = new String[] {
"Gamma categories", // Gamma Site Rate Model
"Alpha", // Gamma Site Rate Model
"Invariant sites proportion" // Gamma Site Rate Model
};
public static int[][] siteRateModelParameterIndices = { {}, // NoModel
{ 0, 1, 2 }, // GammaSiteRateModel
};
public double[] siteRateModelParameterValues = new double[] { 4.0, // GammaCategories
0.5, // Alpha
0.0 // Invariant sites proportion
};
public GammaSiteRateModel createSiteRateModel() {
GammaSiteRateModel siteModel = null;
String name = "siteModel";
if (this.siteRateModelIndex == 0) { // no model
siteModel = new GammaSiteRateModel(name);
} else if (this.siteRateModelIndex == 1) { // GammaSiteRateModel
siteModel = new GammaSiteRateModel(name,
siteRateModelParameterValues[1],
(int) siteRateModelParameterValues[0], siteRateModelParameterValues[2]);
} else {
System.out.println("Not yet implemented");
}
return siteModel;
}// END: createGammaSiteRateModel
// //////////////////////////
// ---ANCESTRAL SEQUENCE---//
// //////////////////////////
public String ancestralSequenceString = null;
public Sequence createAncestralSequence() {
Sequence sequence = new Sequence(ancestralSequenceString);
// sequence.appendSequenceString(ancestralSequenceString);
return sequence;
}
}// END: class