mirror of
https://github.com/chhylp123/hifiasm.git
synced 2026-10-01 06:48:11 +08:00
Update position hash table
This commit is contained in:
+76
-5
@@ -9,6 +9,7 @@
|
||||
gzFile fp;
|
||||
kseq_t *seq;
|
||||
R_buffer RDB;
|
||||
static uint64_t total_reads;
|
||||
|
||||
pthread_mutex_t i_readinputMutex;
|
||||
pthread_mutex_t i_queueMutex;
|
||||
@@ -20,6 +21,52 @@ pthread_cond_t i_readinputstallCond;
|
||||
pthread_mutex_t i_doneMutex;
|
||||
|
||||
|
||||
void init_All_reads(All_reads* r)
|
||||
{
|
||||
r->index_size = READ_INIT_NUMBER;
|
||||
r->index = (uint64_t*)malloc(sizeof(uint64_t)*r->index_size);
|
||||
r->index[0] = 0;
|
||||
r->read = NULL;
|
||||
r->total_reads_bases = 0;
|
||||
|
||||
|
||||
r->name_index_size = READ_INIT_NUMBER;
|
||||
r->name_index = (uint64_t*)malloc(sizeof(uint64_t)*r->name_index_size);
|
||||
r->name_index[0] = 0;
|
||||
r->name = NULL;
|
||||
r->total_name_length = 0;
|
||||
|
||||
r->total_reads = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
inline void insert_read(All_reads* r, kstring_t* read, kstring_t* name)
|
||||
{
|
||||
r->total_reads++;
|
||||
r->total_reads_bases = r->total_reads_bases + read->l;
|
||||
r->total_name_length = r->total_name_length + name->l;
|
||||
|
||||
///必须要+1
|
||||
if (r->index_size < r->total_reads + 2)
|
||||
{
|
||||
r->index_size = r->index_size * 2 + 2;
|
||||
r->index = (uint64_t*)realloc(r->index,sizeof(uint64_t)*(r->index_size));
|
||||
|
||||
r->name_index_size = r->name_index_size * 2 + 2;
|
||||
r->name_index = (uint64_t*)realloc(r->name_index,sizeof(uint64_t)*(r->name_index_size));
|
||||
}
|
||||
r->index[r->total_reads] = r->index[r->total_reads-1] + read->l;
|
||||
r->name_index[r->total_reads] = r->name_index[r->total_reads-1] + name->l;
|
||||
|
||||
}
|
||||
|
||||
void malloc_All_reads(All_reads* r)
|
||||
{
|
||||
r->read = (char*)malloc(sizeof(char)*r->total_reads_bases);
|
||||
r->name = (char*)malloc(sizeof(char)*r->total_name_length);
|
||||
}
|
||||
|
||||
void init_kseq(char* file)
|
||||
{
|
||||
fp = gzopen(file, "r");
|
||||
@@ -69,7 +116,11 @@ void init_R_buffer_block(R_buffer_block* curr_sub_block)
|
||||
curr_sub_block->num = 0;
|
||||
}
|
||||
|
||||
|
||||
void clear_R_buffer()
|
||||
{
|
||||
RDB.all_read_end = 0;
|
||||
RDB.num = 0;
|
||||
}
|
||||
void init_R_buffer(int thread_num)
|
||||
{
|
||||
RDB.all_read_end = 0;
|
||||
@@ -111,7 +162,7 @@ void destory_R_buffer()
|
||||
|
||||
|
||||
inline void load_read_block(R_buffer_block* read_batch, int batch_read_size,
|
||||
int* return_file_flag)
|
||||
int* return_file_flag, int is_insert)
|
||||
{
|
||||
int inner_i = 0;
|
||||
int file_flag = 1;
|
||||
@@ -126,6 +177,14 @@ inline void load_read_block(R_buffer_block* read_batch, int batch_read_size,
|
||||
|
||||
if (file_flag == 1)
|
||||
{
|
||||
read_batch->read[inner_i].ID = total_reads;
|
||||
total_reads++;
|
||||
|
||||
if (is_insert)
|
||||
{
|
||||
insert_read(&R_INF, &read_batch->read[inner_i].seq, &read_batch->read[inner_i].name);
|
||||
}
|
||||
|
||||
inner_i++;
|
||||
}
|
||||
else if (file_flag == 0)
|
||||
@@ -184,8 +243,13 @@ inline void pop_R_block(R_buffer_block* curr_sub_block)
|
||||
}
|
||||
|
||||
|
||||
void* input_reads_muti_threads(void*)
|
||||
|
||||
void* input_reads_muti_threads(void* arg)
|
||||
{
|
||||
int is_insert = *((int*)arg);
|
||||
|
||||
|
||||
total_reads = 0;
|
||||
|
||||
|
||||
int i = 0;
|
||||
@@ -202,7 +266,7 @@ void* input_reads_muti_threads(void*)
|
||||
|
||||
|
||||
|
||||
load_read_block(&tmp_buf, RDB.block_inner_size, &file_flag);
|
||||
load_read_block(&tmp_buf, RDB.block_inner_size, &file_flag, is_insert);
|
||||
|
||||
if (file_flag == 0)
|
||||
{
|
||||
@@ -233,6 +297,13 @@ void* input_reads_muti_threads(void*)
|
||||
|
||||
destory_R_buffer_block(&tmp_buf);
|
||||
|
||||
fprintf(stdout, "total_reads: %llu\n",total_reads);
|
||||
///fprintf(stdout, "R_INF.total_reads: %llu\n",R_INF.total_reads);
|
||||
///fprintf(stdout, "R_INF.index[R_INF.total_reads]: %llu\n",R_INF.index[R_INF.total_reads]);
|
||||
fprintf(stdout, "R_INF.total_reads_bases: %llu\n",R_INF.total_reads_bases);
|
||||
///fprintf(stdout, "R_INF.name_index[R_INF.total_reads]: %llu\n",R_INF.name_index[R_INF.total_reads]);
|
||||
fprintf(stdout, "R_INF.total_name_length: %llu\n",R_INF.total_name_length);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -293,7 +364,7 @@ void Counting_block()
|
||||
|
||||
|
||||
load_read_block(&tmp_buf, RDB.block_inner_size,
|
||||
&file_flag);
|
||||
&file_flag, 0);
|
||||
|
||||
|
||||
if (file_flag == 0)
|
||||
|
||||
Reference in New Issue
Block a user