keep track of how far through a seqcomp we've gotten
[mussa.git] / alg / flp_seqcomp.cpp
index 003d3fbb2ee55f2410820699cf6fb7705db493bc..1df958277f434762c985db9d6184c0e52f15a1a1 100644 (file)
@@ -12,6 +12,7 @@
 //                         ---------- flp_seqcomp.cc  -----------
 //                        ----------------------------------------
 
+#include "mussa_exceptions.hpp"
 #include "alg/flp.hpp"
 #include <cassert>
 using namespace std;
@@ -33,7 +34,6 @@ FLPs::add(int seq1_i, int seq2_i, int a_score, int i2_offset)
 {
   match a_match;
 
-
   if (a_score >= hard_threshold)
   {
     a_match.index = seq2_i + i2_offset;
@@ -59,17 +59,19 @@ FLPs::seqcomp(string sseq1, string sseq2, bool is_RC)
   seq1 = (char *) sseq1.c_str();
   seq2 = (char *) sseq2.c_str();
 
-
   if (is_RC)
     i2_offset = window_size - sseq2.size();
   else
     i2_offset = 0;
 
+  // I'm not sure why we're -2 instead of -1, but I experimentally 
+  // determined that I need to -2 to get seqcomp_i to == seqcomp_end
+  seqcomp_end = size() + seq2_win_num -2;
 
   // this does the "upper diagonals" of the search 
 
   // loop thru the start positions for sequence 1
-  for(start_i = 0; start_i != size(); start_i++)
+  for(start_i = 0; start_i != size(); ++start_i, ++seqcomp_i)
   {
     matches = 0;
     // compare initial window
@@ -107,11 +109,10 @@ FLPs::seqcomp(string sseq1, string sseq2, bool is_RC)
     } // end of loop thru the current offset sequence
   } // end of loop thru the start positions of seq1 sequence
 
-
   // this does the "lower diagonals" of the search
 
   // loop thru the start positions for sequence 1
-  for(start_i = 1; start_i < seq2_win_num; start_i++)
+  for(start_i = 1; start_i != seq2_win_num; ++start_i, ++seqcomp_i)
   {
     matches = 0;
 
@@ -147,4 +148,10 @@ FLPs::seqcomp(string sseq1, string sseq2, bool is_RC)
       seq2_i = seq2_i + 1;     // increment seq2_i to next window
     } // end of loop thru the current offset sequence
   } // end of loop thru the start positions of seq2 sequence
+
+  if (seqcomp_i != seqcomp_end) {
+    clog << "seqcomp_i " << seqcomp_i << " " << seqcomp_end << endl;
+    //throw mussa_error("internal error with seqcomp seqcomp_i != seqcomp_end");
+  }
+  seqcomp_i = seqcomp_end = FLPs::seqcomp_not_running;
 }