X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FGroupSet.java;h=db38e7b0c19b7abdf5b9cae969dfdf3493dc0bd1;hb=fa48c836ad6e85a9e8146177cc865f4a061dc1a4;hp=b4d3e6476bddb19b9154f531232975152dfaa53b;hpb=cc3341f9d1465b0226d184be4216d022a62e5cee;p=jalview.git diff --git a/src/jalview/datamodel/GroupSet.java b/src/jalview/datamodel/GroupSet.java index b4d3e64..db38e7b 100644 --- a/src/jalview/datamodel/GroupSet.java +++ b/src/jalview/datamodel/GroupSet.java @@ -16,12 +16,12 @@ public class GroupSet implements GroupSetI public GroupSet(GroupSet grps) { - abs=grps.abs; - colorMap=new HashMap(grps.colorMap); - groups=new ArrayList(grps.groups); - newick=grps.newick; - thresh=grps.thresh; - treeType=grps.treeType; + abs = grps.abs; + colorMap = new HashMap(grps.colorMap); + groups = new ArrayList(grps.groups); + newick = grps.newick; + thresh = grps.thresh; + treeType = grps.treeType; } public GroupSet() @@ -36,7 +36,7 @@ public class GroupSet implements GroupSetI thresh = thresh2; groups = groups2; treeType = treeType2; - newick=newick2; + newick = newick2; } @Override @@ -59,9 +59,9 @@ public class GroupSet implements GroupSetI return newick != null && newick.length() > 0; } - boolean abs=false; + boolean abs = false; - double thresh=0; + double thresh = 0; String treeType = null; @@ -145,30 +145,59 @@ public class GroupSet implements GroupSetI 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 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(); - 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(); + nodegroups.add(clusterer.getTopNode()); + } } + List groups = new ArrayList<>(); for (BinaryNode root : nodegroups) { @@ -179,7 +208,8 @@ public class GroupSet implements GroupSetI } 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; }