From 591e8c263863b1e024debc9944f8873080079503 Mon Sep 17 00:00:00 2001 From: Bo Li Date: Wed, 3 Sep 2014 16:43:53 -0500 Subject: [PATCH] Added error detection for cases such as a read's two mates having different names or a read is both alignable and unalignable --- SamParser.h | 6 +++++- parseIt.cpp | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/SamParser.h b/SamParser.h index 81d4097..4747ef4 100644 --- a/SamParser.h +++ b/SamParser.h @@ -62,7 +62,7 @@ private: } std::string getName(const bam1_t* b) { - return std::string((char*)bam1_qname(b)); + return std::string(bam1_qname(b)); } std::string getReadSeq(const bam1_t*); @@ -190,6 +190,8 @@ int SamParser::parseNext(PairedEndRead& read, PairedEndHit& hit) { mp1 = b2; mp2 = b; } + general_assert(!strcmp(bam1_qname(mp1), bam1_qname(mp2)), "Detected a read pair whose two mates have different names: " + getName(mp1) + " , " + getName(mp2) + " !"); + int readType = getReadType(mp1, mp2); std::string name = getName(mp1); @@ -242,6 +244,8 @@ int SamParser::parseNext(PairedEndReadQ& read, PairedEndHit& hit) { mp1 = b2; mp2 = b; } + general_assert(!strcmp(bam1_qname(mp1), bam1_qname(mp2)), "Detected a read pair whose two mates have different names: " + getName(mp1) + " , " + getName(mp2) + " !"); + int readType = getReadType(mp1, mp2); std::string name = getName(mp1); diff --git a/parseIt.cpp b/parseIt.cpp index 91a4c14..f40f822 100644 --- a/parseIt.cpp +++ b/parseIt.cpp @@ -94,6 +94,9 @@ void parseIt(SamParser *parser) { record_read.write(n_os, cat[record_val]); ++N[record_val]; } + + general_assert(record_val == 1 || hits.getNHits() == 0, "Read " + record_read.getName() + " is both unalignable and alignable according to the input SAM/BAM file!"); + // flush out previous read's hits if the read is alignable reads if (record_val == 1) { hits.updateRI(); -- 2.39.2