From 47e9d76ca1fc3e2cecd5c42ece5a42d0e93fd447 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Thu, 14 Sep 2017 10:46:14 -0400 Subject: [PATCH] further mapq tuning --- hit.c | 9 ++++----- main.c | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/hit.c b/hit.c index d1a81cb..9acb5e4 100644 --- a/hit.c +++ b/hit.c @@ -299,14 +299,13 @@ void mm_set_mapq(int n_regs, mm_reg1_t *regs, int min_chain_sc, int n_rep_mini) r->mapq = 0; } else if (r->parent == r->id) { int mapq, subsc; - float pen_cm = 1.0f; - if (r->cnt < 10) - pen_cm = 0.1f * r->cnt * (r->cnt > n_rep_mini? 1.0f : (1.0f + r->cnt) / (1.0f + n_rep_mini)); + float pen_s1 = r->score > 100? 1.0f : 0.01f * r->score; + float pen_cm = r->cnt > 10? 1.0f : 0.1f * r->cnt; + pen_cm = pen_s1 < pen_cm? pen_s1 : pen_cm; subsc = r->subsc > min_chain_sc? r->subsc : min_chain_sc; if (r->p && r->p->dp_max2 > 0 && r->p->dp_max > 0) { float identity = (float)(r->p->blen - r->p->n_diff - r->p->n_ambi) / (r->p->blen - r->p->n_ambi); - float chain_ratio = subsc > r->score? (float)subsc / r->score : 1.0f; - mapq = (int)(identity * pen_cm * q_coef * (1. - (float)chain_ratio * r->p->dp_max2 / r->p->dp_max) * logf(r->score)); + mapq = (int)(identity * pen_cm * q_coef * (1. - (float)r->p->dp_max2 * subsc / r->p->dp_max / r->score) * logf(r->score)); } else mapq = (int)(pen_cm * q_coef * (1. - (float)subsc / r->score) * logf(r->score)); mapq -= (int)(4.343 * log(r->n_sub + 1) + .499); mapq = mapq > 0? mapq : 0; diff --git a/main.c b/main.c index 9738d1d..2653dae 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ #include "mmpriv.h" #include "getopt.h" -#define MM_VERSION "2.1.1-r362-dirty" +#define MM_VERSION "2.1.1-r363-dirty" #ifdef __linux__ #include