diff --git a/.vscode/ipch/4eee59091dc293a3/PROCESS_READ.ipch b/.vscode/ipch/4eee59091dc293a3/PROCESS_READ.ipch index 8c78979..11f3e3e 100644 Binary files a/.vscode/ipch/4eee59091dc293a3/PROCESS_READ.ipch and b/.vscode/ipch/4eee59091dc293a3/PROCESS_READ.ipch differ diff --git a/.vscode/ipch/b49c1e8b711f08aa/HASH_TABLE.ipch b/.vscode/ipch/b49c1e8b711f08aa/HASH_TABLE.ipch index b48acd6..799bcc0 100644 Binary files a/.vscode/ipch/b49c1e8b711f08aa/HASH_TABLE.ipch and b/.vscode/ipch/b49c1e8b711f08aa/HASH_TABLE.ipch differ diff --git a/.vscode/ipch/c0e71cfe49f0fe81/ASSEMBLY.ipch b/.vscode/ipch/c0e71cfe49f0fe81/ASSEMBLY.ipch index 1b0ec93..08d61ef 100644 Binary files a/.vscode/ipch/c0e71cfe49f0fe81/ASSEMBLY.ipch and b/.vscode/ipch/c0e71cfe49f0fe81/ASSEMBLY.ipch differ diff --git a/.vscode/ipch/f2b98741f94c3e10/MAIN.ipch b/.vscode/ipch/f2b98741f94c3e10/MAIN.ipch index ea20ef0..14984c6 100644 Binary files a/.vscode/ipch/f2b98741f94c3e10/MAIN.ipch and b/.vscode/ipch/f2b98741f94c3e10/MAIN.ipch differ diff --git a/Assembly.cpp b/Assembly.cpp index abc8b48..ec040d4 100644 --- a/Assembly.cpp +++ b/Assembly.cpp @@ -400,18 +400,29 @@ void Build_hash_table_multiple_thr() { write_Total_Pos_Table(&PCB, read_file_name); destory_Total_Pos_Table(&PCB); - load_Total_Pos_Table(&PCB, read_file_name); + ///load_Total_Pos_Table(&PCB, read_file_name); write_All_reads(&R_INF, read_file_name); destory_All_reads(&R_INF); - load_All_reads(&R_INF, read_file_name); + ///load_All_reads(&R_INF, read_file_name); } } - +int load_pre_cauculated_index() +{ + if(load_Total_Pos_Table(&PCB, read_file_name) && load_All_reads(&R_INF, read_file_name)) + { + return 1; + } + else + { + return 0; + } + +} /********************************for debug***************************************/ @@ -508,15 +519,18 @@ void verify_Position_hash_table() while (get_read(seq)) { + if (seq->seq.l != Get_READ_LENGTH(R_INF, read_number)) { fprintf(stderr, "seq error\n"); } + recover_UC_Read(&g_read, &R_INF, read_number); + if(memcmp(seq->seq.s, g_read.seq, seq->seq.l)) { fprintf(stderr, "\nseq error ID: %llu, length: %llu\n",read_number, seq->seq.l); @@ -536,7 +550,6 @@ void verify_Position_hash_table() } - init_HPC_seq(&HPC_read, seq->seq.s, seq->seq.l); init_Hash_code(&k_code); @@ -545,6 +558,8 @@ void verify_Position_hash_table() while ((code = get_HPC_code(&HPC_read)) != 6) { + + if(code < 4) { k_mer_append(&k_code,code,k_mer_length); @@ -552,14 +567,17 @@ void verify_Position_hash_table() if (avalible_k>=k_mer_length) { - uint64_t count1 = get_Total_Count_Table(&TCB, &k_code, k_mer_length); + ///uint64_t count1 = get_Total_Count_Table(&TCB, &k_code, k_mer_length); uint64_t count2 = count_Total_Pos_Table(&PCB, &k_code, k_mer_length); + /** if(count1>=k_mer_min_freq && count1<= k_mer_max_freq && count1!=count2) { fprintf(stderr, "count1: %lld\n",count1); fprintf(stderr, "count2: %lld\n",count2); } - + **/ + + if(locate_Total_Pos_Table(&PCB, &k_code, &list, k_mer_length, &sub_ID) == count2) { diff --git a/Assembly.h b/Assembly.h index eae139c..7bde308 100644 --- a/Assembly.h +++ b/Assembly.h @@ -8,6 +8,7 @@ void Counting_multiple_thr(); void Build_hash_table_multiple_thr(); +int load_pre_cauculated_index(); /********************************for debug***************************************/ void Verify_Counting(); diff --git a/Hash_Table.cpp b/Hash_Table.cpp index 48490ba..69f1bf7 100644 --- a/Hash_Table.cpp +++ b/Hash_Table.cpp @@ -131,12 +131,17 @@ void write_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name) } -void load_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name) +int load_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name) { fprintf(stdout, "Loading index to disk ...... \n"); char* index_name = (char*)malloc(strlen(read_file_name)+5); sprintf(index_name, "%s.idx", read_file_name); FILE* fp = fopen(index_name, "r"); + if (!fp) + { + return 0; + } + fread(&TCB->prefix_bits, sizeof(TCB->prefix_bits), 1, fp); fread(&TCB->suffix_bits, sizeof(TCB->suffix_bits), 1, fp); @@ -184,6 +189,7 @@ void load_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name) fclose(fp); fprintf(stdout, "Index has been loaded.\n"); + return 1; } diff --git a/Hash_Table.h b/Hash_Table.h index 30b5b6c..929b866 100644 --- a/Hash_Table.h +++ b/Hash_Table.h @@ -294,7 +294,7 @@ void init_Count_Table(Count_Table** table); void init_Pos_Table(Count_Table** pre_table, Pos_Table** table); void destory_Total_Pos_Table(Total_Pos_Table* TCB); void write_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name); -void load_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name); +int load_Total_Pos_Table(Total_Pos_Table* TCB, char* read_file_name); diff --git a/Process_Read.cpp b/Process_Read.cpp index f70ae6d..eafa1fe 100644 --- a/Process_Read.cpp +++ b/Process_Read.cpp @@ -107,12 +107,18 @@ void write_All_reads(All_reads* r, char* read_file_name) -void load_All_reads(All_reads* r, char* read_file_name) +int load_All_reads(All_reads* r, char* read_file_name) { fprintf(stdout, "Loading reads to disk ...... \n"); char* index_name = (char*)malloc(strlen(read_file_name)+5); sprintf(index_name, "%s.bin", read_file_name); FILE* fp = fopen(index_name, "r"); + if (!fp) + { + return 0; + } + + fread(&r->index_size, sizeof(r->index_size), 1, fp); fread(&r->name_index_size, sizeof(r->name_index_size), 1, fp); fread(&r->total_reads, sizeof(r->total_reads), 1, fp); @@ -162,6 +168,8 @@ void load_All_reads(All_reads* r, char* read_file_name) free(index_name); fclose(fp); fprintf(stdout, "Reads has been loaded.\n"); + + return 1; } diff --git a/Process_Read.h b/Process_Read.h index 22ea009..da75bf0 100644 --- a/Process_Read.h +++ b/Process_Read.h @@ -111,7 +111,7 @@ void init_UC_Read(UC_Read* r); void recover_UC_Read(UC_Read* r, All_reads* R_INF, uint64_t ID); void reverse_complement(char* pattern, uint64_t length); void write_All_reads(All_reads* r, char* read_file_name); -void load_All_reads(All_reads* r, char* read_file_name); +int load_All_reads(All_reads* r, char* read_file_name); void destory_All_reads(All_reads* r); void Counting_block(); diff --git a/main.cpp b/main.cpp index 971d529..ce53b95 100644 --- a/main.cpp +++ b/main.cpp @@ -21,20 +21,26 @@ int main(int argc, char *argv[]) if (!CommandLine_process(argc, argv)) return 1; - ///init_kseq(read_file_name); fprintf(stdout, "k-mer length: %d\n",k_mer_length); - ///Counting(); - Counting_multiple_thr(); + if (load_index_from_disk && load_pre_cauculated_index()) + { + ; + } + else + { + Counting_multiple_thr(); - Build_hash_table_multiple_thr(); + Build_hash_table_multiple_thr(); + } + + + ///verify_Position_hash_table(); - ///destory_kseq(); - ///debug_Counting(); return 1;