JAL-2794 Cleaning up tree conversion, sequences are now in the tree
authorkjvdheide <kjvanderheide@dundee.ac.uk>
Wed, 8 Nov 2017 17:53:17 +0000 (17:53 +0000)
committerkjvdheide <kjvanderheide@dundee.ac.uk>
Wed, 8 Nov 2017 17:53:17 +0000 (17:53 +0000)
src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java

index 93a9341..58c5728 100644 (file)
@@ -2,28 +2,34 @@ package jalview.ext.archaeopteryx;
 
 import jalview.analysis.TreeBuilder;
 import jalview.datamodel.SequenceI;
+import jalview.ext.forester.ForesterConversions;
 import jalview.ext.forester.ForesterMatrix;
 import jalview.util.MessageManager;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.forester.evoinference.matrix.distance.DistanceMatrix;
 import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyNode;
+import org.forester.phylogeny.data.NodeData;
+import org.forester.phylogeny.data.Sequence;
 
-public class ArchaeopteryxTreeConverter
+public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
 {
   protected final SequenceI[] sequences;
 
-  private Phylogeny aptxTree;
-
-  private PhylogenyNode rootNode;
-
   protected final DistanceMatrix distances;
   
   protected final TreeBuilder jalviewTree;
   
   public String treeTitle;
 
+  private final Phylogeny aptxTree;
+
+  private PhylogenyNode rootNode;
 
+  private final Map<SequenceI, PhylogenyNode> alignmentBoundNodes;
 
   public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree)
   {
@@ -33,13 +39,19 @@ public class ArchaeopteryxTreeConverter
             jalviewTree.getDistances(), sequences);
     aptxTree = new Phylogeny();
     rootNode = new PhylogenyNode();
+    alignmentBoundNodes = new HashMap<>(
+            distances.getSize());
+
 
   }
 
   public Phylogeny buildAptxTree(final PhylogenyNode treeRoot)
   {
 
-    rootNode = treeRoot;
+    if (treeRoot != null)
+    {
+      rootNode = treeRoot;
+    }
 
     buildAptxTree();
 
@@ -47,17 +59,25 @@ public class ArchaeopteryxTreeConverter
 
   }
 
+
   public Phylogeny buildAptxTree()
   {
-    // test loop
+
     for (SequenceI sequence : sequences)
     {
+      Sequence seq = ForesterConversions
+              .createForesterSequence(sequence);
       PhylogenyNode sequenceNode = new PhylogenyNode(sequence.getName());
+      NodeData nodeData = sequenceNode.getNodeData();
+      nodeData.setSequence(seq);
+
+      alignmentBoundNodes.put(sequence, sequenceNode);
       rootNode.addAsChild(sequenceNode);
     }
-    aptxTree.setRoot(rootNode);
 
 
+    aptxTree.setRoot(rootNode);
+
     treeTitle = generateTreeName();
     aptxTree.setName(treeTitle);
 
@@ -65,13 +85,16 @@ public class ArchaeopteryxTreeConverter
 
   }
 
+  public Map<SequenceI, PhylogenyNode> getAlignmentBoundNodes()
+  {
+    return alignmentBoundNodes;
+  }
+
   private Phylogeny clusterNodes()
   {
     return aptxTree;
 
   }
-
-
   /**
    * Formats a localised title for the tree panel, like
    * <p>
@@ -81,7 +104,8 @@ public class ArchaeopteryxTreeConverter
    * 
    * @return
    */
-  public String generateTreeName()
+  public String generateTreeName() // Move this and add selection region to the
+                                   // title when applicable
   {
     if (treeTitle != null) // will currently never happen, loaded tree file will
                            // take a different path