From 221f82f662dd770a17d1bd2181de46b8c3b3fdfd Mon Sep 17 00:00:00 2001 From: Heng Li Date: Wed, 15 Sep 2010 02:05:32 +0000 Subject: [PATCH] fixed a bug in realignment --- bam_md.c | 6 ++++-- bam_plcmd.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bam_md.c b/bam_md.c index a4f4e01..fb46732 100644 --- a/bam_md.c +++ b/bam_md.c @@ -150,8 +150,10 @@ int bam_realn(bam1_t *b, const char *ref) kroundup32(b->m_data); b->data = realloc(b->data, b->m_data); } - if (n_cigar != (int)c->n_cigar) // move data - memmove(b->data + c->l_qname + 4 * n_cigar, bam1_seq(b), b->data_len - c->l_qseq - 4 * c->n_cigar); + if (n_cigar != (int)c->n_cigar) { // move data + memmove(b->data + c->l_qname + 4 * n_cigar, bam1_seq(b), b->data_len - c->l_qname - 4 * c->n_cigar); + b->data_len += 4 * (n_cigar - (int)c->n_cigar); + } memcpy(bam1_cigar(b), cigar, n_cigar * 4); c->n_cigar = n_cigar; free(s_ref); free(s_read); free(cigar); diff --git a/bam_plcmd.c b/bam_plcmd.c index 1205e10..cdbf67d 100644 --- a/bam_plcmd.c +++ b/bam_plcmd.c @@ -490,7 +490,8 @@ static int mplp_func(void *data, bam1_t *b) cond = 0; ret = ma->iter? bam_iter_read(ma->fp, ma->iter, b) : bam_read1(ma->fp, b); if (ret < 0) break; - if (b->core.qual < ma->min_mq) cond = 1; + if (b->core.flag&BAM_FUNMAP) cond = 1; + else if (b->core.qual < ma->min_mq) cond = 1; else if ((ma->flag&MPLP_NO_ORPHAN) && (b->core.flag&1) && !(b->core.flag&2)) cond = 1; if (ma->ref && !cond && (ma->flag&MPLP_REALN)) bam_realn(b, ma->ref); } while (cond); -- 2.39.2