- // do alignment; this takes most of computing time for indel calling
- sc = ka_global_score((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]),
- (uint8_t*)query, qend - qbeg, &ap);
- score[K*n_types + t] = -sc;
+ { // do alignment; this is the bottleneck
+ const uint8_t *qual = bam1_qual(p->b), *bq;
+ uint8_t *qq = 0;
+ qq = calloc(qend - qbeg, 1);
+ bq = (uint8_t*)bam_aux_get(p->b, "BQ");
+ if (bq) ++bq;
+ for (l = qbeg; l < qend; ++l)
+ qq[l - qbeg] = bq? qual[l] + (bq[l] - 33) : qual[l];
+ sc = kpa_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]),
+ (uint8_t*)query, qend - qbeg, qq, &ap, 0, 0);
+ score[K*n_types + t] = sc;
+ free(qq);
+ }