Update position hash table

This commit is contained in:
Haoyu Cheng
2019-05-14 17:02:03 -04:00
parent df18b5af76
commit 45355a1103
17 changed files with 878 additions and 120 deletions
+76 -5
View File
@@ -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)