package dr.evomodel.antigenic.phyloClustering.statistics;
import java.util.LinkedList;
import dr.evolution.tree.NodeRef;
import dr.evomodel.antigenic.phyloClustering.TreeClusteringVirusesPrior;
import dr.evomodel.tree.TreeModel;
import dr.inference.model.*;
import dr.xml.*;
/**
* @author Charles Cheung
* @author Trevor Bedford
*/
public class DriverCountStatistic extends Statistic.Abstract implements VariableListener {
public static final String DRIVERCOUNT_STATISTIC = "DriverCountStatistic";
private TreeModel treeModel;
private TreeClusteringVirusesPrior clusterPrior;
public DriverCountStatistic(TreeModel tree, TreeClusteringVirusesPrior clusterPrior_in) {
this.treeModel = tree;
this.clusterPrior = clusterPrior_in;
}
public int getDimension() {
int[] causalCount = clusterPrior.getCausalCount();
int numdata = causalCount.length *2;
return numdata;
}
//assume print in order... so before printing the first number,
//determine all the nodes that are active.
public double getStatisticValue(int dim) {
int[] causalCount = clusterPrior.getCausalCount();
int[] nonCausalCount = clusterPrior.getNonCausalCount();
int index = dim/2;
double value = -1;
if(dim%2==0){
value = causalCount[index];
}
else{
value = nonCausalCount[index];
}
//System.out.println("dim=" + dim + " dim%2=" + dim%2 + " and index = " + index + " value = " + value);
return ( value);
}
public String getDimensionName(int dim) {
String name = "";
if(dim%2==0){
name += "C";
}
else{
name += "N";
}
name += ""+ (dim/2 +1);
return name;
}
public void variableChangedEvent(Variable variable, int index, Parameter.ChangeType type) {
// do nothing
//System.out.println("hi got printed");
}
public static XMLObjectParser PARSER = new AbstractXMLObjectParser() {
public String getParserName() {
return DRIVERCOUNT_STATISTIC;
}
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
TreeModel treeModel = (TreeModel) xo.getChild(TreeModel.class);
TreeClusteringVirusesPrior clusterPrior = (TreeClusteringVirusesPrior) xo.getChild(TreeClusteringVirusesPrior.class);
return new DriverCountStatistic( treeModel, clusterPrior);
}
//************************************************************************
// AbstractXMLObjectParser implementation
//************************************************************************
public String getParserDescription() {
return ".";
}
public Class getReturnType() {
return DriverCountStatistic.class;
}
public XMLSyntaxRule[] getSyntaxRules() {
return rules;
}
private XMLSyntaxRule[] rules = new XMLSyntaxRule[]{
new ElementRule(TreeModel.class),
new ElementRule(TreeClusteringVirusesPrior.class),
};
};
}