X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=padding.c;fp=padding.c;h=ad8bf5c480d97642dd433ac740059b1d6e45e1e5;hb=545789370ce9f41f8b0e752d45f68006c3655e84;hp=88945e2ca5c54c1a592a45899358996ddd810ece;hpb=50be08b2de946accc4c15aab2ec45ac86f30b09f;p=samtools.git diff --git a/padding.c b/padding.c index 88945e2..ad8bf5c 100644 --- a/padding.c +++ b/padding.c @@ -271,6 +271,31 @@ int bam_pad2unpad(samfile_t *in, samfile_t *out, faidx_t *fai) n2 = k; replace_cigar(b, n2, cigar2); b->core.pos = posmap[b->core.pos]; + if (b->core.mpos < 0) { + /* Nice case, no mate to worry about*/ + } else if (b->core.mtid == b->core.tid) { + /* Nice case, same reference */ + b->core.mpos = posmap[b->core.mpos]; + } else { + /* Nasty case, Must load alternative posmap */ + if (!fai) { + fprintf(stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", h->target_name[b->core.mtid]); + return -1; + } + /* Temporarily load the other reference sequence */ + if (load_unpadded_ref(fai, h->target_name[b->core.mtid], h->target_len[b->core.mtid], &r)) { + fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.mtid]); + return -1; + } + posmap = update_posmap(posmap, r); + b->core.mpos = posmap[b->core.mpos]; + /* Restore the reference and posmap*/ + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { + fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); + return -1; + } + posmap = update_posmap(posmap, r); + } } samwrite(out, b); }