// Return value: 0 if all PBWTs finished, otherwise the current position is returned static int pbwt_reader_next(pbwt_reader_t *reader, int nshared) { int i, min_pos = INT_MAX; char *min_als = NULL; // advance all readers, first looking at coordinates only for (i=0; i<reader->n; i++) { PBWT *p = reader->pbwt[i]; int j = reader->cpos[i]; if ( j>=p->N ) continue; // no more sites in this pbwt Site *site = arrp(p->sites, j, Site); char *als = dictName(variationDict, site->varD); // assuming: // - one chromosome only (no checking sequence name) // - sorted alleles (strcmp() on als) while ( j < p->N && site->x <= reader->mpos && (!reader->mals || strcmp(als,reader->mals)<=0) ) { site = arrp(p->sites, j, Site); als = dictName(variationDict, site->varD); reader->cpos[i] = j++; } if ( reader->cpos[i]+1 >= p->N && site->x == reader->mpos && (!reader->mals || !strcmp(als,reader->mals)) ) { // this pbwt is positioned on the last site which has been read before reader->cpos[i] = p->N; continue; } if ( reader->cpos[i] < p->N && site->x < min_pos ) { min_pos = site->x; min_als = als; } if ( site->x==min_pos && (!min_als || strcmp(als,min_als)<0) ) min_als = als; } if ( min_pos==INT_MAX ) { reader->mpos = 0; reader->mals = NULL; } else { reader->mpos = min_pos; reader->mals = min_als; } return reader->mpos; }
void test() { // Процедура для тестирования на "утечки" памяти QString dictName("счета"); for (int i = 0; i < 50; i++) { // 50 раз откроем, закроем справочник Dictionaries* dicts = TApplication::exemplar()->getDictionaries(); dicts->addDictionary(dictName); Dictionary* dict = dicts->getDictionary(dictName); // Откроем справочник и подсправочники 1-го уровня if (dict != 0) { dicts->removeDictionary(dictName); } } }
int DB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: dbChanged(); break; case 1: { bool _r = addRow((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])),(*reinterpret_cast< QString(*)>(_a[3]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 2: { QString _r = dictName((*reinterpret_cast< QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; case 3: removeRow((*reinterpret_cast< QString(*)>(_a[1]))); break; default: ; } _id -= 4; } return _id; }
int main(int argc, char *argv[]) { # include "addRegionOption.H" # include "addLoadFunctionPlugins.H" argList::validOptions.insert("overwrite", ""); argList::validOptions.insert("expression","expression to write"); argList::validOptions.insert("dictExt","Extension to the dictionary"); argList::validOptions.insert("relative", ""); argList::validOptions.insert("allowFunctionObjects",""); # include "setRootCase.H" printSwakVersion(); # include "createTime.H" Foam::instantList timeDirs = Foam::timeSelector::select0(runTime, args); # include "createNamedMesh.H" # include "loadFunctionPlugins.H" if(!args.options().found("allowFunctionObjects")) { runTime.functionObjects().off(); } else { runTime.functionObjects().start(); } const word oldInstance = mesh.pointsInstance(); bool overwrite = args.optionFound("overwrite"); bool relative = false; pointField newPoints; if (!overwrite) { runTime++; } if(args.optionFound("expression")) { if(args.optionFound("dictExt")) { FatalErrorIn(args.executable()) << "Can't specify 'dictExt' and 'expression' at the same time" << endl << exit(FatalError); } relative=args.optionFound("relative"); exprString expression( args.options()["expression"], dictionary::null ); FieldValueExpressionDriver driver( runTime.timeName(), runTime, mesh ); // no clearVariables needed here driver.parse(expression); if(!driver.resultIsTyp<pointVectorField>()) { FatalErrorIn(args.executable()) << "Expression " << expression << " does not evaluate to a pointVectorField but a " << driver.typ() << endl << exit(FatalError); } newPoints=driver.getResult<pointVectorField>().internalField(); } else { Info << "Dictionary mode" << nl << endl; if(args.optionFound("relative")) { FatalErrorIn(args.executable()) << "Option 'relative' not allowed in dictionary-mode" << endl << exit(FatalError); } word dictName("funkyWarpMeshDict"); if(args.optionFound("dictExt")) { dictName+="."+word(args.options()["dictExt"]); } IOdictionary warpDict ( IOobject ( dictName, runTime.system(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ); const word mode(warpDict.lookup("mode")); if(mode=="set") { relative=readBool(warpDict.lookup("relative")); exprString expression( warpDict.lookup("expression"), warpDict ); FieldValueExpressionDriver driver( runTime.timeName(), runTime, mesh ); driver.readVariablesAndTables(warpDict); driver.clearVariables(); driver.parse(expression); if(!driver.resultIsTyp<pointVectorField>()) { FatalErrorIn(args.executable()) << "Expression " << expression << " does not evaluate to a pointVectorField but a " << driver.typ() << endl << exit(FatalError); } newPoints=driver.getResult<pointVectorField>().internalField(); } else if (mode=="move") { notImplemented(args.executable()+" mode: move"); } else { FatalErrorIn(args.executable()) << "Possible values for 'mode' are 'set' or 'move'" << endl << exit(FatalError); } } if(relative) { newPoints += mesh.points(); } mesh.movePoints(newPoints); // Write mesh if (overwrite) { mesh.setInstance(oldInstance); } Info << nl << "Writing polyMesh to time " << runTime.timeName() << endl; IOstream::defaultPrecision(15); // Bypass runTime write (since only writes at outputTime) if ( !runTime.objectRegistry::writeObject ( runTime.writeFormat(), IOstream::currentVersion, runTime.writeCompression() #ifdef FOAM_REGIOOBJECT_WRITEOBJECT_WITH_VALID ,true #endif ) ) { FatalErrorIn(args.executable()) << "Failed writing polyMesh." << exit(FatalError); } // Write points goes here // Write fields runTime.write(); Info << "End\n" << endl; Info << nl << "Now run 'checkMesh' before you do anything else" << nl << endl; return 0; }
PBWT *pbwtMerge(const char **fnames, int nfiles) { pbwt_reader_t *reader = pbwt_reader_init(fnames, nfiles); int nhaps = 0, i; for (i=0; i<nfiles; i++) nhaps += reader->pbwt[i]->M; PBWT *out_pbwt = pbwtCreate(nhaps, 0); PbwtCursor *cursor = pbwtNakedCursorCreate(nhaps, 0); uchar *yseq = myalloc(nhaps, uchar); out_pbwt->yz = arrayCreate (1<<20, uchar) ; out_pbwt->sites = arrayReCreate(out_pbwt->sites, reader->pbwt[0]->N, Site); out_pbwt->chrom = strdup(reader->pbwt[0]->chrom); int pos, j; while ( (pos=pbwt_reader_next(reader, nfiles)) ) { // Merge only records shared by all files for (i=0; i<nfiles; i++) { PBWT *p = reader->pbwt[i]; Site *site = arrp(p->sites, reader->cpos[i], Site); // Both position and alleles must match. This requires that the records are sorted by alleles. if ( site->x!=pos ) break; char *als = dictName(variationDict, site->varD); if ( strcmp(als,reader->mals) ) break; } if ( i!=nfiles ) { // intersection: skip records which are not present in all files for (i=0; i<nfiles; i++) { PBWT *p = reader->pbwt[i]; Site *site = arrp(p->sites, reader->cpos[i], Site); if ( site->x!=pos ) continue; char *als = dictName(variationDict, site->varD); if ( strcmp(als,reader->mals) ) continue; PbwtCursor *c = reader->cursor[i]; reader->unpacked[i] += unpack3(arrp(p->yz,reader->unpacked[i],uchar), p->M, c->y, 0); pbwtCursorForwardsA(c); } continue; } // read and merge int ihap = 0; for (i=0; i<nfiles; i++) { PbwtCursor *c = reader->cursor[i]; PBWT *p = reader->pbwt[i]; Site *site = arrp(p->sites, reader->cpos[i], Site); reader->unpacked[i] += unpack3(arrp(p->yz,reader->unpacked[i],uchar), p->M, c->y, 0); for (j=0; j<p->M; j++) yseq[ihap + c->a[j]] = c->y[j]; pbwtCursorForwardsA(c); ihap += p->M; } // pack merged haplotypes for (j=0; j<nhaps; j++) cursor->y[j] = yseq[cursor->a[j]]; pack3arrayAdd(cursor->y, out_pbwt->M, out_pbwt->yz); pbwtCursorForwardsA(cursor); // insert new site arrayExtend(out_pbwt->sites, out_pbwt->N+1); Site *site = arrayp(out_pbwt->sites, out_pbwt->N, Site); site->x = pos; dictAdd(variationDict, reader->mals, &site->varD); out_pbwt->N++; } pbwtCursorToAFend (cursor, out_pbwt) ; free(yseq); pbwtCursorDestroy(cursor); pbwt_reader_destroy(reader); return out_pbwt; }