new realignment

This commit is contained in:
chhylp123
2022-05-03 00:59:24 -04:00
parent fdf24d5589
commit 8138941a26
8 changed files with 728 additions and 116 deletions
+1 -1
View File
@@ -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
+3
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+10 -2
View File
@@ -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;
+2 -2
View File
@@ -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);
+646 -104
View File
File diff suppressed because it is too large Load Diff