/// the reference sequence is assumed to be a clip starting at the query alignment start position: /// static void semiAlignTestCase( const pos_t alignPos, const char* querySeq, const char* refSeq, unsigned& leadingLength, pos_t& leadingRefPos, unsigned& trailingLength, pos_t& trailingRefPos) { leadingLength=0; leadingRefPos=0; trailingLength=0; trailingRefPos=0; const unsigned querySize(strlen(querySeq)); ALIGNPATH::path_t inputPath; inputPath.push_back(ALIGNPATH::path_segment(ALIGNPATH::MATCH,querySize)); bam_record bamRead; bam1_t* bamDataPtr(bamRead.get_data()); edit_bam_cigar(inputPath,*bamDataPtr); reference_contig_segment testRefSeg; testRefSeg.seq() = refSeq; testRefSeg.set_offset(alignPos); // initialize test qual array to all Q30's: boost::scoped_array<uint8_t> qual(new uint8_t[querySize]); for (unsigned i(0); i<querySize; ++i) { qual[i] = 30; } edit_bam_read_and_quality(querySeq, qual.get(), *bamDataPtr); SimpleAlignment align(bamRead); align.pos = alignPos; edgeMismatchLength(align, bamRead.get_bam_read(), testRefSeg, 5, leadingLength, leadingRefPos, trailingLength, trailingRefPos); }
void buildTestBamRecord( bam_record& bamRead, int targetID, int pos, int mateTargetID, int matePos, int fragmentSize, int mapQ, std::string cigarString, std::string querySeq) { bam1_t& bamData(*(bamRead.get_data())); // set qname { edit_bam_qname("buildTestBamRecord", bamData); } // set CIGAR { if (cigarString.empty()) { cigarString = std::to_string(fragmentSize) + "M"; } ALIGNPATH::path_t inputPath; cigar_to_apath(cigarString.c_str(), inputPath); edit_bam_cigar(inputPath, bamData); } // set read and qual { if ( querySeq.empty() ) { querySeq = std::string(fragmentSize,'A'); } const unsigned querySize(querySeq.length()); // initialize test qual array to all Q30's: std::unique_ptr<uint8_t[]> qual(new uint8_t[querySize]); for (unsigned i(0); i<querySize; ++i) { qual[i] = 30; } edit_bam_read_and_quality(querySeq.c_str(), qual.get(), bamData); } // Set some defaults for the read bamRead.toggle_is_paired(); bamRead.toggle_is_mate_fwd_strand(); bamData.core.pos = pos; bamData.core.isize = fragmentSize; bamData.core.qual = mapQ; bamRead.set_target_id(targetID); // Set mate info bamData.core.mtid = mateTargetID; bamData.core.mpos = matePos; static const char nhTag[] = {'N','H'}; static const char nmTag[] = {'N','M'}; static const char rgTag[] = {'R','G'}; bam_aux_append_unsigned(bamData, nhTag, 1); bam_aux_append_unsigned(bamData, nmTag, 1); bam_aux_append_unsigned(bamData, rgTag, 1); }