Loading Makefile +2 −1 Original line number Diff line number Diff line CFLAGS = -Wall -O3 -std=c99 LIBS = align.o alnfrags.o ankers.o assembly.o chain.o compdna.o compkmers.o compress.o decon.o ef.o filebuff.o frags.o hashmap.o hashmapindex.o hashmapkma.o hashmapkmers.o hashtable.o index.o kma.o kmapipe.o kmeranker.o kmers.o kmmap.o loadupdate.o makeindex.o mt1.o nw.o pherror.o printconsensus.o qseqs.o qualcheck.o runinput.o runkma.o sam.o savekmers.o seq2fasta.o seqmenttree.o seqparse.o shm.o sparse.o spltdb.o stdnuc.o stdstat.o tmp.o update.o updateindex.o updatescores.o valueshash.o vcf.o LIBS = align.o alnfrags.o ankers.o assembly.o chain.o compdna.o compkmers.o compress.o decon.o ef.o filebuff.o frags.o hashmap.o hashmapindex.o hashmapkma.o hashmapkmers.o hashtable.o index.o kma.o kmapipe.o kmeranker.o kmerlink.o kmers.o kmmap.o loadupdate.o makeindex.o mt1.o nw.o pherror.o printconsensus.o qseqs.o qualcheck.o runinput.o runkma.o sam.o savekmers.o seq2fasta.o seqmenttree.o seqparse.o shm.o sparse.o spltdb.o stdnuc.o stdstat.o tmp.o update.o updateindex.o updatescores.o valueshash.o vcf.o PROGS = kma kma_index kma_shm kma_update .c .o: Loading Loading @@ -46,6 +46,7 @@ index.o: index.h compress.h decon.h hashmap.h hashmapkma.h loadupdate.h makeinde kma.o: kma.h ankers.h assembly.h chain.h hashmapkma.h kmers.h mt1.h penalties.h pherror.h qseqs.h runinput.h runkma.h savekmers.h sparse.h spltdb.h tmp.h version.h kmapipe.o: kmapipe.h pherror.h kmeranker.o: kmeranker.h penalties.h kmerlink.o: kmerlink.h kmeranker.h kmers.o: kmers.h ankers.h compdna.h hashmapkma.h kmapipe.h pherror.h qseqs.h savekmers.h spltdb.h kmmap.o: kmmap.h hashmapkma.h loadupdate.o: loadupdate.h pherror.h hashmap.h hashmapkma.h updateindex.h Loading align.c +7 −6 Original line number Diff line number Diff line Loading @@ -210,7 +210,6 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int start = chainSeedsPtr(points, q_len, t_len, kmersize, &aligned->mapQ); score = points->score[start]; //fprintf(stderr, "%d\t%d\t%d\t%d\n", t_len, mem_count, aligned->mapQ, score); if(aligned->mapQ < mq || score < kmersize) { Stat.score = 0; Stat.len = 1; Loading Loading @@ -250,6 +249,8 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int NWstat = NW(template_index->seq, qseq, -1 - (t_s == 0), t_s, t_e, q_s, q_e, Frag_align, matrices); } else { NWstat = NW_band(template_index->seq, qseq, -1 - (t_s == 0), t_s, t_e, q_s, q_e, Frag_align, band, matrices); /* here */ //NWstat = NW(template_index->seq, qseq, -1 - (t_s == 0), t_s, t_e, q_s, q_e, Frag_align, matrices); } /* trim leading gaps */ Loading Loading @@ -343,7 +344,7 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int NWstat = NW(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align, matrices); } else { NWstat = NW_band(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align, band, matrices); //NWstat = NW(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align); //NWstat = NW(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align, matrices); } memcpy(aligned->t + Stat.len, Frag_align->t, NWstat.len); Loading Loading @@ -377,7 +378,7 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int NWstat = NW(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align, matrices); } else { NWstat = NW_band(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align, band, matrices); //NWstat = NW(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align); //NWstat = NW(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align, matrices); } /* trim trailing gaps */ if(t_e == t_len) { Loading @@ -390,12 +391,12 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int --bias; } ++bias; /* if(bias != NWstat.len) { NWstat.score -= (W1 + (NWstat.len - bias) * U); //NWstat.score -= (W1 + (NWstat.len - bias) * U); NWstat.len = bias; } */ } memcpy(aligned->t + Stat.len, Frag_align->t, NWstat.len); Loading assembly.c +4 −3 Original line number Diff line number Diff line Loading @@ -274,7 +274,6 @@ void * assemble_KMA_threaded(void *arg) { static volatile int excludeIn[1] = {0}, excludeOut[1] = {0}, excludeMatrix[1] = {0}, mainTemplate = -2, thread_wait = 0; static char *template_name; static HashMap_index *template_index; Assemble_thread *thread = arg; int i, j, t_len, aln_len, start, end, bias, myBias, gaps, pos, spin, sam; int read_score, depthUpdate, bestBaseScore, bestScore, template, asm_len; Loading @@ -295,6 +294,7 @@ void * assemble_KMA_threaded(void *arg) { AssemInfo *matrix; AlnPoints *points; NWmat *NWmatrices; HashMap_index *template_index; /* get input */ template = thread->template; Loading @@ -317,6 +317,7 @@ void * assemble_KMA_threaded(void *arg) { sam = thread->sam; spin = thread->spin; thread_num = thread->thread_num; template_index = thread->template_index; if(template != -2) { /* all assemblies done, Loading @@ -331,7 +332,6 @@ void * assemble_KMA_threaded(void *arg) { /* Allocate assembly arrays */ lock(excludeMatrix); template_name = thread->template_name; template_index = thread->template_index; t_len = template_index->len; matrix->len = t_len; if(matrix->size < (t_len << 1)) { Loading Loading @@ -552,6 +552,7 @@ void * assemble_KMA_threaded(void *arg) { header->seq[header->len - 1] = 0; samwrite(qseq, header, 0, template_name, aligned, stats); } } else if(sam) { stats[1] = read_score; stats[2] = start; Loading Loading @@ -617,7 +618,6 @@ void * assemble_KMA_threaded(void *arg) { return NULL; } /* diff */ /* pre on dense */ /* Pepare and make alignment on consensus */ Loading Loading @@ -697,6 +697,7 @@ void * assemble_KMA_threaded(void *arg) { pos = assembly[pos].next; } /* Trim alignment on consensus */ coverScore = 0; bias = 0; Loading compress.c +57 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <sys/param.h> #include "compress.h" #include "hashmap.h" #include "hashmapkma.h" Loading @@ -44,6 +45,7 @@ static void mmapinit(HashMapKMA *finalDB, long unsigned size, FILE *out) { if(finalDB->exist == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->exist, size, POSIX_MADV_SEQUENTIAL); *finalDB->exist++ = finalDB->DB_size; *finalDB->exist++ = finalDB->kmersize; *finalDB->exist++ = finalDB->prefix_len; Loading Loading @@ -72,8 +74,8 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { void *data; long unsigned i, j, check, size, v_size; long unsigned index, t_index, v_index, new_index, null_index; unsigned swap, *values; short unsigned *values_s; unsigned swap, *values, *finalV; short unsigned *values_s, *finalV_s; HashMapKMA *finalDB; ValuesHash *shmValues; ValuesTable *node, *next, *table; Loading Loading @@ -227,6 +229,7 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { if(finalDB->exist == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->exist, size, POSIX_MADV_SEQUENTIAL); finalDB->exist_l = (long unsigned *) (finalDB->exist + 3); finalDB->exist_l += 5; Loading Loading @@ -470,6 +473,17 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { /* move values */ if(finalDB->DB_size < USHRT_MAX) { for(node = table; node != 0; node = next) { next = node->next; values_s = (short unsigned *)(node->values); finalV_s = finalDB->values_s + node->v_index - 1; i = 2 + *values_s--; while(--i) { *++finalV_s = *++values_s; } free(node->values); free(node); /* next = node->next; values_s = (short unsigned *)(node->values); for(i = node->v_index, j = 0; j <= *values_s; ++i, ++j) { Loading @@ -477,9 +491,21 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { } free(values_s); free(node); */ } } else { for(node = table; node != 0; node = next) { next = node->next; values = node->values; finalV = finalDB->values + node->v_index - 1; i = 2 + *values--; while(--i) { *++finalV = *++values; } free(node->values); free(node); /* next = node->next; values = node->values; for(i = node->v_index, j = 0; j <= *values; ++i, ++j) { Loading @@ -487,6 +513,7 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { } free(values); free(node); */ } } Loading Loading @@ -537,8 +564,8 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { long unsigned i, j, v_index, new_index, null_index, size, v_size; unsigned check, swap, *values; short unsigned *values_s; unsigned check, swap, *values, *finalV; short unsigned *values_s, *finalV_s; HashMapKMA *finalDB; ValuesHash *shmValues; ValuesTable *node, *next, *table; Loading Loading @@ -653,6 +680,7 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { if(finalDB->exist == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->exist, size, POSIX_MADV_SEQUENTIAL); finalDB->exist_l = (long unsigned *) (finalDB->exist + 3); finalDB->exist_l += 5; } else { Loading Loading @@ -810,6 +838,7 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { if(finalDB->values == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->values, size, POSIX_MADV_SEQUENTIAL); finalDB->values = ((void *) finalDB->values) + v_size; if(finalDB->DB_size < USHRT_MAX) { finalDB->values_s = (short unsigned *) finalDB->values; Loading @@ -819,6 +848,17 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { /* move values */ if(finalDB->DB_size < USHRT_MAX) { for(node = table; node != 0; node = next) { next = node->next; values_s = (short unsigned *)(node->values); finalV_s = finalDB->values_s + node->v_index - 1; i = 2 + *values_s--; while(--i) { *++finalV_s = *++values_s; } free(node->values); free(node); /* next = node->next; values_s = (short unsigned *)(node->values); for(i = node->v_index, j = 0; j <= *values_s; ++i, ++j) { Loading @@ -826,9 +866,21 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { } free(values_s); free(node); */ } } else { for(node = table; node != 0; node = next) { next = node->next; values = node->values; finalV = finalDB->values + node->v_index - 1; i = 2 + *values--; while(--i) { *++finalV = *++values; } free(node->values); free(node); /* next = node->next; values = node->values; for(i = node->v_index, j = 0; j <= *values; ++i, ++j) { Loading @@ -836,6 +888,7 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { } free(values); free(node); */ } } /* dump final DB */ Loading hashmapindex.c +31 −10 Original line number Diff line number Diff line Loading @@ -37,17 +37,26 @@ typedef int key_t; void (*destroyPtr)(HashMap_index *) = &alignClean; HashMap_index * (*alignLoadPtr)(HashMap_index *, int, int, int, int, long unsigned, long unsigned) = &alignLoad_fly; void hashMap_index_initialize(HashMap_index *dest, int len, int kmerindex) { int hashMap_index_initialize(HashMap_index *dest, int len, int kmerindex) { dest->len = len; dest->size = len << 1; dest->kmerindex = kmerindex; if(dest->size < (len << 1)) { if(dest->size) { free(dest->index); free(dest->seq); } dest->size = len << 1; dest->index = calloc(dest->size, sizeof(int)); dest->seq = malloc(((len >> 5) + 1) * sizeof(long unsigned)); if(!dest->index || !dest->seq) { ERROR(); } return 0; } return 1; } void hashMap_index_set(HashMap_index *dest) { Loading Loading @@ -248,8 +257,13 @@ HashMap_index * hashMap_index_load(HashMap_index *src, int seq, int index, int l if(src == 0) { src = smalloc(sizeof(HashMap_index)); src->size = 0; } if(hashMap_index_initialize(src, len, kmersize)) { src->size = len << 1; memset(src->index, 0, src->size * sizeof(int)); } hashMap_index_initialize(src, len, kmersize); read(seq, src->seq, ((src->len >> 5) + 1) * sizeof(long unsigned)); read(index, src->index, src->size * sizeof(int)); Loading @@ -267,8 +281,13 @@ HashMap_index * hashMap_index_build(HashMap_index *src, int seq, int len, int km if(src == 0) { src = smalloc(sizeof(HashMap_index)); src->size = 0; } if(hashMap_index_initialize(src, len, kmersize)) { memset(src->index, 0, src->size * sizeof(int)); } hashMap_index_initialize(src, len, kmersize); shifter = sizeof(long unsigned) * sizeof(long unsigned) - (src->kmerindex << 1); read(seq, src->seq, ((src->len >> 5) + 1) * sizeof(long unsigned)); Loading Loading @@ -375,10 +394,12 @@ HashMap_index * alignLoad_shm_initial(char *templatefilename, int file_len, int } void alignClean(HashMap_index *template_index) { /* Overwrite later */ /* if(template_index) { hashMap_index_destroy(template_index); } */ } void alignClean_shm(HashMap_index *template_index) { Loading Loading
Makefile +2 −1 Original line number Diff line number Diff line CFLAGS = -Wall -O3 -std=c99 LIBS = align.o alnfrags.o ankers.o assembly.o chain.o compdna.o compkmers.o compress.o decon.o ef.o filebuff.o frags.o hashmap.o hashmapindex.o hashmapkma.o hashmapkmers.o hashtable.o index.o kma.o kmapipe.o kmeranker.o kmers.o kmmap.o loadupdate.o makeindex.o mt1.o nw.o pherror.o printconsensus.o qseqs.o qualcheck.o runinput.o runkma.o sam.o savekmers.o seq2fasta.o seqmenttree.o seqparse.o shm.o sparse.o spltdb.o stdnuc.o stdstat.o tmp.o update.o updateindex.o updatescores.o valueshash.o vcf.o LIBS = align.o alnfrags.o ankers.o assembly.o chain.o compdna.o compkmers.o compress.o decon.o ef.o filebuff.o frags.o hashmap.o hashmapindex.o hashmapkma.o hashmapkmers.o hashtable.o index.o kma.o kmapipe.o kmeranker.o kmerlink.o kmers.o kmmap.o loadupdate.o makeindex.o mt1.o nw.o pherror.o printconsensus.o qseqs.o qualcheck.o runinput.o runkma.o sam.o savekmers.o seq2fasta.o seqmenttree.o seqparse.o shm.o sparse.o spltdb.o stdnuc.o stdstat.o tmp.o update.o updateindex.o updatescores.o valueshash.o vcf.o PROGS = kma kma_index kma_shm kma_update .c .o: Loading Loading @@ -46,6 +46,7 @@ index.o: index.h compress.h decon.h hashmap.h hashmapkma.h loadupdate.h makeinde kma.o: kma.h ankers.h assembly.h chain.h hashmapkma.h kmers.h mt1.h penalties.h pherror.h qseqs.h runinput.h runkma.h savekmers.h sparse.h spltdb.h tmp.h version.h kmapipe.o: kmapipe.h pherror.h kmeranker.o: kmeranker.h penalties.h kmerlink.o: kmerlink.h kmeranker.h kmers.o: kmers.h ankers.h compdna.h hashmapkma.h kmapipe.h pherror.h qseqs.h savekmers.h spltdb.h kmmap.o: kmmap.h hashmapkma.h loadupdate.o: loadupdate.h pherror.h hashmap.h hashmapkma.h updateindex.h Loading
align.c +7 −6 Original line number Diff line number Diff line Loading @@ -210,7 +210,6 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int start = chainSeedsPtr(points, q_len, t_len, kmersize, &aligned->mapQ); score = points->score[start]; //fprintf(stderr, "%d\t%d\t%d\t%d\n", t_len, mem_count, aligned->mapQ, score); if(aligned->mapQ < mq || score < kmersize) { Stat.score = 0; Stat.len = 1; Loading Loading @@ -250,6 +249,8 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int NWstat = NW(template_index->seq, qseq, -1 - (t_s == 0), t_s, t_e, q_s, q_e, Frag_align, matrices); } else { NWstat = NW_band(template_index->seq, qseq, -1 - (t_s == 0), t_s, t_e, q_s, q_e, Frag_align, band, matrices); /* here */ //NWstat = NW(template_index->seq, qseq, -1 - (t_s == 0), t_s, t_e, q_s, q_e, Frag_align, matrices); } /* trim leading gaps */ Loading Loading @@ -343,7 +344,7 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int NWstat = NW(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align, matrices); } else { NWstat = NW_band(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align, band, matrices); //NWstat = NW(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align); //NWstat = NW(template_index->seq, qseq, 0, t_s, t_e, q_s, q_e, Frag_align, matrices); } memcpy(aligned->t + Stat.len, Frag_align->t, NWstat.len); Loading Loading @@ -377,7 +378,7 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int NWstat = NW(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align, matrices); } else { NWstat = NW_band(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align, band, matrices); //NWstat = NW(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align); //NWstat = NW(template_index->seq, qseq, 1 + (t_e == t_len), t_s, t_e, q_s, q_e, Frag_align, matrices); } /* trim trailing gaps */ if(t_e == t_len) { Loading @@ -390,12 +391,12 @@ AlnScore KMA(const HashMap_index *template_index, const unsigned char *qseq, int --bias; } ++bias; /* if(bias != NWstat.len) { NWstat.score -= (W1 + (NWstat.len - bias) * U); //NWstat.score -= (W1 + (NWstat.len - bias) * U); NWstat.len = bias; } */ } memcpy(aligned->t + Stat.len, Frag_align->t, NWstat.len); Loading
assembly.c +4 −3 Original line number Diff line number Diff line Loading @@ -274,7 +274,6 @@ void * assemble_KMA_threaded(void *arg) { static volatile int excludeIn[1] = {0}, excludeOut[1] = {0}, excludeMatrix[1] = {0}, mainTemplate = -2, thread_wait = 0; static char *template_name; static HashMap_index *template_index; Assemble_thread *thread = arg; int i, j, t_len, aln_len, start, end, bias, myBias, gaps, pos, spin, sam; int read_score, depthUpdate, bestBaseScore, bestScore, template, asm_len; Loading @@ -295,6 +294,7 @@ void * assemble_KMA_threaded(void *arg) { AssemInfo *matrix; AlnPoints *points; NWmat *NWmatrices; HashMap_index *template_index; /* get input */ template = thread->template; Loading @@ -317,6 +317,7 @@ void * assemble_KMA_threaded(void *arg) { sam = thread->sam; spin = thread->spin; thread_num = thread->thread_num; template_index = thread->template_index; if(template != -2) { /* all assemblies done, Loading @@ -331,7 +332,6 @@ void * assemble_KMA_threaded(void *arg) { /* Allocate assembly arrays */ lock(excludeMatrix); template_name = thread->template_name; template_index = thread->template_index; t_len = template_index->len; matrix->len = t_len; if(matrix->size < (t_len << 1)) { Loading Loading @@ -552,6 +552,7 @@ void * assemble_KMA_threaded(void *arg) { header->seq[header->len - 1] = 0; samwrite(qseq, header, 0, template_name, aligned, stats); } } else if(sam) { stats[1] = read_score; stats[2] = start; Loading Loading @@ -617,7 +618,6 @@ void * assemble_KMA_threaded(void *arg) { return NULL; } /* diff */ /* pre on dense */ /* Pepare and make alignment on consensus */ Loading Loading @@ -697,6 +697,7 @@ void * assemble_KMA_threaded(void *arg) { pos = assembly[pos].next; } /* Trim alignment on consensus */ coverScore = 0; bias = 0; Loading
compress.c +57 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <sys/param.h> #include "compress.h" #include "hashmap.h" #include "hashmapkma.h" Loading @@ -44,6 +45,7 @@ static void mmapinit(HashMapKMA *finalDB, long unsigned size, FILE *out) { if(finalDB->exist == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->exist, size, POSIX_MADV_SEQUENTIAL); *finalDB->exist++ = finalDB->DB_size; *finalDB->exist++ = finalDB->kmersize; *finalDB->exist++ = finalDB->prefix_len; Loading Loading @@ -72,8 +74,8 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { void *data; long unsigned i, j, check, size, v_size; long unsigned index, t_index, v_index, new_index, null_index; unsigned swap, *values; short unsigned *values_s; unsigned swap, *values, *finalV; short unsigned *values_s, *finalV_s; HashMapKMA *finalDB; ValuesHash *shmValues; ValuesTable *node, *next, *table; Loading Loading @@ -227,6 +229,7 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { if(finalDB->exist == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->exist, size, POSIX_MADV_SEQUENTIAL); finalDB->exist_l = (long unsigned *) (finalDB->exist + 3); finalDB->exist_l += 5; Loading Loading @@ -470,6 +473,17 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { /* move values */ if(finalDB->DB_size < USHRT_MAX) { for(node = table; node != 0; node = next) { next = node->next; values_s = (short unsigned *)(node->values); finalV_s = finalDB->values_s + node->v_index - 1; i = 2 + *values_s--; while(--i) { *++finalV_s = *++values_s; } free(node->values); free(node); /* next = node->next; values_s = (short unsigned *)(node->values); for(i = node->v_index, j = 0; j <= *values_s; ++i, ++j) { Loading @@ -477,9 +491,21 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { } free(values_s); free(node); */ } } else { for(node = table; node != 0; node = next) { next = node->next; values = node->values; finalV = finalDB->values + node->v_index - 1; i = 2 + *values--; while(--i) { *++finalV = *++values; } free(node->values); free(node); /* next = node->next; values = node->values; for(i = node->v_index, j = 0; j <= *values; ++i, ++j) { Loading @@ -487,6 +513,7 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { } free(values); free(node); */ } } Loading Loading @@ -537,8 +564,8 @@ HashMapKMA * compressKMA_DB(HashMap *templates, FILE *out) { HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { long unsigned i, j, v_index, new_index, null_index, size, v_size; unsigned check, swap, *values; short unsigned *values_s; unsigned check, swap, *values, *finalV; short unsigned *values_s, *finalV_s; HashMapKMA *finalDB; ValuesHash *shmValues; ValuesTable *node, *next, *table; Loading Loading @@ -653,6 +680,7 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { if(finalDB->exist == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->exist, size, POSIX_MADV_SEQUENTIAL); finalDB->exist_l = (long unsigned *) (finalDB->exist + 3); finalDB->exist_l += 5; } else { Loading Loading @@ -810,6 +838,7 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { if(finalDB->values == MAP_FAILED) { ERROR(); } posix_madvise(finalDB->values, size, POSIX_MADV_SEQUENTIAL); finalDB->values = ((void *) finalDB->values) + v_size; if(finalDB->DB_size < USHRT_MAX) { finalDB->values_s = (short unsigned *) finalDB->values; Loading @@ -819,6 +848,17 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { /* move values */ if(finalDB->DB_size < USHRT_MAX) { for(node = table; node != 0; node = next) { next = node->next; values_s = (short unsigned *)(node->values); finalV_s = finalDB->values_s + node->v_index - 1; i = 2 + *values_s--; while(--i) { *++finalV_s = *++values_s; } free(node->values); free(node); /* next = node->next; values_s = (short unsigned *)(node->values); for(i = node->v_index, j = 0; j <= *values_s; ++i, ++j) { Loading @@ -826,9 +866,21 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { } free(values_s); free(node); */ } } else { for(node = table; node != 0; node = next) { next = node->next; values = node->values; finalV = finalDB->values + node->v_index - 1; i = 2 + *values--; while(--i) { *++finalV = *++values; } free(node->values); free(node); /* next = node->next; values = node->values; for(i = node->v_index, j = 0; j <= *values; ++i, ++j) { Loading @@ -836,6 +888,7 @@ HashMapKMA * compressKMA_megaDB(HashMap *templates, FILE *out) { } free(values); free(node); */ } } /* dump final DB */ Loading
hashmapindex.c +31 −10 Original line number Diff line number Diff line Loading @@ -37,17 +37,26 @@ typedef int key_t; void (*destroyPtr)(HashMap_index *) = &alignClean; HashMap_index * (*alignLoadPtr)(HashMap_index *, int, int, int, int, long unsigned, long unsigned) = &alignLoad_fly; void hashMap_index_initialize(HashMap_index *dest, int len, int kmerindex) { int hashMap_index_initialize(HashMap_index *dest, int len, int kmerindex) { dest->len = len; dest->size = len << 1; dest->kmerindex = kmerindex; if(dest->size < (len << 1)) { if(dest->size) { free(dest->index); free(dest->seq); } dest->size = len << 1; dest->index = calloc(dest->size, sizeof(int)); dest->seq = malloc(((len >> 5) + 1) * sizeof(long unsigned)); if(!dest->index || !dest->seq) { ERROR(); } return 0; } return 1; } void hashMap_index_set(HashMap_index *dest) { Loading Loading @@ -248,8 +257,13 @@ HashMap_index * hashMap_index_load(HashMap_index *src, int seq, int index, int l if(src == 0) { src = smalloc(sizeof(HashMap_index)); src->size = 0; } if(hashMap_index_initialize(src, len, kmersize)) { src->size = len << 1; memset(src->index, 0, src->size * sizeof(int)); } hashMap_index_initialize(src, len, kmersize); read(seq, src->seq, ((src->len >> 5) + 1) * sizeof(long unsigned)); read(index, src->index, src->size * sizeof(int)); Loading @@ -267,8 +281,13 @@ HashMap_index * hashMap_index_build(HashMap_index *src, int seq, int len, int km if(src == 0) { src = smalloc(sizeof(HashMap_index)); src->size = 0; } if(hashMap_index_initialize(src, len, kmersize)) { memset(src->index, 0, src->size * sizeof(int)); } hashMap_index_initialize(src, len, kmersize); shifter = sizeof(long unsigned) * sizeof(long unsigned) - (src->kmerindex << 1); read(seq, src->seq, ((src->len >> 5) + 1) * sizeof(long unsigned)); Loading Loading @@ -375,10 +394,12 @@ HashMap_index * alignLoad_shm_initial(char *templatefilename, int file_len, int } void alignClean(HashMap_index *template_index) { /* Overwrite later */ /* if(template_index) { hashMap_index_destroy(template_index); } */ } void alignClean_shm(HashMap_index *template_index) { Loading