Merge branch 'kjvdh/features/PhylogenyViewer_tabbedsupport' into merge/2_11_2/kjvdh...
[jalview.git] / src / jalview / ext / archaeopteryx / LoadedTreeAssociation.java
diff --git a/src/jalview/ext/archaeopteryx/LoadedTreeAssociation.java b/src/jalview/ext/archaeopteryx/LoadedTreeAssociation.java
new file mode 100644 (file)
index 0000000..c869cd5
--- /dev/null
@@ -0,0 +1,163 @@
+package jalview.ext.archaeopteryx;
+
+import jalview.analysis.SequenceIdMatcher;
+import jalview.datamodel.SequenceI;
+import jalview.ext.forester.DataConversions;
+import jalview.ext.treeviewer.ExternalLoadedTreeAssociationI;
+import jalview.util.MappingUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.forester.phylogeny.Phylogeny;
+import org.forester.phylogeny.PhylogenyNode;
+
+public class LoadedTreeAssociation
+        implements ExternalLoadedTreeAssociationI
+{
+  SequenceI[] alignSequences;
+
+  Phylogeny tree;
+
+  Map<SequenceI, PhylogenyNode> alignmentWithNodes;
+
+  Map<PhylogenyNode, SequenceI> nodesWithAlignment;
+
+  public LoadedTreeAssociation(SequenceI[] alignmentSequences,
+          Phylogeny aptxTree)
+  {
+    alignSequences = alignmentSequences;
+    tree = aptxTree;
+    alignmentWithNodes = new HashMap<>(alignSequences.length);
+    nodesWithAlignment = new HashMap<>(alignSequences.length);
+
+  }
+
+
+
+  /**
+   * Tries to match sequences from Jalview with tree nodes in Archaeopteryx and
+   * fills in the tree node with sequence data if a match is found.
+   * 
+   * Partially refactored from the old Jalview TreeModel
+   * associateLeavesToSequences method.
+   *
+   * @param seqs
+   * @param aptxTree
+   */
+  @Override
+  public void associateLeavesToSequences()
+
+  {
+    SequenceIdMatcher algnIds = new SequenceIdMatcher(alignSequences);
+
+    List<PhylogenyNode> leaves = tree.getExternalNodes();
+    SequenceI nodeSequence;
+    String nodeSequenceName;
+
+    for (PhylogenyNode treeNode : leaves)
+    {
+      nodeSequenceName = treeNode.getName();
+
+      nodeSequence = algnIds.findIdMatch(nodeSequenceName);
+      if (nodeSequence != null)
+      {
+        org.forester.phylogeny.data.Sequence foresterNodeSeq = DataConversions
+                .createForesterSequence(nodeSequence, true);
+        treeNode.getNodeData().setSequence(foresterNodeSeq);
+
+        MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
+                nodeSequence, treeNode);
+        MappingUtils.putWithDuplicationCheck(nodesWithAlignment,
+                treeNode, nodeSequence);
+
+
+      }
+
+    }
+
+  }
+
+
+
+  public Map<SequenceI, PhylogenyNode> getAlignmentWithNodes()
+  {
+    return alignmentWithNodes;
+  }
+
+  public Map<PhylogenyNode, SequenceI> getNodesWithAlignment()
+  {
+    return nodesWithAlignment;
+  }
+
+  // {
+  // SequenceIdMatcher algnIds = new SequenceIdMatcher(seqs);
+  //
+  // List<PhylogenyNode> leaves = aptxTree.getExternalNodes();
+  //
+  // int namesleft = seqs.length;
+  // SequenceI nodeSequence;
+  // String nodeSequenceName;
+  // List<SequenceI> one2many = new ArrayList<>();
+  // int countOne2Many = 0;
+  //
+  // for (PhylogenyNode treeNode : leaves)
+  // {
+  // nodeSequenceName = treeNode.getName();
+  // nodeSequence = null;
+  //
+  // if (namesleft > -1)
+  // {
+  // nodeSequence = algnIds.findIdMatch(nodeSequenceName);
+  // }
+  //
+  // if (nodeSequence != null)
+  // {
+  // org.forester.phylogeny.data.Sequence foresterNodeSeq =
+  // ForesterDataConversions.createForesterSequence(nodeSequence, true);
+  //
+  // treeNode.getNodeData().setSequence(foresterNodeSeq);
+  // if (one2many.contains(nodeSequence))
+  // {
+  // countOne2Many++;
+  // if (jalview.bin.Cache.log.isDebugEnabled())
+  // {
+  // jalview.bin.Cache.log.debug("One 2 many relationship for"
+  // +nodeSequence.getName());
+  // }
+  // }
+  // else
+  // {
+  // one2many.add(nodeSequence);
+  // namesleft--;
+  // }
+  // }
+  // else
+  // {
+  // treeNode.setCollapse(true); // collapse nodes that couldn't be connected
+  // // to a sequence
+  //
+  //
+  // // treeNode.setElement( new Sequence(nodeSequenceName,
+  // "THISISAPLACEHOLDER"));
+  // // treeNode.setPlaceholder(true);
+  // }
+  // }
+  // if (jalview.bin.Cache.log.isDebugEnabled() && countOne2Many > 0)
+  // {
+  // jalview.bin.Cache.log.debug("There were " + countOne2Many
+  // + "alignment sequence ids (out of" + one2many.size()
+  // + " unique ids) linked to two or more leaves.");
+  // }
+  // one2many.clear();
+  //
+  // }
+
+}
+
+
+
+
+
+