package dr.evomodel.antigenic.phyloClustering.statistics; import java.util.Iterator; import java.util.LinkedList; import dr.evomodel.antigenic.phyloClustering.TreeClusteringVirusesPrior; import dr.evomodel.tree.TreeModel; import dr.inference.loggers.LogColumn; import dr.inference.loggers.Loggable; import dr.inference.loggers.NumberColumn; import dr.inference.model.Parameter; import dr.inference.model.Variable; import dr.xml.AbstractXMLObjectParser; import dr.xml.ElementRule; import dr.xml.XMLObject; import dr.xml.XMLObjectParser; import dr.xml.XMLParseException; import dr.xml.XMLSyntaxRule; public class CausalMutationsLogger implements Loggable { /** * @return the log columns. */ public LogColumn[] getColumns() { int numDimension = treeModel.getNodeCount(); LogColumn[] columns = new LogColumn[numDimension]; for (int i = 0; i < numDimension; i++) { //columns[i] = new StatisticColumn(getDimensionName(i), i); String traitName = "" + (i) + ":"; LinkedList<Integer>[] mutationList= clusterPrior.getMutationList(); if(mutationList[i] != null){ Iterator itr = mutationList[i].iterator(); int count = 0; while(itr.hasNext()){ if(count > 0){ traitName +=","; } int curMutation = ((Integer) itr.next()).intValue(); traitName += curMutation; count++; } } final int curNode = i; columns[i] = new LogColumn.Abstract(traitName){ @Override protected String getFormattedValue(){ //return "AAA"; LinkedList<Integer>[] causalList= clusterPrior.getCausalList(); return parseCausalList(causalList[curNode]); } }; } return columns; } public String parseCausalList(LinkedList<Integer> causalMutations){ String stateList = ""; if(causalMutations != null){ Iterator itr = causalMutations.iterator(); while(itr.hasNext()){ int curState = ((Integer) itr.next()).intValue(); stateList += curState; } stateList = "s" + new StringBuilder(stateList).reverse().toString(); //need to reverse printing the states to be correct. } else{ stateList = "s"; } return(stateList); } public static final String PARSER_NAME = "CausalMutationsLogger"; private TreeModel treeModel; private TreeClusteringVirusesPrior clusterPrior; public CausalMutationsLogger(TreeModel tree, TreeClusteringVirusesPrior clusterPrior_in) { this.treeModel = tree; this.clusterPrior = clusterPrior_in; } 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 PARSER_NAME; } public Object parseXMLObject(XMLObject xo) throws XMLParseException { TreeModel treeModel = (TreeModel) xo.getChild(TreeModel.class); TreeClusteringVirusesPrior clusterPrior = (TreeClusteringVirusesPrior) xo.getChild(TreeClusteringVirusesPrior.class); return new CausalMutationsLogger( treeModel, clusterPrior); } //************************************************************************ // AbstractXMLObjectParser implementation //************************************************************************ public String getParserDescription() { return "."; } public Class getReturnType() { return CausalMutationsLogger.class; } public XMLSyntaxRule[] getSyntaxRules() { return rules; } private XMLSyntaxRule[] rules = new XMLSyntaxRule[]{ new ElementRule(TreeModel.class), new ElementRule(TreeClusteringVirusesPrior.class), }; }; }