X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAverageDistanceEngine.java;h=f4d69d5cb4b3e592df21768a2ada643d983ce886;hb=a6f0678764ea06034460236c7a811bbfcad682aa;hp=ed6f861bf984bb0edc1ef73c39119162502713f6;hpb=948828a5fed141e2ed319586687b80b6d0298268;p=jalview.git diff --git a/src/jalview/analysis/AverageDistanceEngine.java b/src/jalview/analysis/AverageDistanceEngine.java index ed6f861..f4d69d5 100644 --- a/src/jalview/analysis/AverageDistanceEngine.java +++ b/src/jalview/analysis/AverageDistanceEngine.java @@ -39,71 +39,120 @@ import jalview.viewmodel.AlignmentViewport; public class AverageDistanceEngine extends TreeEngine { ContactMatrixI cm; + AlignmentViewport av; + AlignmentAnnotation aa; + /** - * compute cosine distance matrix for a given contact matrix and create a UPGMA tree + * compute cosine distance matrix for a given contact matrix and create a + * UPGMA tree + * * @param cm */ - public AverageDistanceEngine(AlignmentViewport av, AlignmentAnnotation aa, ContactMatrixI cm) + public AverageDistanceEngine(AlignmentViewport av, AlignmentAnnotation aa, + ContactMatrixI cm) { - this.av =av; + this.av = av; this.aa = aa; - this.cm=cm; + this.cm = cm; calculate(cm); } + + // 0 - normalised dot product + // 1 - L1 - ie (abs(v_1-v_2)/dim(v)) + // L1 is more rational - since can reason about value of difference, + // normalised dot product might give cleaner clusters, but more difficult to + // understand. + + int mode = 1; + public void calculate(ContactMatrixI cm) { this.cm = cm; node = new Vector(); clusters = new Vector(); distances = new Matrix(new double[cm.getWidth()][cm.getWidth()]); - noseqs=cm.getWidth(); - done = new BitSet(); - double moduli[]=new double[cm.getWidth()]; - - - for (int i=0;i findLeaves(BinaryNode nd, - Vector leaves) + Vector findLeaves(BinaryNode nd, Vector leaves) { if (nd == null) { @@ -333,12 +381,11 @@ public class AverageDistanceEngine extends TreeEngine * TODO: Identify internal nodes... if (node.isSequenceLabel()) { * leaves.addElement(node); } */ - findLeaves( nd.left(), leaves); - findLeaves( nd.right(), leaves); + findLeaves(nd.left(), leaves); + findLeaves(nd.right(), leaves); } return leaves; } - }