r512: option to filter poorly aligned reads

This commit is contained in:
Heng Li
2017-10-16 10:38:22 -04:00
parent 858213d513
commit e6f525edaf
8 changed files with 131 additions and 38 deletions
+22
View File
@@ -42,6 +42,26 @@ void mm_select_sub_multi(void *km, float pri_ratio, float pri1, float pri2, int
}
}
void mm_set_pe_thru(const int *qlens, int *n_regs, mm_reg1_t **regs)
{
int s, i, n_pri[2], pri[2];
n_pri[0] = n_pri[1] = 0;
pri[0] = pri[1] = -1;
for (s = 0; s < 2; ++s)
for (i = 0; i < n_regs[s]; ++i)
if (regs[s][i].id == regs[s][i].parent)
++n_pri[s], pri[s] = i;
if (n_pri[0] == 1 && n_pri[1] == 1) {
mm_reg1_t *p = &regs[0][pri[0]];
mm_reg1_t *q = &regs[1][pri[1]];
if (p->rid == q->rid && p->rev == q->rev && abs(p->rs - q->rs) < 3 && abs(p->re - p->re) < 3
&& ((p->qs == 0 && qlens[1] - q->qe == 0) || (q->qs == 0 && qlens[0] - p->qe == 0)))
{
p->pe_thru = q->pe_thru = 1;
}
}
}
#include "ksort.h"
typedef struct {
@@ -152,4 +172,6 @@ void mm_pair(void *km, int max_gap_ref, int pe_bonus, int sub_diff, int match_sc
kfree(km, a);
kfree(km, sc.a);
mm_set_pe_thru(qlens, n_regs, regs);
}