diff --git a/align.c b/align.c index 6eb5919..30fb02a 100644 --- a/align.c +++ b/align.c @@ -63,9 +63,8 @@ static void mm_append_cigar(mm_reg1_t *r, uint32_t n_cigar, uint32_t *cigar) // if (r->p == 0) { uint32_t capacity = n_cigar + sizeof(mm_extra_t); kroundup32(capacity); - r->p = (mm_extra_t*)malloc(capacity * 4); - r->p->n_cigar = 0, r->p->capacity = capacity; - r->p->n_diff = r->p->n_ambi = 0; + r->p = (mm_extra_t*)calloc(capacity, 4); + r->p->capacity = capacity; } else if (r->p->n_cigar + n_cigar + sizeof(mm_extra_t) > r->p->capacity) { r->p->capacity = r->p->n_cigar + n_cigar + sizeof(mm_extra_t); kroundup32(r->p->capacity); diff --git a/map.c b/map.c index 9310ec8..a8c6854 100644 --- a/map.c +++ b/map.c @@ -386,7 +386,12 @@ static void *worker_pipeline(void *shared, int step, void *in) else printf("\t%d\t%d\t255", r->score, r->re - r->rs > r->qe - r->qs? r->re - r->rs : r->qe - r->qs); printf("\tcm:i:%d", r->cnt); if (r->parent == j) printf("\tss:i:%d", r->subsc); - if (r->p) printf("\tNM:i:%d\tAS:i:%d\tnn:i:%d", r->p->n_diff, r->p->score, r->p->n_ambi); + if (r->p) { + uint32_t k; + printf("\tNM:i:%d\tAS:i:%d\tnn:i:%d\tcg:Z:", r->p->n_diff, r->p->score, r->p->n_ambi); + for (k = 0; k < r->p->n_cigar; ++k) + printf("%d%c", r->p->cigar[k]>>4, "MID"[r->p->cigar[k]&0xf]); + } putchar('\n'); free(r->p); }