diff --git a/gamgee/cigar.cpp b/gamgee/cigar.cpp index 8dfd95cf4..70058733a 100644 --- a/gamgee/cigar.cpp +++ b/gamgee/cigar.cpp @@ -113,7 +113,6 @@ CigarElement Cigar::parse_next_cigar_element (stringstream& cigar_stream) { if ( cigar_stream.fail() || int(element_op) >= 128 ) throw invalid_argument(string("Error parsing cigar string: ") + cigar_stream.str()); const auto encoded_op = cigar_op_parse_table[element_op]; - printf("parsed length: %d, op: %d, econded_op: %d\n", element_length, element_op, encoded_op); if ( encoded_op < 0 ) throw invalid_argument(string("Unrecognized operator ") + char(element_op) + " in cigar string: " + cigar_stream.str()); return make_cigar_element(element_length, static_cast(encoded_op)); diff --git a/gamgee/cigar.h b/gamgee/cigar.h index 2fa48c830..3ac480fbd 100644 --- a/gamgee/cigar.h +++ b/gamgee/cigar.h @@ -56,7 +56,6 @@ class Cigar { * out of a length and a CigarOperator */ inline static CigarElement make_cigar_element(const uint32_t oplen, const CigarOperator op) { - printf("making -- len: %d, op: %d\n", oplen, op); return (oplen << BAM_CIGAR_SHIFT) | static_cast(op); } @@ -80,7 +79,7 @@ class Cigar { * } * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - * @return a pair with the element length and operator respectively. Both values can be converted using the Cigar API to actual elements. + * @return a CigarElement with the length and operator. Both values can be converted using the Cigar API (Cigar::cigar_op and Cigar::cigar_oplen) to actual elements. */ static CigarElement parse_next_cigar_element (std::stringstream& cigar_stream); diff --git a/gamgee/sam.cpp b/gamgee/sam.cpp index 6410e9bd9..819dad4ff 100644 --- a/gamgee/sam.cpp +++ b/gamgee/sam.cpp @@ -84,7 +84,6 @@ uint32_t Sam::mate_alignment_stop() const { stringstream cigar_stream {mate_cigar.value()}; while (cigar_stream.peek() != std::char_traits::eof()) { const auto element = Cigar::parse_next_cigar_element(cigar_stream); - printf("element length: %d, op: %d\n", Cigar::cigar_oplen(element), static_cast(Cigar::cigar_op(element))); result += Cigar::consumes_reference_bases(Cigar::cigar_op(element)) ? Cigar::cigar_oplen(element) : 0; } return result-1; // we want the last base to be 1-based and **inclusive** diff --git a/test/sam_test.cpp b/test/sam_test.cpp index f80517834..6489699d3 100644 --- a/test/sam_test.cpp +++ b/test/sam_test.cpp @@ -441,7 +441,6 @@ BOOST_AUTO_TEST_CASE( sam_mate_alignment_stop ) { auto i = 0u; for (const auto& record : SingleSamReader{"testdata/test_simple.sam"}) { if (!missing(record.string_tag("MC"))) { - printf("read: %d, mate cigar: %s, astart: %d, astop: %d, mate_start: %d, mate_stop: %d\n", i, record.string_tag("MC").value().c_str(), record.alignment_start(), record.alignment_stop(), record.mate_alignment_start(), record.mate_alignment_stop()); BOOST_CHECK_EQUAL(record.mate_alignment_stop(), truth_mate_alignment_stop[i++]); } else { @@ -449,3 +448,11 @@ BOOST_AUTO_TEST_CASE( sam_mate_alignment_stop ) { } } } + +BOOST_AUTO_TEST_CASE( sam_off_by_one_uber_test ) { + const auto header = SingleSamReader{"testdata/test_simple.bam"}.header(); + auto builder = SamBuilder{header}; + const auto record = builder.set_name("TEST").set_bases("A").set_cigar("1M").set_base_quals({20}).set_alignment_start(1).build(); + BOOST_CHECK_EQUAL(record.alignment_start(), 1); + BOOST_CHECK_EQUAL(record.alignment_stop(), 1); +}