public GroupSet(GroupSet grps)
{
- abs=grps.abs;
- colorMap=new HashMap<BitSet, Color>(grps.colorMap);
- groups=new ArrayList<BitSet>(grps.groups);
- newick=grps.newick;
- thresh=grps.thresh;
- treeType=grps.treeType;
+ abs = grps.abs;
+ colorMap = new HashMap<BitSet, Color>(grps.colorMap);
+ groups = new ArrayList<BitSet>(grps.groups);
+ newick = grps.newick;
+ thresh = grps.thresh;
+ treeType = grps.treeType;
}
public GroupSet()
thresh = thresh2;
groups = groups2;
treeType = treeType2;
- newick=newick2;
+ newick = newick2;
}
@Override
return newick != null && newick.length() > 0;
}
- boolean abs=false;
+ boolean abs = false;
- double thresh=0;
+ double thresh = 0;
String treeType = null;
return treeType;
}
- public static GroupSet makeGroups(ContactMatrixI matrix, float thresh,
+ public static GroupSet makeGroups(ContactMatrixI matrix, boolean autoCut)
+ {
+ return makeGroups(matrix, autoCut, 0, autoCut);
+ }
+ public static GroupSet makeGroups(ContactMatrixI matrix, boolean auto, float thresh,
boolean abs)
{
AverageDistanceEngine clusterer = new AverageDistanceEngine(null, null,
- matrix);
+ matrix, true);
double height = clusterer.findHeight(clusterer.getTopNode());
+ Console.debug("Column tree height: " + height);
String newick = new jalview.io.NewickFile(clusterer.getTopNode(), false,
true).print();
String treeType = "UPGMA";
Console.trace("Newick string\n" + newick);
List<BinaryNode> nodegroups;
- if (abs ? height > thresh : 0 < thresh && thresh < 1)
+ float cut = -1f;
+ if (auto)
{
- float cut = abs ? (float) (thresh / height) : thresh;
- Console.debug("Threshold " + cut + " for height=" + height);
-
- nodegroups = clusterer.groupNodes(cut);
+ double rootw = 0;
+ int p = 2;
+ BinaryNode bn = clusterer.getTopNode();
+ while (p-- > 0 & bn.left() != null)
+ {
+ if (bn.left() != null)
+ {
+ bn = bn.left();
+ }
+ if (bn.left() != null)
+ {
+ rootw = bn.height;
+ }
+ }
+ thresh = Math.max((float) (rootw / height) - 0.01f, 0);
+ cut = thresh;
+ nodegroups = clusterer.groupNodes(thresh);
}
else
{
- nodegroups = new ArrayList<BinaryNode>();
- nodegroups.add(clusterer.getTopNode());
+ if (abs ? (height > thresh) : (0 < thresh && thresh < 1))
+ {
+ cut = abs ? thresh : (float) (thresh * height);
+ Console.debug("Threshold " + cut + " for height=" + height);
+ nodegroups = clusterer.groupNodes(cut);
+ }
+ else
+ {
+ nodegroups = new ArrayList<BinaryNode>();
+ nodegroups.add(clusterer.getTopNode());
+ }
}
+
List<BitSet> groups = new ArrayList<>();
for (BinaryNode root : nodegroups)
{
}
groups.add(gpset);
}
- GroupSet grps = new GroupSet(abs,thresh,groups,treeType, newick);
+ GroupSet grps = new GroupSet(abs, (cut == -1f) ? thresh : cut, groups,
+ treeType, newick);
return grps;
}