This commit is contained in:
Haoyu Cheng
2019-09-05 11:47:54 -04:00
parent d5327fe9ee
commit b57923d050
6 changed files with 876 additions and 137 deletions
+79 -13
View File
@@ -1158,6 +1158,8 @@ char* new_read, int new_length, int correct_base)
}
inline void push_cigar(Compressed_Cigar_record* records, long long ID, Cigar_record* input)
{
@@ -1304,13 +1306,20 @@ void* Overlap_calculate_heap_merge(void* arg)
haplotype_evdience_alloc hap;
InitHaplotypeEvdience(&hap);
Round2_alignment second_round;
init_Round2_alignment(&second_round);
for (i = thr_ID; i < R_INF.total_reads; i = i + thread_num)
{
clear_Cigar_record(&current_cigar);
clear_Round2_alignment(&second_round);
clear_Heap(&heap);
clear_Candidates_list(&l);
///clear_Candidates_list(&debug_l);
@@ -1445,14 +1454,19 @@ void* Overlap_calculate_heap_merge(void* arg)
///clear_Graph(&POA_Graph);
correct_overlap(&overlap_list, &R_INF, &g_read, &correct, &overlap_read, &POA_Graph,
&matched_overlap_0, &matched_overlap_1, &potiental_matched_overlap_0, &potiental_matched_overlap_1,
&current_cigar, &hap);
correct_overlap(&overlap_list, &R_INF, &g_read, &correct, &overlap_read, &POA_Graph,
&matched_overlap_0, &matched_overlap_1, &potiental_matched_overlap_0, &potiental_matched_overlap_1,
&current_cigar, &hap, &second_round);
num_read_base = num_read_base + g_read.length;
num_correct_base = num_correct_base + correct.corrected_base;
push_cigar(R_INF.cigars, i, &current_cigar);
push_cigar(R_INF.second_round_cigar, i, &(second_round.cigar));
/**
fprintf(stderr, "current_cigar.new_read_length: %d, second_round.cigar.new_read_length: %d\n",
current_cigar.new_read_length, second_round.cigar.new_read_length);
**/
/**
if(memcmp("m54334_180926_225337/39780640/ccs", Get_NAME(R_INF, i), Get_NAME_LENGTH(R_INF, i)) == 0)
@@ -1589,6 +1603,8 @@ void* Overlap_calculate_heap_merge(void* arg)
destoryHaplotypeEvdience(&hap);
destory_Round2_alignment(&second_round);
pthread_mutex_lock(&statistics);
total_matched_overlap_0 += matched_overlap_0;
@@ -1614,6 +1630,8 @@ void* Overlap_calculate_heap_merge(void* arg)
}
void* Save_corrected_reads(void* arg)
{
int thr_ID = *((int*)arg);
@@ -1621,20 +1639,31 @@ void* Save_corrected_reads(void* arg)
UC_Read g_read;
init_UC_Read(&g_read);
int new_read_size = 10000;
char* new_read = (char*)malloc(new_read_size);
int first_round_read_size = 10000;
char* first_round_read = (char*)malloc(first_round_read_size);
int second_round_read_size = 10000;
char* second_round_read = (char*)malloc(second_round_read_size);
Cigar_record cigar;
int new_read_length;
int first_round_read_length;
int second_round_read_length;
uint64_t N_occ;
char* new_read;
int new_read_length;
for (i = thr_ID; i < R_INF.total_reads; i = i + thread_num)
{
recover_UC_Read(&g_read, &R_INF, i);
if(R_INF.cigars[i].new_length>new_read_size)
/********************************1 round******************************/
if(R_INF.cigars[i].new_length > first_round_read_size)
{
new_read_size = R_INF.cigars[i].new_length;
new_read = (char*)realloc(new_read, new_read_size);
first_round_read_size = R_INF.cigars[i].new_length;
first_round_read = (char*)realloc(first_round_read, first_round_read_size);
}
cigar.length = R_INF.cigars[i].length;
@@ -1642,7 +1671,43 @@ void* Save_corrected_reads(void* arg)
cigar.record = R_INF.cigars[i].record;
cigar.lost_base = R_INF.cigars[i].lost_base;
get_corrected_read_from_cigar(&cigar, g_read.seq, g_read.length, new_read, &new_read_length);
get_corrected_read_from_cigar(&cigar, g_read.seq, g_read.length, first_round_read, &first_round_read_length);
/**
if(first_round_read_length != R_INF.cigars[i].new_length)
{
fprintf(stderr, "error\n");
}
**/
/********************************1 round******************************/
/********************************2 round******************************/
if(R_INF.second_round_cigar[i].new_length > second_round_read_size)
{
second_round_read_size = R_INF.second_round_cigar[i].new_length;
second_round_read = (char*)realloc(second_round_read, second_round_read_size);
}
cigar.length = R_INF.second_round_cigar[i].length;
cigar.lost_base_length = R_INF.second_round_cigar[i].lost_base_length;
cigar.record = R_INF.second_round_cigar[i].record;
cigar.lost_base = R_INF.second_round_cigar[i].lost_base;
get_corrected_read_from_cigar(&cigar, first_round_read, first_round_read_length,
second_round_read, &second_round_read_length);
/**
if(second_round_read_length != R_INF.second_round_cigar[i].new_length)
{
fprintf(stderr, "error\n");
}
**/
/********************************2 round******************************/
///new_read = first_round_read;
///new_read_length = first_round_read_length;
new_read = second_round_read;
new_read_length = second_round_read_length;
///need modification
reverse_complement(new_read, new_read_length);
@@ -1674,7 +1739,8 @@ void* Save_corrected_reads(void* arg)
}
destory_UC_Read(&g_read);
free(new_read);
free(first_round_read);
free(second_round_read);
free(arg);
}
+759 -110
View File
File diff suppressed because it is too large Load Diff
+20 -2
View File
@@ -6,7 +6,7 @@
#include "POA.h"
#include "Process_Read.h"
#define CORRECT_THRESHOLD 0.7
#define CORRECT_THRESHOLD 0.70
#define MIN_COVERAGE_THRESHOLD 4
#define CORRECT_INDEL_LENGTH 2
#define MISMATCH 1
@@ -335,6 +335,7 @@ typedef struct
{
char* corrected_read;
long long corrected_read_length;
long long last_boundary_length;
long long corrected_read_size;
long long corrected_base;
@@ -351,15 +352,31 @@ typedef struct
__m128i Peq_SSE[256];
} Correct_dumy;
typedef struct
{
Correct_dumy dumy;
Cigar_record cigar;
Cigar_record tmp_cigar;
long long obtained_cigar_length;
}
Round2_alignment;
void init_Round2_alignment(Round2_alignment* h);
void destory_Round2_alignment(Round2_alignment* h);
void clear_Round2_alignment(Round2_alignment* h);
void correct_overlap(overlap_region_alloc* overlap_list, All_reads* R_INF,
UC_Read* g_read, Correct_dumy* dumy, UC_Read* overlap_read, Graph* g,
long long* matched_overlap_0, long long* matched_overlap_1,
long long* potiental_matched_overlap_0, long long* potiental_matched_overlap_1,
Cigar_record* current_cigar, haplotype_evdience_alloc* hap);
Cigar_record* current_cigar, haplotype_evdience_alloc* hap,
Round2_alignment* second_round);
void init_Correct_dumy(Correct_dumy* list);
void destory_Correct_dumy(Correct_dumy* list);
void clear_Correct_dumy(Correct_dumy* list, overlap_region_alloc* overlap_list);
void clear_Correct_dumy_pure(Correct_dumy* list);
void pre_filter_by_nearby(k_mer_pos* new_n_list, k_mer_pos* old_n_list, uint64_t n_length, uint64_t n_end_pos, UC_Read* g_read,
All_reads* R_INF, Correct_dumy* dumy, uint64_t* new_n_length);
void pre_filter_by_nearby_single(k_mer_pos* new_n_list, k_mer_pos* old_n_list, uint64_t n_length, uint64_t n_end_pos, UC_Read* g_read,
@@ -372,6 +389,7 @@ void clear_Cigar_record(Cigar_record* dummy);
inline void add_new_cell_to_cigar_record(Cigar_record* dummy, uint32_t len, uint32_t type)
{
uint32_t tmp;
+3
View File
@@ -17,6 +17,9 @@ typedef khash_t(POS64) Pos_Table;
///#define THRESHOLD 14
#define WINDOW 375
#define WINDOW_BOUNDARY 150
///for one side, the first or last WINDOW_UNCORRECT_SINGLE_SIDE_BOUNDARY bases should not be corrected
#define WINDOW_UNCORRECT_SINGLE_SIDE_BOUNDARY 25
#define THRESHOLD 15
#define THRESHOLD_RATE 0.04
#define OVERLAP_THRESHOLD 0.9
+14 -12
View File
@@ -209,15 +209,16 @@ int load_All_reads(All_reads* r, char* read_file_name)
r->cigars = (Compressed_Cigar_record*)malloc(sizeof(Compressed_Cigar_record)*r->total_reads);
r->second_round_cigar = (Compressed_Cigar_record*)malloc(sizeof(Compressed_Cigar_record)*r->total_reads);
for (i = 0; i < r->total_reads; i++)
{
r->cigars[i].size = 0;
r->cigars[i].length = 0;
r->cigars[i].record = NULL;
r->second_round_cigar[i].size = r->cigars[i].size = 0;
r->second_round_cigar[i].length = r->cigars[i].length = 0;
r->second_round_cigar[i].record = r->cigars[i].record = NULL;
r->cigars[i].lost_base_size = 0;
r->cigars[i].lost_base_length = 0;
r->cigars[i].lost_base = NULL;
r->second_round_cigar[i].lost_base_size = r->cigars[i].lost_base_size = 0;
r->second_round_cigar[i].lost_base_length = r->cigars[i].lost_base_length = 0;
r->second_round_cigar[i].lost_base = r->cigars[i].lost_base = NULL;
}
@@ -277,15 +278,16 @@ void malloc_All_reads(All_reads* r)
}
r->cigars = (Compressed_Cigar_record*)malloc(sizeof(Compressed_Cigar_record)*r->total_reads);
r->second_round_cigar = (Compressed_Cigar_record*)malloc(sizeof(Compressed_Cigar_record)*r->total_reads);
for (i = 0; i < r->total_reads; i++)
{
r->cigars[i].size = 0;
r->cigars[i].length = 0;
r->cigars[i].record = NULL;
r->second_round_cigar[i].size = r->cigars[i].size = 0;
r->second_round_cigar[i].length = r->cigars[i].length = 0;
r->second_round_cigar[i].record = r->cigars[i].record = NULL;
r->cigars[i].lost_base_size = 0;
r->cigars[i].lost_base_length = 0;
r->cigars[i].lost_base = NULL;
r->second_round_cigar[i].lost_base_size = r->cigars[i].lost_base_size = 0;
r->second_round_cigar[i].lost_base_length = r->cigars[i].lost_base_length = 0;
r->second_round_cigar[i].lost_base = r->cigars[i].lost_base = NULL;
}
+1
View File
@@ -98,6 +98,7 @@ typedef struct
uint64_t total_name_length;
Compressed_Cigar_record* cigars;
Compressed_Cigar_record* second_round_cigar;
} All_reads;