JAL-4134 allow tree groups to be stored/recovered on contact matrix for groupwise...
[jalview.git] / test / jalview / analysis / AverageDistanceEngineTest.java
index 7c068cb..6d9ab50 100644 (file)
@@ -4,6 +4,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -58,14 +59,28 @@ public class AverageDistanceEngineTest
       ContactMatrixI matrix = new PAEContactMatrix(target,
               (Map<String, Object>) pae_obj.get(0));
       AlignmentAnnotation aa = target.addContactList(matrix);
+      System.out.println("Matrix has max="+matrix.getMax()+" and min="+matrix.getMin());
       long start = System.currentTimeMillis();
       AverageDistanceEngine clusterer = new AverageDistanceEngine(af.getViewport(), null, matrix);
       System.out.println("built a tree in "+(System.currentTimeMillis()-start)*0.001+" seconds.");
       StringBuffer sb = new StringBuffer(); 
       System.out.println("Newick string\n"+      new jalview.io.NewickFile(clusterer.getTopNode(),true,true).print());
       
-      clusterer.findHeight(clusterer.getTopNode());
-      List<BinaryNode> groups = clusterer.groupNodes(0.8f);
+      double height = clusterer.findHeight(clusterer.getTopNode());
+      // compute height fraction to cut 
+      // PAE matrixes are absolute measure in angstrom, so 
+      // cluster all regions within threshold (e.g. 2A) - if height above threshold. Otherwise all nodes are in one cluster
+      double thr=.2;
+      List<BinaryNode> groups;
+      if (height>thr)
+      {
+        float cut = (float) (thr/height);
+        System.out.println("Threshold "+cut+" for height="+height);
+        groups = clusterer.groupNodes(cut);
+      } else{
+        groups=new ArrayList<BinaryNode>();
+        groups.add(clusterer.getTopNode());
+      }
       int n=1;
       for (BinaryNode root:groups)
       {