X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FArchaeopteryxTreeConverter.java;h=21a4e30ba2225cdf763aea89a8a2c1f278163c45;hb=4b25259949fbc582a579aa91922cde6f838155ea;hp=93a934130ed7659e007743b1dd8148014ca5ba2e;hpb=e1d12a58772f9928079c29062df3193213688b8d;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java b/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java index 93a9341..21a4e30 100644 --- a/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java +++ b/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java @@ -2,28 +2,46 @@ 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; + +/** + * 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; - 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 alignmentBoundNodes; + + private final Map nodesBoundAlignment; public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree) { @@ -33,13 +51,19 @@ public class ArchaeopteryxTreeConverter jalviewTree.getDistances(), sequences); aptxTree = new Phylogeny(); rootNode = new PhylogenyNode(); + alignmentBoundNodes = new HashMap<>(distances.getSize()); + nodesBoundAlignment = new HashMap<>(distances.getSize()); + } public Phylogeny buildAptxTree(final PhylogenyNode treeRoot) { - rootNode = treeRoot; + if (treeRoot != null) + { + rootNode = treeRoot; + } buildAptxTree(); @@ -47,17 +71,26 @@ public class ArchaeopteryxTreeConverter } + public Phylogeny buildAptxTree() { - // test loop + for (SequenceI sequence : sequences) { + Sequence seq = ForesterConversions + .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); } - aptxTree.setRoot(rootNode); + aptxTree.setRoot(rootNode); + treeTitle = generateTreeName(); aptxTree.setName(treeTitle); @@ -65,13 +98,21 @@ public class ArchaeopteryxTreeConverter } - private Phylogeny clusterNodes() + public Map getAlignmentBoundNodes() { - return aptxTree; + return alignmentBoundNodes; + } + public Map getNodesBoundAlignment() + { + return nodesBoundAlignment; } + private Phylogeny clusterNodes() + { + return aptxTree; + } /** * Formats a localised title for the tree panel, like *

@@ -81,7 +122,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