JAL-1312 rewrite of code for first reported exception - note - maintaining scontigs...
authorJim Procter <jprocter@compbio.dundee.ac.uk>
Mon, 17 Jun 2013 14:13:13 +0000 (15:13 +0100)
committerJim Procter <jprocter@compbio.dundee.ac.uk>
Mon, 17 Jun 2013 14:13:13 +0000 (15:13 +0100)
src/jalview/analysis/Dna.java

index cbe871d..5285924 100644 (file)
@@ -483,23 +483,75 @@ public class Dna
             // edit scontigs
             skipint[0] = vismapping.shift(skipint[0]);
             skipint[1] = vismapping.shift(skipint[1]);
-            for (vc = 0; vc < scontigs.length; vc += 2)
+            for (vc = 0; vc < scontigs.length; )
             {
               if (scontigs[vc + 1] < skipint[0])
               {
+                // before skipint starts
+                vc += 2;
                 continue;
               }
+              if (scontigs[vc]>skipint[1])
+              {
+                // finished editing so
+                break;
+              }
+              // Edit the contig list to include the skipped region which did not translate
+              int[] t;
+              // from : s1 e1 s2 e2 s3 e3
+              // to s:  s1 e1 s2 k0 k1 e2 s3 e3
+              // list increases by one unless one boundary (s2==k0 or e2==k1) matches, and decreases by one if skipint intersects whole visible contig 
               if (scontigs[vc] <= skipint[0])
               {
                 if (skipint[0] == scontigs[vc])
                 {
-
+                  // skipint at start of contig
+                  // shift the start of this contig
+                  if (scontigs[vc + 1] > skipint[1])
+                  {
+                    scontigs[vc] = skipint[1];
+                    vc+=2;
+                  }
+                  else
+                  {
+                    if (scontigs[vc+1]==skipint[1])
+                    {
+                      // remove the contig
+                      t = new int[scontigs.length - 2];
+                      if (vc > 0)
+                      {
+                        System.arraycopy(scontigs, 0, t, 0, vc - 1);
+                      }
+                      if (vc + 2 < t.length)
+                      {
+                        System.arraycopy(scontigs, vc + 2, t, vc, t.length
+                              - vc + 2);
+                      }
+                      scontigs=t;
+                    } else {
+                      // truncate contig to before the skipint region
+                      scontigs[vc+1] = skipint[0]-1;
+                      vc+=2;
+                    }
+                  }
                 }
                 else
                 {
-                  int[] t = new int[scontigs.length + 2];
-                  System.arraycopy(scontigs, 0, t, 0, vc - 1);
-                  // scontigs[vc]; //
+                  // scontig starts before start of skipint
+                  if (scontigs[vc+1]<skipint[1]) {
+                    // skipint truncates end of scontig
+                    scontigs[vc+1] = skipint[0]-1; 
+                    vc+=2;
+                  } else {
+                    // divide region to new contigs
+                    t = new int[scontigs.length + 2];
+                    System.arraycopy(scontigs, 0, t, 0, vc +1);
+                    t[vc+1] = skipint[0];
+                    t[vc+2] = skipint[1];
+                    System.arraycopy(scontigs, vc + 1, t, vc+3, scontigs.length-(vc+1));
+                    scontigs=t;
+                    vc+=4;
+                  }
                 }
               }
             }