X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAverageDistanceEngine.java;h=d81dd44687d286542f4576034ca76307efdd2e63;hb=032527014a1eafae4110666a53aad60992a29576;hp=ed6f861bf984bb0edc1ef73c39119162502713f6;hpb=948828a5fed141e2ed319586687b80b6d0298268;p=jalview.git diff --git a/src/jalview/analysis/AverageDistanceEngine.java b/src/jalview/analysis/AverageDistanceEngine.java index ed6f861..d81dd44 100644 --- a/src/jalview/analysis/AverageDistanceEngine.java +++ b/src/jalview/analysis/AverageDistanceEngine.java @@ -39,71 +39,122 @@ import jalview.viewmodel.AlignmentViewport; public class AverageDistanceEngine extends TreeEngine { ContactMatrixI cm; + AlignmentViewport av; + AlignmentAnnotation aa; + + // 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; + /** - * 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 + * @param cosineOrDifference false - dot product : true - L1 */ - public AverageDistanceEngine(AlignmentViewport av, AlignmentAnnotation aa, ContactMatrixI cm) + public AverageDistanceEngine(AlignmentViewport av, AlignmentAnnotation aa, + ContactMatrixI cm, boolean cosineOrDifference) { - this.av =av; + this.av = av; this.aa = aa; - this.cm=cm; + this.cm = cm; + mode = (cosineOrDifference) ? 1 :0; calculate(cm); } + + 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 +383,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; } - }