/*
* CovarionGTR.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.oldevomodel.substmodel;
import dr.evolution.datatype.OldHiddenNucleotides;
import dr.oldevomodelxml.substmodel.CovarionGTRParser;
import dr.inference.model.Parameter;
/**
* A general time reversible model of nucleotide evolution with
* covarion hidden rate categories.
*
* @author Alexei Drummond
* @version $Id$
*/
public class CovarionGTR extends AbstractCovarionDNAModel {
/**
* constructor
*
* @param dataType the data type
* @param freqModel the equlibrium frequencies
* @param hiddenRates the relative rates of the hidden categories
* (first hidden category has rate 1.0 so this parameter
* has dimension one less than number of hidden categories.
* @param rateACParameter the relative rate of A<->C substitutions
* @param rateAGParameter the relative rate of A<->G substitutions
* @param rateATParameter the relative rate of A<->T substitutions
* @param rateCGParameter the relative rate of C<->G substitutions
* @param rateCTParameter the relative rate of C<->T substitutions
* @param rateGTParameter the relative rate of G<->T substitutions
* each hidden category.
* @param switchingRates rates of switching between hidden rate classes
*/
public CovarionGTR(
OldHiddenNucleotides dataType,
Parameter hiddenRates,
Parameter switchingRates,
Parameter rateACParameter,
Parameter rateAGParameter,
Parameter rateATParameter,
Parameter rateCGParameter,
Parameter rateCTParameter,
Parameter rateGTParameter,
FrequencyModel freqModel) {
super(CovarionGTRParser.GTR_COVARION_MODEL, dataType, hiddenRates, switchingRates, freqModel);
if (rateACParameter != null) {
addVariable(rateACParameter);
rateACParameter.addBounds(new Parameter.DefaultBounds(Double.POSITIVE_INFINITY, 0.0, 1));
this.rateACParameter = rateACParameter;
}
if (rateAGParameter != null) {
addVariable(rateAGParameter);
rateAGParameter.addBounds(new Parameter.DefaultBounds(Double.POSITIVE_INFINITY, 0.0, 1));
this.rateAGParameter = rateAGParameter;
}
if (rateATParameter != null) {
addVariable(rateATParameter);
rateATParameter.addBounds(new Parameter.DefaultBounds(Double.POSITIVE_INFINITY, 0.0, 1));
this.rateATParameter = rateATParameter;
}
if (rateCGParameter != null) {
addVariable(rateCGParameter);
rateCGParameter.addBounds(new Parameter.DefaultBounds(Double.POSITIVE_INFINITY, 0.0, 1));
this.rateCGParameter = rateCGParameter;
}
if (rateCTParameter != null) {
addVariable(rateCTParameter);
rateCTParameter.addBounds(new Parameter.DefaultBounds(Double.POSITIVE_INFINITY, 0.0, 1));
this.rateCTParameter = rateCTParameter;
}
if (rateGTParameter != null) {
addVariable(rateGTParameter);
rateGTParameter.addBounds(new Parameter.DefaultBounds(Double.POSITIVE_INFINITY, 0.0, 1));
this.rateGTParameter = rateGTParameter;
}
}
double[] getRelativeDNARates() {
double[] rr = new double[6];
for (int i = 0; i < rr.length; i++) {
rr[i] = 1.0;
}
if (rateACParameter != null) {
rr[0] = rateACParameter.getParameterValue(0);
}
if (rateAGParameter != null) {
rr[1] = rateAGParameter.getParameterValue(0);
}
if (rateATParameter != null) {
rr[2] = rateATParameter.getParameterValue(0);
}
if (rateCGParameter != null) {
rr[3] = rateCGParameter.getParameterValue(0);
}
if (rateCTParameter != null) {
rr[4] = rateCTParameter.getParameterValue(0);
}
if (rateGTParameter != null) {
rr[5] = rateGTParameter.getParameterValue(0);
}
return rr;
}
private Parameter rateACParameter = null;
private Parameter rateAGParameter = null;
private Parameter rateATParameter = null;
private Parameter rateCGParameter = null;
private Parameter rateCTParameter = null;
private Parameter rateGTParameter = null;
}