X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FNJTree.java;h=d56464c0c35d6dde60f843b8a9b1b5bc945c98e5;hb=abe6225acb5316fd1f8c20e56a58c26aeced0b0c;hp=4aeee3d5807ed4f875fec2cf40eff0711e218955;hpb=1ecf6419aba86993b3c223bf5ec0fa79427baf85;p=jalview.git diff --git a/src/jalview/analysis/NJTree.java b/src/jalview/analysis/NJTree.java index 4aeee3d..d56464c 100755 --- a/src/jalview/analysis/NJTree.java +++ b/src/jalview/analysis/NJTree.java @@ -5,6 +5,8 @@ import jalview.util.*; import jalview.schemes.ResidueProperties; import java.util.*; +import jalview.io.NewickFile; + public class NJTree { Vector cluster; @@ -46,6 +48,79 @@ public class NJTree { maxheight = findHeight(top); } + public String toString() + { + jalview.io.NewickFile fout = new jalview.io.NewickFile(getTopNode()); + return fout.print(false,true); // distances only + } + + public NJTree(SequenceI[] seqs, NewickFile treefile) { + top = treefile.getTree(); + maxheight = findHeight(top); + SequenceIdMatcher algnIds = new SequenceIdMatcher(seqs); + + Vector leaves = new Vector(); + findLeaves(top, leaves); + + int i = 0; + int namesleft = seqs.length; + + SequenceNode j; + SequenceI nam; + String realnam; + while (i < leaves.size()) + { + j = (SequenceNode) leaves.elementAt(i++); + realnam = j.getName(); + nam = null; + if (namesleft>-1) + nam = algnIds.findIdMatch(realnam); + if (nam != null) { + j.setElement(nam); + namesleft--; + } else { + j.setElement(new Sequence(realnam, "THISISAPLACEHLDER")); + j.setPlaceholder(true); + + } + } + } + + /** + * + * used when the alignment associated to a tree has changed. + * + * @param alignment Vector + */ + public void UpdatePlaceHolders(Vector alignment) { + Vector leaves = new Vector(); + findLeaves(top, leaves); + int sz = leaves.size(); + SequenceIdMatcher seqmatcher=null; + int i=0; + while (i maxscore) { @@ -448,6 +522,11 @@ public class NJTree { return found; } + /** + * printNode is mainly for debugging purposes. + * + * @param node SequenceNode + */ public void printNode(SequenceNode node) { if (node == null) { return; @@ -470,8 +549,8 @@ public class NJTree { float dist = ((SequenceNode)node).dist; if (dist > maxDistValue) { - maxdist = (SequenceNode)node; - maxDistValue = dist; + maxdist = (SequenceNode)node; + maxDistValue = dist; } } else { findMaxDist((SequenceNode)node.left()); @@ -479,10 +558,10 @@ public class NJTree { } } public Vector getGroups() { - return groups; + return groups; } public float getMaxHeight() { - return maxheight; + return maxheight; } public void groupNodes(SequenceNode node, float threshold) { if (node == null) { @@ -571,8 +650,8 @@ public class NJTree { } public void reCount(SequenceNode node) { - ycount = 0; - _reCount(node); + ycount = 0; + _reCount(node); } public void _reCount(SequenceNode node) { if (node == null) { @@ -596,13 +675,13 @@ public class NJTree { } public void swapNodes(SequenceNode node) { - if (node == null) { - return; - } - SequenceNode tmp = (SequenceNode)node.left(); + if (node == null) { + return; + } + SequenceNode tmp = (SequenceNode)node.left(); - node.setLeft(node.right()); - node.setRight(tmp); + node.setLeft(node.right()); + node.setRight(tmp); } public void changeDirection(SequenceNode node, SequenceNode dir) { if (node == null) { @@ -642,13 +721,13 @@ public class NJTree { } } public void setMaxDist(SequenceNode node) { - this.maxdist = maxdist; + this.maxdist = maxdist; } public SequenceNode getMaxDist() { - return maxdist; + return maxdist; } public SequenceNode getTopNode() { - return top; + return top; } }