From 398e73022b793a70501f83813354f3d02c21e44d Mon Sep 17 00:00:00 2001 From: Heng Li Date: Tue, 24 Mar 2020 00:57:00 -0400 Subject: [PATCH] NOT WORKING!!! removed small_hash_table --- Makefile | 9 ++- kmer.cpp | 187 ------------------------------------------------------- kmer.h | 33 +++------- 3 files changed, 11 insertions(+), 218 deletions(-) delete mode 100644 kmer.cpp diff --git a/Makefile b/Makefile index 8323c77..4d00034 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ CXX= g++ -CXXFLAGS= -g -O3 -msse4.2 -mpopcnt -fomit-frame-pointer -Wall #-fsanitize=address -fno-omit-frame-pointer#-Winline +CXXFLAGS= -g -O3 -msse4.2 -mpopcnt -fomit-frame-pointer -Wall CPPFLAGS= INCLUDES= -OBJS= Output.o CommandLines.o Process_Read.o Assembly.o kmer.o Hash_Table.o \ - POA.o Correct.o Levenshtein_distance.o Overlaps.o Trio.o kthread.o #ksw2_extz2_sse.o +OBJS= Output.o CommandLines.o Process_Read.o Assembly.o Hash_Table.o \ + POA.o Correct.o Levenshtein_distance.o Overlaps.o Trio.o kthread.o EXE= hifiasm -LIBS= -lz -lpthread -lm #-fsanitize=address -fno-omit-frame-pointer +LIBS= -lz -lpthread -lm ifneq ($(asan),) CXXFLAGS+=-fsanitize=address @@ -51,7 +51,6 @@ POA.o: kvec.h kdq.h CommandLines.h Correct.h Levenshtein_distance.h Process_Read.o: Process_Read.h kseq.h Overlaps.h kvec.h kdq.h CommandLines.h Trio.o: khashl.h kthread.h Process_Read.h kseq.h Overlaps.h kvec.h kdq.h Trio.o: CommandLines.h Trio.h kmer.h -kmer.o: kmer.h Process_Read.h kseq.h Overlaps.h kvec.h kdq.h CommandLines.h kthread.o: kthread.h main.o: CommandLines.h Process_Read.h kseq.h Overlaps.h kvec.h kdq.h main.o: Assembly.h Levenshtein_distance.h diff --git a/kmer.cpp b/kmer.cpp deleted file mode 100644 index 811f8ec..0000000 --- a/kmer.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#include -#include -#include "kmer.h" - -void init_HPC_seq(HPC_seq* seq, char* str, long long l) -{ - seq->i = 0; - seq->l = l; - seq->N_occ = 0; - seq->str = str; -} - -void init_small_hash_table(small_hash_table* x) -{ - x->size = 0; - x->buffer = NULL; - x->length = 0; -} - -void clear_small_hash_table(small_hash_table* x) -{ - x->length = 0; -} - -void resize_small_hash_table(small_hash_table* x, uint64_t size) -{ - if(size > x->size) - { - x->size = size; - x->buffer = (k_v*)realloc(x->buffer, x->size*sizeof(k_v)); - } -} - -void destory_small_hash_table(small_hash_table* x) -{ - free(x->buffer); -} - - -void add_small_hash_table(small_hash_table* x, k_v* element) -{ - if(x->length + 1 > x->size) - { - x->size = (x->length + 1) * 2; - x->buffer = (k_v*)realloc(x->buffer, x->size*sizeof(k_v)); - } - - x->buffer[x->length] = (*element); - x->length++; -} - -//x > y, return 1; x < y, return -1, x == y, return 0 -int compare_k_mer(k_v* x, k_v* y) -{ - if(x->key.x[1] != y->key.x[1]) - { - return x->key.x[1] > y->key.x[1] ? 1: -1; - } - else - { - if(x->key.x[0] != y->key.x[0]) - { - return x->key.x[0] > y->key.x[0] ? 1: -1; - } - else - { - return 0; - } - } - -} - -int cmp_k_mer_kv(const void * a, const void * b) -{ - int flag = compare_k_mer((k_v*)a, (k_v*)b); - - if(flag == 0) - { - if ((*(k_v*)a).value != (*(k_v*)b).value) - { - return (*(k_v*)a).value > (*(k_v*)b).value ? 1: -1; - } - else - { - return 0; - } - - } - else - { - return flag; - } -} - -void sort_small_hash_table(small_hash_table* x) -{ - qsort(x->buffer, x->length, sizeof(k_v), cmp_k_mer_kv); -} - - -inline long long firstEqual(k_v* arr, long long arrLen, k_v* key) -{ - long long L = 0, R = arrLen - 1; //[L, R] - long long mid; - int flag; - while( L <= R) - { - mid = L + (R - L)/2; - - flag = compare_k_mer(&(arr[mid]), key); - - ///arr[mid] >= key - if(flag >= 0) - { - R = mid - 1; - } - else - { - L = mid + 1; - } - } - - - if(L < arrLen && (flag = compare_k_mer(&(arr[L]), key) == 0)) - { - return L; - } - - return -1; -} - -inline long long lastEqual(k_v* arr, long long arrLen, k_v* key) -{ - long long L = 0, R = arrLen - 1; //[L, R] - long long mid; - int flag; - while( L <= R) - { - mid = L + (R - L)/2; - flag = compare_k_mer(&(arr[mid]), key); - ///arr[mid] <= key - if(flag <= 0) - { - L = mid + 1; - } - else - { - R = mid - 1; - } - } - - if(R >= 0 && ((flag = compare_k_mer(&(arr[R]), key)) == 0)) - { - return R; - } - - return -1; -} - -int query_small_hash_table(small_hash_table* target, k_v* query, long long* l_end, long long* r_end) -{ - (*l_end) = -1; - (*r_end) = -1; - long long left_end; - long long right_end; - - left_end = firstEqual(target->buffer, target->length, query); - - if(left_end != -1) - { - right_end = lastEqual(target->buffer + left_end, target->length - left_end, query) + left_end; - - (*l_end) = left_end; - (*r_end) = right_end; - - if(right_end == -1) - { - fprintf(stderr, "error\n"); - } - - - return right_end - left_end + 1; - } - - return 0; -} - diff --git a/kmer.h b/kmer.h index 6462f57..fad4ac2 100644 --- a/kmer.h +++ b/kmer.h @@ -8,38 +8,12 @@ #define SAFE_SHIFT(k) k & ((k < 64)?ALL:0) /****************************may have bugs********************************/ - - - - - typedef struct { //can represent at most 64-mer uint64_t x[4]; } Hash_code; -typedef struct { - Hash_code key; ///k-mer itself - uint64_t value; ///offset -} k_v; - -typedef struct { - k_v* buffer; - uint32_t size; - uint32_t length; -} small_hash_table; - -void init_small_hash_table(small_hash_table* x); -void clear_small_hash_table(small_hash_table* x); -void resize_small_hash_table(small_hash_table* x, uint64_t size); -void destory_small_hash_table(small_hash_table* x); -void add_small_hash_table(small_hash_table* x, k_v* element); -void sort_small_hash_table(small_hash_table* x); -int compare_k_mer(k_v* x, k_v* y); -int query_small_hash_table(small_hash_table* target, k_v* query, long long* l_end, long long* r_end); - - typedef struct { char* str; @@ -49,6 +23,13 @@ typedef struct } HPC_seq; +inline void init_HPC_seq(HPC_seq* seq, char* str, long long l) +{ + seq->i = 0; + seq->l = l; + seq->N_occ = 0; + seq->str = str; +} inline uint64_t get_HPC_code(HPC_seq* seq, uint64_t* end_pos) {