JAL-2794 reorganized node select code, added subtree selection support
[jalview.git] / src / jalview / ext / archaeopteryx / ArchaeopteryxTreeConverter.java
index 58c5728..21a4e30 100644 (file)
@@ -15,7 +15,17 @@ import org.forester.phylogeny.PhylogenyNode;
 import org.forester.phylogeny.data.NodeData;
 import org.forester.phylogeny.data.Sequence;
 
-public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
+/**
+ * Class for converting trees made in Jalview (through TreeBuilder) to trees
+ * compatible with Forester (Phylogeny objects).
+ * 
+ * Note that this currently demands a 1:1 relationship between tree nodes and
+ * the sequences used for generating them.
+ * 
+ * @author kjvanderheide
+ *
+ */
+public class ArchaeopteryxTreeConverter
 {
   protected final SequenceI[] sequences;
 
@@ -31,6 +41,8 @@ public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
 
   private final Map<SequenceI, PhylogenyNode> alignmentBoundNodes;
 
+  private final Map<PhylogenyNode, SequenceI> nodesBoundAlignment;
+
   public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree)
   {
     jalviewTree = calculatedTree;
@@ -39,8 +51,8 @@ public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
             jalviewTree.getDistances(), sequences);
     aptxTree = new Phylogeny();
     rootNode = new PhylogenyNode();
-    alignmentBoundNodes = new HashMap<>(
-            distances.getSize());
+    alignmentBoundNodes = new HashMap<>(distances.getSize());
+    nodesBoundAlignment = new HashMap<>(distances.getSize());
 
 
   }
@@ -66,11 +78,12 @@ public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
     for (SequenceI sequence : sequences)
     {
       Sequence seq = ForesterConversions
-              .createForesterSequence(sequence);
+              .createForesterSequence(sequence, true);
       PhylogenyNode sequenceNode = new PhylogenyNode(sequence.getName());
       NodeData nodeData = sequenceNode.getNodeData();
       nodeData.setSequence(seq);
 
+      nodesBoundAlignment.put(sequenceNode, sequence);
       alignmentBoundNodes.put(sequence, sequenceNode);
       rootNode.addAsChild(sequenceNode);
     }
@@ -90,6 +103,11 @@ public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
     return alignmentBoundNodes;
   }
 
+  public Map<PhylogenyNode, SequenceI> getNodesBoundAlignment()
+  {
+    return nodesBoundAlignment;
+  }
+
   private Phylogeny clusterNodes()
   {
     return aptxTree;