void apath_limit_ref_length( const unsigned target_ref_length, path_t& apath) { unsigned ref_length(0); const unsigned as(apath.size()); for (unsigned i(0); i<as; ++i) { path_segment& ps(apath[i]); if (! is_segment_type_ref_length(ps.type)) continue; ref_length += ps.length; if (ref_length < target_ref_length) continue; if (ref_length > target_ref_length) { const unsigned extra(ref_length - target_ref_length); assert(ps.length > extra); ps.length -= extra; } apath.resize(i+1); break; } }
void bam_cigar_to_apath(const uint32_t* bam_cigar, const unsigned n_cigar, path_t& apath) { // this assertion isn't really required... // assert(n_cigar>0); apath.resize(n_cigar); for (unsigned i(0); i<n_cigar; ++i) { apath[i].length=(bam_cigar[i]>>BAM_CIGAR_SHIFT); apath[i].type = static_cast<align_t>(1+(bam_cigar[i]&BAM_CIGAR_MASK)); } }