ticket:85 fix, extend code crashes with 1 path
authorDiane Trout <diane@caltech.edu>
Wed, 12 Apr 2006 23:25:58 +0000 (23:25 +0000)
committerDiane Trout <diane@caltech.edu>
Wed, 12 Apr 2006 23:25:58 +0000 (23:25 +0000)
when there was only 1 path the refinement code attempted to access a null
pointer. (The "next" path, which was alas, pathz.end() )

alg/nway_other.cpp
alg/nway_paths.cpp
alg/test/test_nway.cpp

index 5e239366a2e3828f4411bd974835cea3e517fb5c..19aaf0d268279bb981ae5d7730d352cb2ab3f4db 100644 (file)
@@ -216,7 +216,6 @@ NwayPaths::trans_path_search(vector<vector<FLPs> > all_comparisons)
   vector<list<int>::iterator> sp_itor_begin(all_comparisons.size()); 
   vector<list<int>::iterator> sp_itor_end(all_comparisons.size()); 
 
-
   //cout << "trans: softhres = " << soft_thres;
   //cout << ", window = " << win_size << ", ";
 
@@ -229,7 +228,7 @@ NwayPaths::trans_path_search(vector<vector<FLPs> > all_comparisons)
   {
     // if 1st seq has a match to all the others for this window,
     // then make all possible paths out of all these matches (in all_matches)
-    if(make_all_seq_win_matches(all_comparisons, all_matches, win_i, soft_thres))
+    if(make_all_seq_win_matches(all_comparisons, all_matches, win_i,soft_thres))
     {
       //debug? //dump_matches_win(win_i, all_matches);
       reset_species_iterators(all_matches, sp_itor_begin, sp_itor_end);
@@ -241,8 +240,10 @@ NwayPaths::trans_path_search(vector<vector<FLPs> > all_comparisons)
         set_path_to_cur_sp_itor_track(path, win_i, sp_itor_begin);
 
         // if the path is transitive, save the path
-        if (is_transitive_path(path, all_comparisons, soft_thres))
-          pathz.push_back(ConservedPath(soft_thres, path));
+        if (is_transitive_path(path, all_comparisons, soft_thres)) {
+          ConservedPath new_path(soft_thres, path);
+          pathz.push_back(new_path);
+        }
 
         // now advance the right iterator
         still_paths = advance_sp_itor_track(sp_itor_begin, 
@@ -251,7 +252,8 @@ NwayPaths::trans_path_search(vector<vector<FLPs> > all_comparisons)
       }
     }
   }
-  //clog << "all_cmp=" << all_comparisons.size();
+  //clog << "pathz=" << pathz.size()
+  //     << " all_cmp=" << all_comparisons.size();
   //if (pathz.begin() != pathz.end())
   //  clog << " path_size=" << pathz.begin()->size();
   //else 
index 6c2acdf137da7ec87d3debb75d27627fa53a3e67..c76e89d441410f9cd89bb0e9e0a5458bca7bdfe7 100644 (file)
@@ -83,20 +83,17 @@ NwayPaths::simple_refine()
       // keep track of current path and advance to next path
       cur_path = pathz_i;
       ++pathz_i;
-      if (pathz_i == pathz.end())
+
+      if (pathz_i == pathz.end()) {
         end = true;
-      else
+        extending = false;
+      } else {
         next_path = pathz_i;
-
-      if (not end)
-      {
         // if node for each seq is equal to the next node+1 then for all
         // sequences then we are extending
         extending = cur_path->nextTo(*next_path);
       }
-      else
-        extending = false;
-  
+
       if (extending)
       {
         win_ext_len++;
@@ -108,9 +105,11 @@ NwayPaths::simple_refine()
         new_path = ext_path;
         new_path.extend(win_ext_len);
         refined_pathz.push_back(new_path);
-        // reset stuff
-        win_ext_len = 0;
-        ext_path = ExtendedConservedPath( win_size, *next_path);
+        if (not end) {
+          // reset stuff
+          win_ext_len = 0;
+          ext_path = ExtendedConservedPath( win_size, *next_path);
+        }
       }
     }
   }
index 49be7e5c040a932e5c964932fa20cea66b3f6982..68ee988d4cb65187699d9b604c78cdd4eda2a817 100644 (file)
@@ -79,3 +79,111 @@ BOOST_AUTO_TEST_CASE( nway_refine )
   m1.nway();
   BOOST_CHECK_EQUAL(npath.refined_path_size(), first_refined_size);
 }
