Merge pull request #138 from nh13/nh_mem_mate_cigar
Mem should set the mate cigar tag.
This commit is contained in:
commit
950ea8cf40
23
bwamem.c
23
bwamem.c
|
|
@ -809,6 +809,19 @@ static inline int get_rlen(int n_cigar, const uint32_t *cigar)
|
|||
return l;
|
||||
}
|
||||
|
||||
static inline void add_cigar(const mem_opt_t *opt, mem_aln_t *p, kstring_t *str, int which)
|
||||
{
|
||||
int i;
|
||||
if (p->n_cigar) { // aligned
|
||||
for (i = 0; i < p->n_cigar; ++i) {
|
||||
int c = p->cigar[i]&0xf;
|
||||
if (!(opt->flag&MEM_F_SOFTCLIP) && !p->is_alt && (c == 3 || c == 4))
|
||||
c = which? 4 : 3; // use hard clipping for supplementary alignments
|
||||
kputw(p->cigar[i]>>4, str); kputc("MIDSH"[c], str);
|
||||
}
|
||||
} else kputc('*', str); // having a coordinate but unaligned (e.g. when copy_mate is true)
|
||||
}
|
||||
|
||||
void mem_aln2sam(const mem_opt_t *opt, const bntseq_t *bns, kstring_t *str, bseq1_t *s, int n, const mem_aln_t *list, int which, const mem_aln_t *m_)
|
||||
{
|
||||
int i, l_name;
|
||||
|
|
@ -835,14 +848,7 @@ void mem_aln2sam(const mem_opt_t *opt, const bntseq_t *bns, kstring_t *str, bseq
|
|||
kputs(bns->anns[p->rid].name, str); kputc('\t', str); // RNAME
|
||||
kputl(p->pos + 1, str); kputc('\t', str); // POS
|
||||
kputw(p->mapq, str); kputc('\t', str); // MAPQ
|
||||
if (p->n_cigar) { // aligned
|
||||
for (i = 0; i < p->n_cigar; ++i) {
|
||||
int c = p->cigar[i]&0xf;
|
||||
if (!(opt->flag&MEM_F_SOFTCLIP) && !p->is_alt && (c == 3 || c == 4))
|
||||
c = which? 4 : 3; // use hard clipping for supplementary alignments
|
||||
kputw(p->cigar[i]>>4, str); kputc("MIDSH"[c], str);
|
||||
}
|
||||
} else kputc('*', str); // having a coordinate but unaligned (e.g. when copy_mate is true)
|
||||
add_cigar(opt, p, str, which);
|
||||
} else kputsn("*\t0\t0\t*", 7, str); // without coordinte
|
||||
kputc('\t', str);
|
||||
|
||||
|
|
@ -899,6 +905,7 @@ void mem_aln2sam(const mem_opt_t *opt, const bntseq_t *bns, kstring_t *str, bseq
|
|||
kputsn("\tNM:i:", 6, str); kputw(p->NM, str);
|
||||
kputsn("\tMD:Z:", 6, str); kputs((char*)(p->cigar + p->n_cigar), str);
|
||||
}
|
||||
if (m->n_cigar) { kputsn("\tMC:Z:", 6, str); add_cigar(opt, m, str, which); }
|
||||
if (p->score >= 0) { kputsn("\tAS:i:", 6, str); kputw(p->score, str); }
|
||||
if (p->sub >= 0) { kputsn("\tXS:i:", 6, str); kputw(p->sub, str); }
|
||||
if (bwa_rg_id[0]) { kputsn("\tRG:Z:", 6, str); kputs(bwa_rg_id, str); }
|
||||
|
|
|
|||
Loading…
Reference in New Issue