From: peterjc
Date: Mon, 26 Mar 2012 14:35:44 +0000 (+0100)
Subject: Cope with trailing CIGAR H (or S and H) in 'samtools depad'
X-Git-Url: https://git.donarmstrong.com/?p=samtools.git;a=commitdiff_plain;h=73272534935626214df3584e6287c3f652f10f32
Cope with trailing CIGAR H (or S and H) in 'samtools depad'
---
diff --git a/padding.c b/padding.c
index 43ff56e..f839c3b 100644
--- a/padding.c
+++ b/padding.c
@@ -96,7 +96,9 @@ int bam_pad2unpad(bamFile in, bamFile out)
if (bam_cigar_op(cigar[0]) == BAM_CSOFT_CLIP) write_cigar(cigar2, n2, m2, cigar[0]);
if (bam_cigar_op(cigar[0]) == BAM_CHARD_CLIP) {
write_cigar(cigar2, n2, m2, cigar[0]);
- if (bam_cigar_op(cigar[1]) == BAM_CSOFT_CLIP) write_cigar(cigar2, n2, m2, cigar[1]);
+ if (b->core.n_cigar > 2 && bam_cigar_op(cigar[1]) == BAM_CSOFT_CLIP) {
+ write_cigar(cigar2, n2, m2, cigar[1]);
+ }
}
/* Include any pads if starts with an insert */
for (k = 0; k+1 < b->core.pos && !r.s[b->core.pos - k - 1]; ++k);
@@ -113,6 +115,12 @@ int bam_pad2unpad(bamFile in, bamFile out)
}
write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op));
if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CSOFT_CLIP) write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]);
+ if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CHARD_CLIP) {
+ if (b->core.n_cigar > 2 && bam_cigar_op(cigar[b->core.n_cigar-2]) == BAM_CSOFT_CLIP) {
+ write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-2]);
+ }
+ write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]);
+ }
/* Remove redundant P operators between M operators, e.g. 5M2P10M -> 15M */
for (i = 2; i < n2; ++i)
if (bam_cigar_op(cigar2[i]) == BAM_CMATCH && bam_cigar_op(cigar2[i-1]) == BAM_CPAD && bam_cigar_op(cigar2[i-2]) == BAM_CMATCH)