From: Diane Trout Date: Wed, 12 Apr 2006 23:25:58 +0000 (+0000) Subject: ticket:85 fix, extend code crashes with 1 path X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=commitdiff_plain;h=8895e01b45d6df1973490d779c9051811f056cae ticket:85 fix, extend code crashes with 1 path when there was only 1 path the refinement code attempted to access a null pointer. (The "next" path, which was alas, pathz.end() ) --- diff --git a/alg/nway_other.cpp b/alg/nway_other.cpp index 5e23936..19aaf0d 100644 --- a/alg/nway_other.cpp +++ b/alg/nway_other.cpp @@ -216,7 +216,6 @@ NwayPaths::trans_path_search(vector > all_comparisons) vector::iterator> sp_itor_begin(all_comparisons.size()); vector::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 > 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 > 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 > 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 diff --git a/alg/nway_paths.cpp b/alg/nway_paths.cpp index 6c2acdf..c76e89d 100644 --- a/alg/nway_paths.cpp +++ b/alg/nway_paths.cpp @@ -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); + } } } } diff --git a/alg/test/test_nway.cpp b/alg/test/test_nway.cpp index 49be7e5..68ee988 100644 --- a/alg/test/test_nway.cpp +++ b/alg/test/test_nway.cpp @@ -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(); +}