mirror of
https://github.com/chhylp123/hifiasm.git
synced 2026-10-02 16:48:11 +08:00
2019_9_5
This commit is contained in:
+79
-13
@@ -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(¤t_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,
|
||||
¤t_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,
|
||||
¤t_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, ¤t_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
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ typedef struct
|
||||
uint64_t total_name_length;
|
||||
|
||||
Compressed_Cigar_record* cigars;
|
||||
Compressed_Cigar_record* second_round_cigar;
|
||||
|
||||
} All_reads;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user