JAL-1309 fix broken partition computation for adding in ungrouped sequences as final...
authorJim Procter <jprocter@compbio.dundee.ac.uk>
Fri, 7 Jun 2013 12:31:37 +0000 (13:31 +0100)
committerJim Procter <jprocter@compbio.dundee.ac.uk>
Fri, 7 Jun 2013 15:30:10 +0000 (16:30 +0100)
src/jalview/ws/rest/params/SeqGroupIndexVector.java

index 766720b..0532035 100644 (file)
@@ -88,7 +88,7 @@ public class SeqGroupIndexVector extends InputType implements
     // 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())
     {
@@ -105,6 +105,14 @@ public class SeqGroupIndexVector extends InputType implements
         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[]
@@ -128,40 +136,14 @@ public class SeqGroupIndexVector extends InputType implements
     // 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