1 package jalview.ext.archaeopteryx;
3 import jalview.datamodel.SequenceI;
4 import jalview.ext.treeviewer.TreeFrameI;
5 import jalview.ext.treeviewer.TreeI;
6 import jalview.ext.treeviewer.TreeNodeI;
8 import java.util.Iterator;
10 import org.forester.archaeopteryx.Archaeopteryx;
11 import org.forester.phylogeny.Phylogeny;
12 import org.forester.phylogeny.PhylogenyMethods;
13 import org.forester.phylogeny.PhylogenyNode;
15 public class Tree implements TreeI
17 private final Phylogeny tree;
19 // alternative to static maps in TreeNode
20 // private Map<PhylogenyNode, TreeNodeI> originalNodes = new HashMap<>(500);
21 // private Map<TreeNodeI, PhylogenyNode> wrappedNodes = new HashMap<>(500);
25 tree = new Phylogeny();
28 public Tree(Phylogeny aptxTree)
35 private void wrapAllTreeNodes()
37 for (Iterator<PhylogenyNode> iterator = tree
38 .iteratorPostorder(); iterator.hasNext();)
40 PhylogenyNode foresterNode = iterator.next();
41 TreeNodeI treeNode = TreeNode
42 .getUniqueWrapper(foresterNode);
48 public TreeNodeI getRoot()
50 TreeNodeI root = TreeNode.getUniqueWrapper(tree.getRoot());
55 public void setTreeName(String name)
62 public TreeNodeI getNodeWithName(String name)
64 return TreeNode.getUniqueWrapper(tree.getNode(name));
69 public String[] getAllLeafNames()
71 return tree.getAllExternalNodeNames();
75 public void setRerootable(boolean b)
77 tree.setRerootable(b);
82 public void setRooted(boolean b)
89 public boolean isEmpty()
91 return tree.isEmpty();
95 public String getTreeName()
97 return tree.getName();
101 public void setRoot(TreeNodeI rootNode)
103 PhylogenyNode treeRoot = TreeNode.unwrapNode(rootNode);
104 tree.setRoot(treeRoot);
110 public double getHeight(boolean adjustForCollapsedSubtrees)
112 return tree.calculateHeight(adjustForCollapsedSubtrees);
116 public Iterator<TreeNodeI> iterateInPreOrder()
118 Iterator<TreeNodeI> iter = new TreeIterator(
119 tree.iteratorPreorder());
124 public Iterator<TreeNodeI> iterateInLevelOrder()
126 Iterator<TreeNodeI> iter = new TreeIterator(
127 tree.iteratorLevelOrder());
132 public Iterator<TreeNodeI> iterateInPostOrder()
134 Iterator<TreeNodeI> iter = new TreeIterator(
135 tree.iteratorPostorder());
140 public TreeNodeI getFurthestNode()
142 PhylogenyNode furthestNode = PhylogenyMethods
143 .calculateNodeWithMaxDistanceToRoot(tree);
144 return TreeNode.getUniqueWrapper(furthestNode);
148 public TreeFrameI createTreeViewerFromTree(String instanceTitle)
150 return new AptxFrame(Archaeopteryx.createApplication(tree,
151 AptxInit.APTX_CONFIG,
156 public SequenceI[] getNodeSequences()
158 SequenceI[] treeSeqs = new SequenceI[tree.getNodeCount()];
159 Iterator<TreeNodeI> iter = iterateInPreOrder();
161 while (iter.hasNext())
164 SequenceI nodeSeq = iter.next().getSequence();
167 treeSeqs[i++] = nodeSeq;
174 public TreeNodeI[] getAllNodes()
176 TreeNodeI[] treeNodes = new TreeNodeI[tree.getNodeCount()];
177 Iterator<TreeNodeI> iter = iterateInPreOrder();
179 while (iter.hasNext())
181 treeNodes[i++] = iter.next();