+
+// The following data causes a crash...
+// ticket:85 is the user report 
+// ticket:83 provided the sample data
+// ticket:64 was my version where I didn't have a consistent way of 
+// duplicating.
+BOOST_AUTO_TEST_CASE( nway_threshold_crash )
+{
+  string seq1 = "CACTCCCTCGAAGCTGCTGT\
+TCTCTTGTCTGTCTGTCTCTGTCTTGAAGCTCAGCCAAGAAACTTTCCCGTGTCACGCCT\
+GCGTCCCACCGTGGGGCTCTCTTGGAGCACCCAGGGACACCCAGCGTGCAACAGCCACGG\
+GAAGCCTTTCTGCCGCCCAGGCCCACAGGTCTCGAGACGCACATGCACGCCTGGGCGTGG\
+CAGCCTCACAGGGAACACGGGACAGACGCCGGCGACGCGCAGACACACGGACACGCGGAA\
+GCCAAGCACACTCTGGCGGGTCCCGCAAGGGACGCCGTGGAAGAAAGGAGCCTGTGGCAA\
+CAGGCGGCCGAGCTGCCGAATTCAGTTGACACGAGGCACAGAAAACAAATATCAAAGATC\
+TAATAATACAAAACAAACTTGATTAAAACTGGTGCTTAAAGTTTATTACCCACAACTCCA\
+CAGTCTCTGTGTAAACCACTCGACTCATCTTGTAGCTTATTTTTTTTTAAAGAGGACGTT\
+TTCTACGGCTGTGGCCCGCCTCTGTGAACCATAGCGGTGTGCGGCGGGGGGTCTGCACCC\
+GGGTGGGGGACAGAGGGACCTTTAAAGAAAACAAAACTGGACAGAAACAGGAATGTGAGC\
+TGGGGGAGCTGGCTTGAGTTTCTCAAAAGCCATCGGAAGATGCGAGTTTGTGCCTTTTTT\
+TTTATTGCTCTGGTGGATTTTTGTGGCTGGGTTTTCTGAAGTCTGAGGAACAATGCCTTA\
+AGAAAAAACAAACAGCAGGAATCGGTGGGACAGTTTCCTGTGGCCAGCCGAGCCTGGCAG\
+TGCTGGCACCGCGAGCTGGCCTGACGCCTCAAGCACGGGCACCAGCCGTCATCTCCGGGG\
+CCAGGGGCTGCAGCCCGGCGGTCCCTGTTTTGCTTTATTGCTGTTTAAGAAAAATGGAGG\
+TAGTTCCAAAAAAGTGGCAAATCCCGTTGGAGGTTTTGAAGTCCAACAAATTTTAAACGA\
+ATCCAAAGTGTTCTCACACGTCACATACGATTGAGCATCTCCATCTGGTCGTGAAGCATG\
+TGGTAGGCACACTTGCAGTGTTACGATCGGAATGCTTTTTATTAAAAGCAAGTAGCATGA\
+AGTATTGCTTAAATTTTAGGTATAAATAAATATATATATGTATAATATATATTCCAATGT\
+ATTCCAAGCTAAGAAACTTACTTGATTCTTATGAAATCTTGATAAAATATTTATAATGCA\
+TTTATAGAAAAAGTATATATATATATATAAAATGAATGCAGATTGCGAAGGTCCCTGCAA\
+ATGGATGGCTTGTGAATTTGCTCTCAAGGTGCTTATGGAAAGGGATCCTGATTGATTGAA\
+ATTCATGTTTTCTCAAGCTCCAGATTGGCTAGATTTCAGATCGCCAACACATTCGCCACT\
+GGGCAACTACCCTACAAGTTTGTACTTTCATTTTAATTATTTTCTAACAGAACCGCTCCC\
+GTCTCCAAGCCTTCATGCACATATGTACCTAATGAGTTTTTATAGCAAAGAATATAAATT\
+TGCTGTTGATTTTTGTATGAATTTTTTCACAAAAAGATCCTGAATAAGCATTGTTTTATG\
+AATTTTACATTTTTCCTCACCATTTAGCAATTTTCTGAATGGTAATAATGTCTAAATCTT\
+TTTCCTTTCTGAATTCTTGCTTGTACATTTTTTTTTACCTTTCAAAGGTTTTTAATTATT\
+TTTGTTTTTATTTTTGTACGATGAGTTTTCTGCAGCGTACAGAATTGTTGCTGTCAGATT\
+CTATTTTCAGAAAGTGAGAGGAGGGACCGTAGGTCTTTTCGGAGTGACACCAACGATTGT\
+GTCTTTCCTGGTCTGTCCTAGGAGCTGTATAAAGAAGCCCAGGGGCTCTTTTTAACTTTC\
+AACACTAGTAGTATTACGAGGGGTGGTGTGTTTTTCCCCTCCGTGGCAAGGGCAGGGAGG\
+GTTGCTTAGGATGCCCGGCCACCCTGGGAGGCTTGCCAGATGCCGGGGGCAGTCAGCATT\
+AATGAAACTCATGTTTAAACTTCTCTGACCACATCGTCAGGATAGAATTCTAACTTGAGT\
+TTTCCAAAGACCTTTTGAGCATGTCAGCAATGCATGGGGCACACGTGGGGCTCTTTACCC\
+ACTTGGGTTTTTCCACTGCAGCCACGTGGCCAGCCCTGGATTTTGGAGCCTGTGGCTGCA\
+AGGAACCCAGGGACCCTTGTTGCCTGGTGAACCTGCAGGGAGGGTATGATTGCCTGACCA\
+GGACAGCCAGTCTTTACTCTTTTTCTCTTCAACAGTAACTGACAGTCACGTTTTACTGGT\
+AACTTATTTTCCAGCACATGAAGCCACCAGTTTCATTCCAAAGTGTATATTGGGTTCAGA\
+CTTGGGGGCAGAAGTTCAGACACACCGTGCTCAGGAGGGACCCAGAGCCGAGTTTCGGAG\
+TTTGGTAAAGTTTACAGGGTAGCTTCTGAAATTAACTCAAACTTTTGACCAAATGAGTGC\
+AGATTCTTGGATTCACTTGGTCACTGGGCTGCTGATGGTCAGCTCTGAGACAGTGGTTTG\
+AGAGCAGGCAGAACGGTCTTGGGACTTGTTTGACTTTCCCCTCCCTGGTGGCCACTCTTT\
+GCTCTGAAGCCCAGATTGGCAAGAGGAGCTGGTCCATTCCCCATTCATGGCACAGAGCAG\
+TGGCAGGGCCCAGCTAGCAGGCTCTTCTGGCCTCCTTGGCCTCATTCTCTGCATAGCCCT\
+CTGGGGATCCTGCCACCTGCCCTCTTACCCCGCCGTGGCTTATGGGGAGGAATGCATCAT\
+CTCACTTTTTTTTTTTAAGCAGATGATGGGATAACATGGACTGCTCAGTGGCCAGGTTAT\
+CAGTGGGGGGACTTAATTCTAATCTCATTCAAATGGAGACGCCCTCTGCAAAGGCCTGGC\
+AGGGGGAGGCACGTTTCATCTGTCAGCTCACTCCAGCTTCACAAATGTGCTGAGAGCATT\
+ACTGTGTAGCCTTTTCTTTGAAGACACACTCGGCTCTTCTCCACAGCAAGCGTCCAGGGC\
+AGATGGCAGAGGATCTGCCTCGGCGTCTGCAGGCGGGACCACGTCAGGGAGGGTTCCTTC\
+ATGTGTTCTCCCTGTGGGTCCTTGGACCTTTAGCCTTTTTCTTCCTTTGCAAAGGCCTTG\
+GGGGCACTGGCTGGGAGTCAGCAAGCGAGCACTTTATATCCCTTTGAGGGAAACCCTGAT\
+GACGCCACTGGGCCTCTTGGCGTCTGCCCTGCCCTCGCGGCTTCCCGCCGTGCCGCAGCG\
+TGCCCACGTGCCCACGCCCCACCAGCAGGCGGCTGTCCCGGAGGCCGTGGCCCGCTGGGA\
+CTGGCCGCCCCTCCCCAGCGTCCCAGGGCTCTGGTTCTGGAGGGCCACTTTGTCAAGGTG\
+TTTCAGTTTTTCTTTACTTCTTTTGAAAATCTGTTTGCAAGGGGAAGGACCATTTCGTAA\
+TGGTCTGACACAAAAGCAAGTTTGATTTTTGCAGCACTAGCAATGGACTTTGTTGTTTTT\
+CTTTTTGATCAGAACATTCCTTCTTTACTGGTCACAGCCACGTGCTCATTCCATTCTTCT\
+TTTTGTAGACTTTGGGCCCACGTGTTTTATGGGCATTGATACATATATAAATATATAGAT\
+ATAAATATATATGAATATATTTTTTTAAGTTTCCTACACCTGGAGGTTGCATGGACTGTA\
+CGACCGGCATGACTTTATATTGTATACAGATTTTGCACGCCAAACTCGGCAGCTTTGGGG\
+AAGAAGAAAAATGCCTTTCTGTTCCCCTCTCATGACATTTGCAGATACAAAAGATGGAAA\
+TTTTTCTGTAAAACAAAACCTTGAAGGAGAGGAGGGCGGGGAAGTTTGCGTCTTATTGAA\
+CTTATTCTTAAGAAATTGTACTTTTTATTGTAAGAAAAATAAAAAGGACTACTTAAACAT\
+TTGTCATATTAAGAAAAAAAGTTTATCTAGCACTTGTGACATACCAATAATAGAGTTTAT\
+TGTATTTATGTGGAAACAGTGTTTTAGGGAAACTACTCAGAATTCACAGTGAACTGCCTG\
+TCTCTCTCGAGTTGATTTGGAGGAATTTTGTTTTGTTTTGTTTTGTTTGTTTCCTTTTAT\
+CTCCTTCCACGGGCCAGGCGAGCGCCGCCCGCCCTCACTGGCCTTGTGACGGTTTATTCT\
+GATTGAGAACTGGGCGGACTCGAAAGAGTCCCCTTTTCCGCACAGCTGTGTTGACTTTTT\
+AATTACTTTTAGGTGATGTATGGCTAAGATTTCACTTTAAGCAGTCGTGAACTGTGCGAG\
+CACTGTGGTTTACAATTATACTTTGCATCGAAAGGAAACCATTTCTTCATTGTAACGAAG\
+CTGAGCGTGTTCTTAGCTCGGCCTCACTTTGTCTCTGGCATTGATTAAAAGTCTGCTATT";
+  string seq2="ATCCCAGCACATGACAACACTTCAGAAGGG\
+TCCCCCTGCTGACTGGAGAGCTGGGAATATGGCATTTGGACACTTCATTTGTAAATAGTG\
+TACATTTTAAACATTGGCTCGAAACTTCAGAGATAAGTCATGGAGAGGACATTGGAGGGG\
+AGAAATGCAGTTGCTGACTGGGAATTTAAGAATGTGAACTTCTCACTAGAATTGGTATGG\
+AAAAGCAAAATACTGTAAATAAACTTTTTTTCTAACAATTTGCC";
+  string seq3="GGAGCTGGATGAATGAGAGGCCCCCAGATGCAGAGAGACTGGAGAGGGT\
+GGGGAGGGGCCCAGCGGCCTTGGTGACAGGCCCAGGGTGGGAGGGGTCGGGGCCCCTGGA\
+GGGGCAATGGGGAGGTGATGTCTTCTCTCTGCTCAGAGAGCAGGGACTAGGGTAGGACCC\
+TCACCGCTGCGTCCAGCAGACACTGAACCAGAATTGGAAACGTGCTTGAAACAATCACAC\
+AGGACACTTTTCTACATTGGTGCAAAATGGAATATTTTGTACATTTTTAAAATGTGATTT\
+TTGTATATACTTGTATATGTATGCCAATTTGGTGCTTTTTGTAAAGGAACTTTTGTATAA\
+TAATGCCTGGTCGTTGGGTGACCTGCGATTGTCAGAAAGAGGGGAAGGAAGCCAGGTTGA\
+TACAGCTGCCCACTTCCTTTCCTGAGCAGGAGGATGGGGTAGCACTCACAGGGACGATGT\
+GCTGTATTTCAGTGCCTATCCCAGACATACGGGGTGGTAACTGAGTTTGTGTTATATGTT\
+GTTTTAATAAATGCACAATGCTCTCTTCCTGTTCTTC";
+
+  // now that we've got some data lets see if it crashes
+  Mussa m1;
+  m1.add_a_seq(seq1);
+  m1.add_a_seq(seq2);
+  m1.add_a_seq(seq3);
+
+  m1.analyze(10, 8);
+  m1.set_soft_thres(10);
+  m1.nway();
+}