don't seqcomp sequences that are too small
[mussa.git] / alg / flp_seqcomp.cpp
index 04eca42dd0711266d3876a505c6e1e6bccedb348..f46c40498d58b4e12025deda0b293e3d0ee60acb 100644 (file)
@@ -45,6 +45,15 @@ FLPs::add(int seq1_i, int seq2_i, int a_score, int i2_offset)
   }
 }
 
+void FLPs::validate_sequence(const Sequence& seq) const
+{
+  if (seq.size() < window_size) {
+    ostringstream msg;
+    msg << "Sequence " << seq.get_name() << " of length " << seq.size()
+        << " must be longer than window size " << window_size;
+    throw seqcomp_error(msg.str());
+  }
+}
 
 void
 FLPs::seqcomp(const Sequence& sseq1, const Sequence& sseq2, bool is_RC)
@@ -55,8 +64,11 @@ FLPs::seqcomp(const Sequence& sseq1, const Sequence& sseq2, bool is_RC)
   const char *seq1 = sseq1.c_str();
   const char *seq2 = sseq2.c_str();
 
-  int seq1_win_num = sseq1.size() - window_size + 1;
-  int seq2_win_num = sseq2.size() - window_size + 1;
+  validate_sequence(sseq1);
+  validate_sequence(sseq2);
+  
+  size_type seq1_win_num = sseq1.size() - window_size + 1;
+  size_type seq2_win_num = sseq2.size() - window_size + 1;
   alloc_matches(sseq1.size());
   if (seq1_win_num != size()) {
     ostringstream msg;