X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FArchaeopteryxTreeConverter.java;h=0bdd4e23b2db638d59dacbcf20b79870d9fbc1a1;hb=88b0efc5c269e97f1a4725a62599c6725e97416d;hp=53cc2c25f1ab084defd9072401e4a852e25e5cb1;hpb=24003ce252e653972ece110e077acd16ed47fe15;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java b/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java index 53cc2c2..0bdd4e2 100644 --- a/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java +++ b/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java @@ -2,28 +2,43 @@ 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; + +/** + * Note that this currently demands a 1:1 relationship between nodes and + * sequences + * + * @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 +48,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,13 +68,26 @@ public class ArchaeopteryxTreeConverter } + public Phylogeny buildAptxTree() { - // NeighborJoiningF foresterClustering = NeighborJoiningF - // .createInstance(); - // aptxTree = foresterClustering.execute(distances); + + 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); + treeTitle = generateTreeName(); aptxTree.setName(treeTitle); @@ -61,13 +95,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 *

@@ -77,7 +119,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