From: Bo Li Date: Wed, 3 Sep 2014 21:43:53 +0000 (-0500) Subject: Added error detection for cases such as a read's two mates having different names... X-Git-Url: https://git.donarmstrong.com/?p=rsem.git;a=commitdiff_plain;h=HEAD Added error detection for cases such as a read's two mates having different names or a read is both alignable and unalignable --- 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();