static int inputsuffixarray(bool map, Suffixarray *suffixarray, unsigned int demand, const GtStr *indexname, Verboseinfo *verboseinfo, GtError *err) { bool haserr = false; Seqpos totallength = 0; gt_error_check(err); initsuffixarray(suffixarray); suffixarray->encseq = mapencodedsequence(true, indexname, (demand & SARR_ESQTAB) ? true : false, (demand & SARR_DESTAB) ? true : false, (demand & SARR_SDSTAB) ? true : false, (demand & SARR_SSPTAB) ? true : false, verboseinfo, err); if (suffixarray->encseq == NULL) { haserr = true; } else { totallength = getencseqtotallength(suffixarray->encseq); } if (!haserr) { haserr = scanprjfileuintkeys(suffixarray,indexname,verboseinfo,err); } if (!haserr && (demand & SARR_SUFTAB)) { if (map) { suffixarray->suftab = genericmaptable(indexname, SUFTABSUFFIX, (unsigned long) (totallength+1), sizeof (Seqpos), err); if (suffixarray->suftab == NULL) { haserr = true; } } else { INITBufferedfile(indexname,&suffixarray->suftabstream,Seqpos, SUFTABSUFFIX); } if (!haserr && !suffixarray->longest.defined) { gt_error_set(err,"longest not defined"); haserr = true; } } if (!haserr && (demand & SARR_LCPTAB)) { if (map) { suffixarray->lcptab = genericmaptable(indexname, LCPTABSUFFIX, (unsigned long) (totallength+1), sizeof (GtUchar), err); if (suffixarray->lcptab == NULL) { haserr = true; } } else { INITBufferedfile(indexname,&suffixarray->lcptabstream,GtUchar, LCPTABSUFFIX); if (!haserr && fseek(suffixarray->lcptabstream.fp,(long) sizeof (GtUchar),SEEK_SET)) { gt_error_set(err,"fseek(esastream) failed: %s",strerror(errno)); haserr = true; } } if (!haserr && !suffixarray->numoflargelcpvalues.defined) { gt_error_set(err,"numoflargelcpvalues not defined"); haserr = true; } if (!haserr && suffixarray->numoflargelcpvalues.valueseqpos > 0) { if (map) { suffixarray->llvtab = genericmaptable(indexname, LARGELCPTABSUFFIX, (unsigned long) suffixarray->numoflargelcpvalues. valueseqpos, sizeof (Largelcpvalue), err); if (suffixarray->llvtab == NULL) { haserr = true; } } else { INITBufferedfile(indexname,&suffixarray->llvtabstream,Largelcpvalue, LARGELCPTABSUFFIX); } } } if (!haserr && (demand & SARR_BWTTAB)) { if (map) { suffixarray->bwttab = genericmaptable(indexname, BWTTABSUFFIX, (unsigned long) (totallength+1), sizeof (GtUchar), err); if (suffixarray->bwttab == NULL) { haserr = true; } } else { INITBufferedfile(indexname,&suffixarray->bwttabstream,GtUchar, BWTTABSUFFIX); } } if (!haserr && (demand & SARR_BCKTAB)) { if (map) { suffixarray->bcktab = mapbcktab(indexname, getencseqAlphabetnumofchars(suffixarray-> encseq), suffixarray->prefixlength, err); if (suffixarray->bcktab == NULL) { haserr = true; } } else { gt_error_set(err,"cannot stream bcktab"); haserr = true; } } if (haserr) { freesuffixarray(suffixarray); } return haserr ? -1 : 0; }
int runidxlocali(const IdxlocaliOptions *idxlocalioptions,GtError *err) { Genericindex *genericindex = NULL; bool haserr = false; Verboseinfo *verboseinfo; const Encodedsequence *encseq = NULL; verboseinfo = newverboseinfo(idxlocalioptions->verbose); if (idxlocalioptions->doonline) { encseq = mapencodedsequence (true, idxlocalioptions->indexname, true, false, false, true, verboseinfo, err); if (encseq == NULL) { haserr = true; } } else { genericindex = genericindex_new(idxlocalioptions->indexname, idxlocalioptions->withesa, idxlocalioptions->withesa || idxlocalioptions->docompare, false, true, 0, verboseinfo, err); if (genericindex == NULL) { haserr = true; } else { encseq = genericindex_getencseq(genericindex); } } if (!haserr) { GtSeqIterator *seqit; const GtUchar *query; unsigned long querylen; char *desc = NULL; int retval; Limdfsresources *limdfsresources = NULL; const AbstractDfstransformer *dfst; SWdpresource *swdpresource = NULL; Showmatchinfo showmatchinfo; Processmatch processmatch; void *processmatchinfoonline, *processmatchinfooffline; Storematchinfo storeonline, storeoffline; if (idxlocalioptions->docompare) { processmatch = storematch; initstorematch(&storeonline,encseq); initstorematch(&storeoffline,encseq); processmatchinfoonline = &storeonline; processmatchinfooffline = &storeoffline; } else { processmatch = showmatch; showmatchinfo.encseq = encseq; showmatchinfo.characters = getencseqAlphabetcharacters(encseq); showmatchinfo.wildcardshow = getencseqAlphabetwildcardshow(encseq); showmatchinfo.showalignment = idxlocalioptions->showalignment; processmatchinfoonline = processmatchinfooffline = &showmatchinfo; } if (idxlocalioptions->doonline || idxlocalioptions->docompare) { swdpresource = newSWdpresource(idxlocalioptions->matchscore, idxlocalioptions->mismatchscore, idxlocalioptions->gapextend, idxlocalioptions->threshold, idxlocalioptions->showalignment, processmatch, processmatchinfoonline); } dfst = locali_AbstractDfstransformer(); if (!idxlocalioptions->doonline || idxlocalioptions->docompare) { gt_assert(genericindex != NULL); limdfsresources = newLimdfsresources(genericindex, true, 0, 0, /* maxpathlength */ true, /* keepexpandedonstack */ processmatch, processmatchinfooffline, NULL, /* processresult */ NULL, /* processresult info */ dfst); } seqit = gt_seqiterator_new(idxlocalioptions->queryfiles, err); if (!seqit) haserr = true; if (!haserr) { gt_seqiterator_set_symbolmap(seqit, getencseqAlphabetsymbolmap(encseq)); for (showmatchinfo.queryunit = 0; /* Nothing */; showmatchinfo.queryunit++) { retval = gt_seqiterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } printf("process sequence " Formatuint64_t " of length %lu\n", PRINTuint64_tcast(showmatchinfo.queryunit),querylen); if (idxlocalioptions->doonline || idxlocalioptions->docompare) { multiapplysmithwaterman(swdpresource,encseq,query,querylen); } if (!idxlocalioptions->doonline || idxlocalioptions->docompare) { indexbasedlocali(limdfsresources, idxlocalioptions->matchscore, idxlocalioptions->mismatchscore, idxlocalioptions->gapstart, idxlocalioptions->gapextend, idxlocalioptions->threshold, query, querylen, dfst); } if (idxlocalioptions->docompare) { checkandresetstorematch(showmatchinfo.queryunit, &storeonline,&storeoffline); } gt_free(desc); } if (limdfsresources != NULL) { freeLimdfsresources(&limdfsresources,dfst); } if (swdpresource != NULL) { freeSWdpresource(swdpresource); swdpresource = NULL; } gt_seqiterator_delete(seqit); } if (idxlocalioptions->docompare) { freestorematch(&storeonline); freestorematch(&storeoffline); } } if (genericindex == NULL) { gt_assert(encseq != NULL); encodedsequence_free((Encodedsequence **) &encseq); } else { genericindex_delete(genericindex); } freeverboseinfo(&verboseinfo); return haserr ? -1 : 0; }