JAL-2909 fixed another insertions bug
authorkiramt <k.mourao@dundee.ac.uk>
Thu, 1 Mar 2018 11:50:26 +0000 (11:50 +0000)
committerkiramt <k.mourao@dundee.ac.uk>
Thu, 1 Mar 2018 11:50:26 +0000 (11:50 +0000)
src/jalview/datamodel/CigarParser.java

index fd5694c..d82bdec 100644 (file)
@@ -270,7 +270,7 @@ public class CigarParser
       SAMRecord rec = it.next();
       Iterator<CigarElement> cit = rec.getCigar().getCigarElements()
               .iterator();
-      int next = 0;
+      int next = 1;
       while (cit.hasNext())
       {
         CigarElement el = cit.next();
@@ -278,12 +278,11 @@ public class CigarParser
         {
         case I:
           // add to insertions list, and move along the read
-          // location is 1 past the current position of next
-          // (note if we try to retrieve +1 position from reference by calling
-          // getReferencePositionAtReadPosition(next+1) we get 0 because it's an
-          // insertion!)
-          int refLocation = rec.getReferencePositionAtReadPosition(next)
-                  + 1;
+          // location is the start of next CIGAR segment
+          // because getReferencePositionAtReadPosition returns 0 for read
+          // positions which are not in the reference (like insertions)
+          int refLocation = rec.getReferencePositionAtReadPosition(
+                  next + el.getLength());
 
           // if there's already an insertion at this location, keep the longest
           // insertion; if there's no insertion keep this one