X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FArchaeopteryxTreeConverter.java;h=58c57288cce6dac57d72c215905bd9c30b557cd0;hb=c566bc50df93f323036ad19ad32e25c78591414a;hp=ce603f542e21685dc1f652a943f345bb4e346d8b;hpb=c2ca13f710c1511d8e1face37f9e8a5b04e6dcd0;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java b/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java index ce603f5..58c5728 100644 --- a/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java +++ b/src/jalview/ext/archaeopteryx/ArchaeopteryxTreeConverter.java @@ -2,59 +2,82 @@ 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 org.forester.evoinference.distance.NeighborJoiningF; +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 alignmentBoundNodes; public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree) { jalviewTree = calculatedTree; sequences = jalviewTree.getSequences(); distances = ForesterMatrix.convertJalviewToForester( - jalviewTree.testDistances, sequences); + 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(); - return aptxTree; } + public Phylogeny buildAptxTree() { - NeighborJoiningF foresterClustering = NeighborJoiningF - .createInstance(); - aptxTree = foresterClustering.execute(distances); + 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); + treeTitle = generateTreeName(); aptxTree.setName(treeTitle); @@ -62,13 +85,16 @@ public class ArchaeopteryxTreeConverter } + public Map getAlignmentBoundNodes() + { + return alignmentBoundNodes; + } + private Phylogeny clusterNodes() { return aptxTree; } - - /** * Formats a localised title for the tree panel, like *

@@ -78,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