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.ArrayList;
9 import java.util.Iterator;
10 import java.util.List;
12 import org.forester.archaeopteryx.Archaeopteryx;
13 import org.forester.phylogeny.Phylogeny;
14 import org.forester.phylogeny.PhylogenyMethods;
15 import org.forester.phylogeny.PhylogenyNode;
17 public class Tree implements TreeI
19 private final Phylogeny tree;
21 // alternative to static maps in TreeNode
22 // private Map<PhylogenyNode, TreeNodeI> originalNodes = new HashMap<>(500);
23 // private Map<TreeNodeI, PhylogenyNode> wrappedNodes = new HashMap<>(500);
27 tree = new Phylogeny();
30 public Tree(Phylogeny aptxTree)
37 private void wrapAllTreeNodes()
39 for (Iterator<PhylogenyNode> iterator = tree
40 .iteratorPostorder(); iterator.hasNext();)
42 PhylogenyNode foresterNode = iterator.next();
43 TreeNodeI treeNode = TreeNode
44 .getUniqueWrapper(foresterNode);
50 public TreeNodeI getRoot()
52 TreeNodeI root = TreeNode.getUniqueWrapper(tree.getRoot());
57 public void setTreeName(String name)
64 public TreeNodeI getNodeWithName(String name)
66 return TreeNode.getUniqueWrapper(tree.getNode(name));
71 public String[] getAllLeafNames()
73 return tree.getAllExternalNodeNames();
77 public void setRerootable(boolean b)
79 tree.setRerootable(b);
84 public void setRooted(boolean b)
91 public boolean isEmpty()
93 return tree.isEmpty();
97 public String getTreeName()
99 return tree.getName();
103 public void setRoot(TreeNodeI rootNode)
105 PhylogenyNode treeRoot = TreeNode.unwrapNode(rootNode);
106 tree.setRoot(treeRoot);
112 public double getHeight(boolean adjustForCollapsedSubtrees)
114 return tree.calculateHeight(adjustForCollapsedSubtrees);
118 public Iterator<TreeNodeI> iterateInPreOrder()
120 Iterator<TreeNodeI> iter = new TreeIterator(
121 tree.iteratorPreorder());
126 public Iterator<TreeNodeI> iterateInLevelOrder()
128 Iterator<TreeNodeI> iter = new TreeIterator(
129 tree.iteratorLevelOrder());
134 public Iterator<TreeNodeI> iterateInPostOrder()
136 Iterator<TreeNodeI> iter = new TreeIterator(
137 tree.iteratorPostorder());
142 public TreeNodeI getFurthestNode()
144 PhylogenyNode furthestNode = PhylogenyMethods
145 .calculateNodeWithMaxDistanceToRoot(tree);
146 return TreeNode.getUniqueWrapper(furthestNode);
150 public TreeFrameI createTreeViewerFromTree(String instanceTitle)
152 return new AptxFrame(Archaeopteryx.createApplication(tree,
153 AptxInit.APTX_CONFIG,
158 public List<SequenceI> getNodeSequences()
160 List<SequenceI> treeSeqs = new ArrayList<>();
161 Iterator<TreeNodeI> iter = iterateInPreOrder();
163 while (iter.hasNext())
166 SequenceI nodeSeq = iter.next().getSequence();
169 treeSeqs.add(nodeSeq);
176 public TreeNodeI[] getAllNodes()
178 TreeNodeI[] treeNodes = new TreeNodeI[tree.getNodeCount()];
179 Iterator<TreeNodeI> iter = iterateInPreOrder();
181 while (iter.hasNext())
183 treeNodes[i++] = iter.next();