extern EISeq * createEncIdxSeq(const GtStr *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, Verboseinfo *verbosity, GtError *err) { Suffixarray suffixArray; struct encIdxSeq *newSeqIdx; Seqpos length; gt_assert(projectName); /* map and interpret index project file */ if (streamsuffixarray(&suffixArray, SARR_SUFTAB | SARR_BWTTAB, projectName, verbosity, err)) return NULL; length = getencseqtotallength(suffixArray.encseq) + 1; newSeqIdx = createEncIdxSeqFromSA(&suffixArray, length, projectName, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); freesuffixarray(&suffixArray); return newSeqIdx; }
static int inputthesequences(unsigned int *numofchars, unsigned long *nextpostable, Suffixarray *suffixarraytable, const GtStrArray *indexnametab, unsigned int demand, GtLogger *logger, GtError *err) { unsigned long idx; const char *indexname; gt_error_check(err); for (idx=0; idx<gt_str_array_size(indexnametab); idx++) { indexname = gt_str_array_get(indexnametab,idx); if (streamsuffixarray(&suffixarraytable[idx], demand, indexname, logger, err) != 0) { return -1; } if (idx == 0) { *numofchars = gt_alphabet_num_of_chars( gt_encseq_alphabet(suffixarraytable[idx].encseq)); } nextpostable[idx] = 0; } return 0; }
int gt_test_trieins(bool onlyins,const char *indexname,GtError *err) { Suffixarray suffixarray; bool haserr = false; unsigned long totallength = 0; gt_error_check(err); if (streamsuffixarray(&suffixarray, SARR_ESQTAB, indexname, NULL, err) != 0) { haserr = true; } else { totallength = gt_encseq_total_length(suffixarray.encseq); } if (!haserr) { Mergertrierep trierep; const GtUchar *characters; trierep.encseqreadinfo = gt_malloc(sizeof *trierep.encseqreadinfo); trierep.encseqreadinfo->encseqptr = suffixarray.encseq; trierep.encseqreadinfo->readmode = suffixarray.readmode; characters = gt_alphabet_characters(gt_encseq_alphabet(suffixarray.encseq)); gt_mergertrie_initnodetable(&trierep,totallength,1U); maketrie(&trierep,characters,totallength); if (onlyins) { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(&trierep,characters); #endif checktrie(&trierep,totallength+1,totallength,err); #endif } else { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showallnoderelations(trierep.root); #endif #endif successivelydeletesmallest(&trierep,totallength,characters,err); } gt_mergertrie_delete(&trierep); } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; }
int test_trieins(bool onlyins,const GtStr *indexname,GtError *err) { Suffixarray suffixarray; bool haserr = false; Seqpos totallength = 0; gt_error_check(err); if (streamsuffixarray(&suffixarray, SARR_ESQTAB, indexname, NULL, err) != 0) { haserr = true; } else { totallength = getencseqtotallength(suffixarray.encseq); } if (!haserr) { Mergertrierep trierep; const GtUchar *characters; ALLOCASSIGNSPACE(trierep.encseqreadinfo,NULL,Encseqreadinfo,1); trierep.encseqreadinfo[0].encseqptr = suffixarray.encseq; trierep.encseqreadinfo[0].readmode = suffixarray.readmode; characters = getencseqAlphabetcharacters(suffixarray.encseq); mergertrie_initnodetable(&trierep,totallength,1U); maketrie(&trierep,characters,totallength); if (onlyins) { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(&trierep,characters); #endif checktrie(&trierep,totallength+1,totallength,err); #endif } else { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showallnoderelations(trierep.root); #endif #endif successivelydeletesmallest(&trierep,totallength,characters,err); } mergertrie_delete(&trierep); } freesuffixarray(&suffixarray); return haserr ? -1 : 0; }
extern EISeq * loadEncIdxSeq(const GtStr *projectName, enum seqBaseEncoding encType, int features, Verboseinfo *verbosity, GtError *err) { struct encIdxSeq *newSeqIdx = NULL; Suffixarray suffixArray; Seqpos len; do { if (streamsuffixarray(&suffixArray, 0, projectName, verbosity, err)) break; len = getencseqtotallength(suffixArray.encseq) + 1; newSeqIdx = loadEncIdxSeqForSA(&suffixArray, len, projectName, encType, features, err); freesuffixarray(&suffixArray); } while (0); return newSeqIdx; }