fixed a bug in chaining

This commit is contained in:
Heng Li 2017-06-06 14:33:43 -04:00
parent 6d4348db44
commit d816e48fce
3 changed files with 8 additions and 3 deletions

View File

@ -69,11 +69,15 @@ int mm_chain_dp(int match_len, int max_dist, int bw, int max_skip, int min_sc, i
if (t[i] == 0 && f[i] >= min_sc)
u[n_u++] = (uint64_t)f[i] << 32 | i;
radix_sort_64(u, u + n_u);
for (i = 0; i < n_u>>1; ++i) { // reverse, s.t. the highest scoring chain is the first
uint64_t t = u[i];
u[i] = u[n_u - 1], u[n_u - 1] = t;
}
// backtrack
memset(t, 0, n * 4);
v = (int32_t*)kmalloc(km, n * 4);
for (i = n_u - 1, n_v = k = 0; i >= 0; --i) { // starting from the highest score
for (i = n_v = k = 0; i < n_u; ++i) { // starting from the highest score
int32_t n_v0 = n_v;
j = (int32_t)u[i];
do {

View File

@ -63,6 +63,7 @@ void mm_idx_stat(const mm_idx_t *mi)
{
int i, n = 0, n1 = 0;
uint64_t sum = 0, len = 0;
fprintf(stderr, "[M::%s] kmer size: %d; skip: %d; is_HPC: %d; #seq: %d\n", __func__, mi->k, mi->w, mi->is_hpc, mi->n_seq);
for (i = 0; i < mi->n_seq; ++i)
len += mi->seq[i].len;
for (i = 0; i < 1<<mi->b; ++i)

4
main.c
View File

@ -94,11 +94,11 @@ int main(int argc, char *argv[])
if (w < 0) w = (int)(.6666667 * k + .499);
if (argc == optind) {
fprintf(stderr, "Usage: minimap2 [options] <target.fa> [query.fa] [...]\n");
fprintf(stderr, "Usage: minimap2 [options] <target.fa>|<target.idx> [query.fa] [...]\n");
fprintf(stderr, "Options:\n");
fprintf(stderr, " Indexing:\n");
fprintf(stderr, " -H use homopolymer-compressed k-mer\n");
fprintf(stderr, " -k INT k-mer size [%d]\n", k);
fprintf(stderr, " -k INT k-mer size (no larger than 28) [%d]\n", k);
fprintf(stderr, " -w INT minizer window size [{-k}*2/3]\n");
fprintf(stderr, " -I NUM split index for every ~NUM input bases [4G]\n");
fprintf(stderr, " -d FILE dump index to FILE []\n");