X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAverageDistanceEngine.java;h=20b3e83678cd53c1f82a05a806279037556d5aa6;hb=80b889f0cca49103e1b20ed806755a0719789906;hp=90a96e00e4506deca185099532bc78e8af59aee6;hpb=1fae3ccd07da6e8928e45d28cf04ba16f5ae39fb;p=jalview.git diff --git a/src/jalview/analysis/AverageDistanceEngine.java b/src/jalview/analysis/AverageDistanceEngine.java index 90a96e0..20b3e83 100644 --- a/src/jalview/analysis/AverageDistanceEngine.java +++ b/src/jalview/analysis/AverageDistanceEngine.java @@ -39,42 +39,107 @@ 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(); - for (int i=0;i findLeaves(BinaryNode nd, - Vector leaves) + Vector findLeaves(BinaryNode nd, Vector leaves) { if (nd == null) { @@ -314,12 +378,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; } - }