JAL-3490 match count independent of contiguous matches count
[jalview.git] / src / jalview / analysis / Finder.java
index fc65379..c545c7f 100644 (file)
@@ -164,14 +164,10 @@ public class Finder implements FinderI
     getSequence(ignoreHidden);
 
     boolean found = false;
-    while (!found || findAll)
+    while ((!found || findAll) && sequenceIndex < end)
     {
       found = findNextMatch(searchString, searchPattern, searchDescription,
               ignoreHidden);
-      if (sequenceIndex >= end)
-      {
-        break;
-      }
     }
   }
 
@@ -223,6 +219,7 @@ public class Finder implements FinderI
     if (ignoreHidden)
     {
       seqString = getVisibleSequence(seq);
+      this.searchedSequenceStartPosition = 1;
     }
     else
     {
@@ -262,8 +259,12 @@ public class Finder implements FinderI
    */
   private String getVisibleSequence(SequenceI seq)
   {
-    int seqStartCol = seq.findIndex(seq.getStart());
-    int seqEndCol = seq.findIndex(seq.getStart() + seq.getLength() - 1);
+    /*
+     * get start / end columns of sequence and convert to base 0
+     * (so as to match the visible column ranges)
+     */
+    int seqStartCol = seq.findIndex(seq.getStart()) - 1;
+    int seqEndCol = seq.findIndex(seq.getStart() + seq.getLength() - 1) - 1;
     Iterator<int[]> visibleColumns = viewport.getViewAsVisibleContigs(true);
     StringBuilder visibleSeq = new StringBuilder(seqEndCol - seqStartCol);
     List<int[]> fromRanges = new ArrayList<>();
@@ -291,7 +292,7 @@ public class Finder implements FinderI
          * so add the range to the mapping being constructed
          */
         int seqResFrom = seq.findPosition(range[0]);
-        int seqResTo = seq.findPosition(range[1]);
+        int seqResTo = seqResFrom + ungapped.length() - 1;
         fromRanges.add(new int[] { seqResFrom, seqResTo });
       }
     }
@@ -470,10 +471,7 @@ public class Finder implements FinderI
      */
     int[] truePositions = searchedSequenceMap
             .locateInFrom(matchStartPosition, matchEndPosition);
-    for (int i = 0; i < truePositions.length - 1; i += 2)
-    {
-      searchResults.addResult(seq, truePositions[i], truePositions[i + 1]);
-    }
+    searchResults.addResult(seq, truePositions);
   }
 
   /**