+ // are there any more sequences ungrouped that should be added as a single
+ // remaining group ? - these might be at the start or the end
+ if (gl.size() > 0)
+ {
+ int[] tail = gl.get(0);
+ if (tail[0] > 0)
+ {
+ if (1 + tail[0] > minsize)
+ {
+ gl.add(0, new int[]
+ { 0, tail[0] - 1 });
+ }
+ else
+ {
+ // lets be intelligent here - if the remaining sequences aren't enough
+ // to make a final group, then don't make one.
+ // throw new
+ // NoValidInputDataException("Group from remaining ungrouped sequences in input contains less than "+minsize+" sequences.");
+ }
+ }
+ else
+ {
+ tail = gl.get(gl.size() - 1);
+ if (1 + tail[1] < al.getHeight())
+ {
+ if (al.getHeight() - (1 + tail[1]) > minsize)
+ {
+ gl.add(new int[]
+ { tail[1] + 1, al.getHeight() - 1 });
+ }
+ else
+ {
+ // lets be intelligent here - if the remaining sequences aren't
+ // enough to make a final group, then don't make one.
+ // throw new
+ // NoValidInputDataException("Group from remaining ungrouped sequences in input contains less than "+minsize+" sequences.");
+ }
+ }
+ }
+ }
+ else
+ {
+ gl.add(new int[]
+ { 0, al.getHeight() - 1 });
+ }
+ if (min >= 0 && gl.size() < min)
+ {
+ throw new NoValidInputDataException(
+ "Not enough sequence groups for input. Need at least " + min
+ + " groups (including ungrouped regions).");
+ }
+ if (max > 0 && gl.size() > max)
+ {
+ throw new NoValidInputDataException(
+ "Too many sequence groups for input. Need at most " + max
+ + " groups (including ungrouped regions).");
+ }