package dr.evomodel.antigenic.phyloClustering.statistics;
import dr.evolution.tree.NodeRef;
import dr.evolution.tree.Tree;
import dr.evolution.tree.TreeTrait;
import dr.evolution.tree.TreeTraitProvider;
import dr.evomodel.tree.TreeModel;
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 NodeNumberTreeTrait implements TreeTraitProvider {
protected Helper treeTraits = new Helper();
private TreeModel treeModel;
public static final String NODE_NUMBER_TREETRAIT = "NodeNumberTreeTrait";
public NodeNumberTreeTrait(TreeModel treeModel_in){
this.treeModel = treeModel_in;
treeTraits.addTrait(new TreeTrait.IA() {
public String getTraitName() {
return "node";
}
public String getTraitString(Tree tree, NodeRef node) {
if(tree != treeModel){
System.out.println("Something is wrong. Why is tree not equal to treeModel?");
System.exit(0);
}
String nodeString = node.getNumber() + ""; //to get the node numbering of the tree.
return nodeString;
}
public Intent getIntent() {
//System.out.println("getIntent");
return Intent.NODE;
}
public Class getTraitClass() {
System.out.println("getTraitClass ran. Not expected. Quit now");
System.exit(0);
return int[].class;
}
public int[] getTrait(Tree tree, NodeRef node) {
System.out.println("getTrait ran. Not expected. Quit now");
System.exit(0);
return null;
}
});
}
public TreeTrait[] getTreeTraits() {
return treeTraits.getTreeTraits();
}
public TreeTrait getTreeTrait(String key) {
System.out.println("not expected to run getTreeTrait. Quit now");
System.exit(0);
return treeTraits.getTreeTrait(key);
}
public static XMLObjectParser PARSER = new AbstractXMLObjectParser() {
public String getParserName() {
return NODE_NUMBER_TREETRAIT;
}
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
TreeModel treeModel = (TreeModel) xo.getChild(TreeModel.class);
return new NodeNumberTreeTrait( treeModel);
}
//************************************************************************
// AbstractXMLObjectParser implementation
//************************************************************************
public String getParserDescription() {
return "Display node number in the tree.";
}
public Class getReturnType() {
return NodeNumberTreeTrait.class;
}
public XMLSyntaxRule[] getSyntaxRules() {
return rules;
}
private XMLSyntaxRule[] rules = new XMLSyntaxRule[]{
new ElementRule(TreeModel.class),
};
};
}