mirror of
https://github.com/chhylp123/hifiasm.git
synced 2026-09-30 13:08:12 +08:00
new realignment
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@
|
||||
#include <pthread.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define HA_VERSION "0.16.4-r390"
|
||||
#define HA_VERSION "0.16.4-r393"
|
||||
|
||||
#define VERBOSE 0
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "horder.h"
|
||||
#include "inter.h"
|
||||
#include "gfa_ut.h"
|
||||
#include "assert.h"
|
||||
|
||||
|
||||
uint32_t debug_purge_dup = 0;
|
||||
@@ -8261,6 +8262,7 @@ void update_ug_ou(ma_ug_t *ug, asg_t *sg)
|
||||
for (i = 0; i < nv; i++) {
|
||||
if(av[i].v == rw) break;
|
||||
}
|
||||
assert(i < nv);
|
||||
ue->ou = av[i].ou;
|
||||
}
|
||||
|
||||
@@ -13353,6 +13355,7 @@ uint32_t test_dbug(ma_ug_t* ug, FILE* fp)
|
||||
ma_utg_t ua, *ub = NULL; memset(&ua, 0, sizeof(ua));
|
||||
f_flag = fread(&tt, sizeof(tt), 1, fp);
|
||||
if(f_flag == 0 || tt != ug->u.n) goto DES;
|
||||
|
||||
for (i = 0; i < tt; i++)
|
||||
{
|
||||
ub = &(ug->u.a[i]);
|
||||
|
||||
+55
-4
@@ -1162,11 +1162,11 @@ void append_ul_t(all_ul_t *x, uint64_t *rid, char* id, int64_t id_l, char* str,
|
||||
if((z->tn&((uint32_t)(0x80000000)))) {
|
||||
mine = MIN(et, ((int64_t)z->qe)); maxs = MAX(st, ((int64_t)z->qs));
|
||||
ovlp = mine - maxs;
|
||||
|
||||
if(ovlp < 0) bl -= ovlp;
|
||||
if(save_bases && ovlp < 0) {///push original bases
|
||||
kv_pushp(uc_block_t, p->bb, &b);
|
||||
b->hid = 0/**x->mm**/; b->rev = 0; b->base = 1; b->pchain = 0; b->el = 0;
|
||||
b->qe = maxs; b->qs = b->qe + ovlp; bl += (b->qe-b->qs);
|
||||
b->qe = maxs; b->qs = b->qe + ovlp; //bl += (b->qe-b->qs);
|
||||
o_l = (b->qs >= UL_FLANK?UL_FLANK:b->qs);
|
||||
o_r = ((str_l-b->qe)>=UL_FLANK?UL_FLANK:(str_l-b->qe));
|
||||
b->pidx = b->pdis = b->aidx = (uint32_t)-1;
|
||||
@@ -1192,11 +1192,12 @@ void append_ul_t(all_ul_t *x, uint64_t *rid, char* id, int64_t id_l, char* str,
|
||||
en++; z->qn = p->bb.n - 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(st > 0) bl += st;
|
||||
if(save_bases && st > 0) {///push original bases
|
||||
kv_pushp(uc_block_t, p->bb, &b);
|
||||
b->hid = 0/**x->mm**/; b->rev = 0; b->base = 1; b->pchain = 0; b->el = 0;
|
||||
b->qe = st; b->qs = 0; bl += (b->qe-b->qs);
|
||||
b->qe = st; b->qs = 0; //bl += (b->qe-b->qs);
|
||||
o_l = (b->qs >= UL_FLANK?UL_FLANK:b->qs);
|
||||
o_r = ((str_l-b->qe)>=UL_FLANK?UL_FLANK:(str_l-b->qe));
|
||||
b->pidx = b->pdis = b->aidx = (uint32_t)-1;
|
||||
@@ -1815,4 +1816,54 @@ void debug_retrieve_rc_sub(const ug_opt_t *uopt, all_ul_t *ref, const All_reads
|
||||
|
||||
destory_UC_Read(&f); destory_UC_Read(&r);
|
||||
kv_destroy(ss);
|
||||
}
|
||||
|
||||
|
||||
void write_compress_base_disk(FILE *fp, uint64_t ul_rid, char *str, uint32_t len, ul_vec_t *buf)
|
||||
{
|
||||
buf->N_site.n = buf->bb.n = 0; buf->rlen = len; buf->r_base.n = B4L(len);
|
||||
kv_resize(uint8_t, buf->r_base, buf->r_base.n);
|
||||
ha_encode_base(buf->r_base.a, str, len, &(buf->N_site), 0);
|
||||
|
||||
fwrite(&ul_rid, sizeof(ul_rid), 1, fp);
|
||||
fwrite(&len, sizeof(len), 1, fp);
|
||||
fwrite(&buf->N_site.n, sizeof(buf->N_site.n), 1, fp);
|
||||
fwrite(buf->N_site.a, sizeof((*buf->N_site.a)), buf->N_site.n, fp);
|
||||
fwrite(buf->r_base.a, sizeof((*buf->r_base.a)), buf->r_base.n, fp);
|
||||
}
|
||||
|
||||
int64_t load_compress_base_disk(FILE *fp, uint64_t *ul_rid, char *dest, uint32_t *len, ul_vec_t *buf)
|
||||
{
|
||||
fread(ul_rid, sizeof((*ul_rid)), 1, fp);
|
||||
if(feof(fp)) return 0;
|
||||
fread(len, sizeof((*len)), 1, fp);
|
||||
fread(&buf->N_site.n, sizeof(buf->N_site.n), 1, fp);
|
||||
kv_resize(uint32_t, buf->N_site, buf->N_site.n);
|
||||
fread(buf->N_site.a, sizeof((*buf->N_site.a)), buf->N_site.n, fp);
|
||||
buf->r_base.n = B4L((*len)); kv_resize(uint8_t, buf->r_base, buf->r_base.n);
|
||||
fread(buf->r_base.a, sizeof((*buf->r_base.a)), buf->r_base.n, fp);
|
||||
|
||||
int64_t ssp, sep, sl, offset, begLen, tailLen, a_n, src_i, des_i, i;
|
||||
ssp = 0; sep = (*len); sl = sep - ssp;
|
||||
offset = ssp&3; begLen = 4-offset;
|
||||
if(begLen > sl) begLen = sl;
|
||||
tailLen = (sl-begLen)&3;
|
||||
a_n = (sl - begLen - tailLen)>>2;
|
||||
|
||||
src_i = ssp; i = 0; des_i = 0;
|
||||
if(begLen > 0) {
|
||||
memcpy(dest+des_i, bit_t_seq_table[buf->r_base.a[src_i>>2]]+offset, begLen);
|
||||
des_i += begLen; src_i += begLen;
|
||||
}
|
||||
|
||||
for (i = 0; i < a_n; i++) {
|
||||
memcpy(dest+des_i, bit_t_seq_table[buf->r_base.a[src_i>>2]], 4);
|
||||
des_i += 4; src_i += 4;
|
||||
}
|
||||
|
||||
if(tailLen > 0) {
|
||||
memcpy(dest+des_i, bit_t_seq_table[buf->r_base.a[src_i>>2]], tailLen);
|
||||
des_i += tailLen; src_i += tailLen;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
+3
-1
@@ -167,7 +167,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
uint32_t *a;
|
||||
ssize_t n ,m;
|
||||
size_t n, m;
|
||||
} N_t;
|
||||
|
||||
typedef struct
|
||||
@@ -232,5 +232,7 @@ uint32_t retrieve_u_cov(const ul_idx_t *ul, uint64_t id, uint8_t strand, uint64_
|
||||
uint64_t retrieve_u_cov_region(const ul_idx_t *ul, uint64_t id, uint8_t strand, uint64_t s, uint64_t e, int64_t *pi);
|
||||
uint64_t retrieve_r_cov_region(const ul_idx_t *ul, uint64_t id, uint8_t strand, uint64_t s, uint64_t e, int64_t *pi);
|
||||
void append_ul_t_back(all_ul_t *x, uint64_t *rid, char* id, int64_t id_l, char* str, int64_t str_l, ul_ov_t *o, int64_t on, float p_chain_rate);
|
||||
void write_compress_base_disk(FILE *fp, uint64_t ul_rid, char *str, uint32_t len, ul_vec_t *buf);
|
||||
int64_t load_compress_base_disk(FILE *fp, uint64_t *ul_rid, char *dest, uint32_t *len, ul_vec_t *buf);
|
||||
|
||||
#endif
|
||||
|
||||
+8
-2
@@ -1411,9 +1411,15 @@ double ou_drop_rate, int64_t max_tip, bub_label_t *b_mask_t, int32_t is_ou, int3
|
||||
// flat_bubbles(sg, ruIndex->is_het); free(ruIndex->is_het); ruIndex->is_het = NULL;
|
||||
flat_soma_v(sg, src, rI);
|
||||
|
||||
///note: although the above functions will not change the UL part, but it will change the read graph
|
||||
///so it is necessary to run update_sg_uo
|
||||
if(is_ou) {
|
||||
// hic_clean(sg);
|
||||
// ul_realignment(uopt, sg);
|
||||
update_sg_uo(sg, src);
|
||||
}
|
||||
|
||||
if(is_ou) {
|
||||
hic_clean(sg);
|
||||
ul_realignment(uopt, sg);
|
||||
// if(ul_refine_alignment(uopt, sg)) update_sg_uo(sg, src);
|
||||
}
|
||||
// print_node(sg, 17078); //print_node(sg, 8311); print_node(sg, 8294);
|
||||
|
||||
@@ -1486,7 +1486,7 @@ int load_pt_index(void **r_flt_tab, ha_pt_t **r_ha_idx, All_reads* r, hifiasm_op
|
||||
|
||||
|
||||
|
||||
int uidx_write(void *flt_tab, ha_pt_t *ha_idx, char* file_name)
|
||||
int uidx_write(void *flt_tab, ha_pt_t *ha_idx, char* file_name, ma_ug_t *ug)
|
||||
{
|
||||
char* gfa_name = (char*)malloc(strlen(file_name)+25);
|
||||
sprintf(gfa_name, "%s.uidx.bin", file_name);
|
||||
@@ -1496,6 +1496,8 @@ int uidx_write(void *flt_tab, ha_pt_t *ha_idx, char* file_name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(ug) write_dbug(ug, fp);
|
||||
|
||||
yak_ft_t *ha_flt_tab = (yak_ft_t*)flt_tab;
|
||||
|
||||
if(ha_flt_tab)
|
||||
@@ -1529,7 +1531,7 @@ int uidx_write(void *flt_tab, ha_pt_t *ha_idx, char* file_name)
|
||||
}
|
||||
|
||||
|
||||
int uidx_load(void **r_flt_tab, ha_pt_t **r_ha_idx, char* file_name)
|
||||
int uidx_load(void **r_flt_tab, ha_pt_t **r_ha_idx, char* file_name, ma_ug_t *ug)
|
||||
{
|
||||
char* gfa_name = (char*)malloc(strlen(file_name)+25);
|
||||
sprintf(gfa_name, "%s.uidx.bin", file_name);
|
||||
@@ -1539,6 +1541,12 @@ int uidx_load(void **r_flt_tab, ha_pt_t **r_ha_idx, char* file_name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(ug && (!test_dbug(ug, fp))) {
|
||||
fprintf(stderr, "[M::%s] Renew UL Index\n", __func__);
|
||||
free(gfa_name); fclose(fp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ha_pt_t *ha_idx = NULL;
|
||||
char mode = 0;
|
||||
int f_flag = 0, i;
|
||||
|
||||
@@ -88,8 +88,8 @@ const int ha_pt_cnt(const ha_pt_t *h, uint64_t hash);
|
||||
|
||||
int write_pt_index(void *flt_tab, ha_pt_t *ha_idx, All_reads* r, hifiasm_opt_t* opt, char* file_name);
|
||||
int load_pt_index(void **r_flt_tab, ha_pt_t **r_ha_idx, All_reads* r, hifiasm_opt_t* opt, char* file_name);
|
||||
int uidx_write(void *flt_tab, ha_pt_t *ha_idx, char* file_name);
|
||||
int uidx_load(void **r_flt_tab, ha_pt_t **r_ha_idx, char* file_name);
|
||||
int uidx_write(void *flt_tab, ha_pt_t *ha_idx, char* file_name, ma_ug_t *ug);
|
||||
int uidx_load(void **r_flt_tab, ha_pt_t **r_ha_idx, char* file_name, ma_ug_t *ug);
|
||||
int write_ct_index(void *ct_idx, char* file_name);
|
||||
int load_ct_index(void **ct_idx, char* file_name);
|
||||
int query_ct_index(void* ct_idx, uint64_t hash);
|
||||
|
||||
Reference in New Issue
Block a user