X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bam_color.c;h=8b86e2fb6fb0a328b4a903e6dd2d463c3a0114c9;hb=ccb7838cb53bf0ca6917a77f7991d940057c12db;hp=ce637f708db56de777e86f2f0ad50478fb1a6657;hpb=da9fd6833bfcc4bf088f87dc29f6f5d3fc45a8b7;p=samtools.git diff --git a/bam_color.c b/bam_color.c index ce637f7..8b86e2f 100644 --- a/bam_color.c +++ b/bam_color.c @@ -19,8 +19,14 @@ char bam_aux_getCSi(bam1_t *b, int i) cs = bam_aux2Z(c); // adjust for strandedness and leading adaptor - if(bam1_strand(b)) i = strlen(cs) - 1 - i; - else i++; + if(bam1_strand(b)) { + i = strlen(cs) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + i -= cigar >> BAM_CIGAR_SHIFT; + } + } else { i++; } return cs[i]; } @@ -42,7 +48,14 @@ char bam_aux_getCQi(bam1_t *b, int i) cq = bam_aux2Z(c); // adjust for strandedness - if(bam1_strand(b)) i = strlen(cq) - 1 - i; + if(bam1_strand(b)) { + i = strlen(cq) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + i -= (cigar >> BAM_CIGAR_SHIFT); + } + } return cq[i]; } @@ -98,6 +111,11 @@ char bam_aux_getCEi(bam1_t *b, int i) // adjust for strandedness and leading adaptor if(bam1_strand(b)) { //reverse strand cs_i = strlen(cs) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + cs_i -= cigar >> BAM_CIGAR_SHIFT; + } // get current color cur_color = cs[cs_i]; // get previous base. Note: must rc adaptor