import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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)
{