// assume that alignment is properly ordered so groups form consecutive
// blocks
ArrayList<int[]> gl = new ArrayList<int[]>();
- int p = 0;
+ int p = 0,lowest=al.getHeight(), highest=0;
List<SequenceGroup> sgs;
synchronized (sgs = al.getGroups())
{
for (SequenceI sq : sg.getSequencesInOrder(al))
{
p = al.findIndex(sq);
+ if (lowest>p)
+ {
+ lowest=p;
+ }
+ if (highest<p)
+ {
+ highest=p;
+ }
if (se == null)
{
se = new int[]
// 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 (lowest-1>minsize)
{
- 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.");
- }
+ gl.add(0, new int[]
+ { 0, lowest-2});
}
- else
+ if ((al.getHeight()-1-highest)>minsize)
{
- 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.");
- }
- }
+ gl.add(new int[] { highest+1, al.getHeight()-1});
}
}
else