X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FNJTree.java;h=8f3483d37a27c0918a2a83f88c52ba02215caebf;hb=9270f5adbff6622400c8fc933ebdb652cbb760f5;hp=7324b6c02bfb3341feb93c23e97285cdc540eac9;hpb=25b52338f677d211c04f6b60980188badf83db00;p=jalview.git diff --git a/src/jalview/analysis/NJTree.java b/src/jalview/analysis/NJTree.java index 7324b6c..8f3483d 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; @@ -44,6 +46,73 @@ public class NJTree { public NJTree(SequenceNode node) { top = node; maxheight = findHeight(top); + + } + // Private SequenceID class to do fuzzy .equals() method for Hashtable. + + private class SeqIdname { + String id; + + SeqIdname(String s) { + id = new String(s); + } + public int hashCode() { + return (id.substring(0,4).hashCode()); + } + public boolean equals(Object s) { + if (s instanceof SeqIdname) { + return this.equals((SeqIdname) s); + } else { + if (s instanceof String) { + return this.equals((String) s); + } + } + return false; + } + + + public boolean equals(SeqIdname s) { + if (id.startsWith(s.id) || s.id.startsWith(id)) { + return true; + } + return false; + } + + public boolean equals(String s) { + if (id.startsWith(s) || s.startsWith(id)) { + return true; + } + return false; + } + } + + public NJTree(SequenceI[] seqs, NewickFile treefile) { + top = treefile.getTree(); + maxheight = findHeight(top); + Hashtable names = new Hashtable(); + for (int i = 0; i < seqs.length; i++) + { + names.put(new SeqIdname(seqs[i].getDisplayId()), seqs[i]); + } + Vector leaves = new Vector(); + findLeaves(top, leaves); + int i = 0; + int namesleft = seqs.length; + SequenceNode j; + SeqIdname nam; + while (i < leaves.size()) + { + j = (SequenceNode) leaves.elementAt(i++); + nam = new SeqIdname(j.getName()); + if ((namesleft>-1) + && names.containsKey(nam)) + { + j.setElement(names.get(nam)); + namesleft--; + } else { + j.setElement(new Sequence(nam.id, "THISISAPLACEHLDER")); + } + } } public NJTree(SequenceI[] sequence,int start, int end) { @@ -469,8 +538,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()); @@ -478,10 +547,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) { @@ -570,8 +639,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) { @@ -595,13 +664,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) { @@ -641,13 +710,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; } }