bool FileIntersect::processUnsortedFiles() { const QuickString &databaseFilename = _context->getDatabaseFileName(); BinTree *binTree = new BinTree(_context->getDatabaseFileIdx(), _context); FileRecordMgr *queryFRM = new FileRecordMgr(_context->getQueryFileIdx(), _context); if (!queryFRM->open()) { return false; } if (!binTree->loadDB()) { fprintf(stderr, "Error: Unable to load database file %s.\n", databaseFilename.c_str()); delete binTree; exit(1); } _context->determineOutputType(); _recordOutputMgr->init(_context); while (!queryFRM->eof()) { Record *queryRecord = queryFRM->allocateAndGetNextRecord(); if (queryRecord == NULL) { continue; } RecordKeyList hitSet(queryRecord); binTree->getHits(queryRecord, hitSet); if (_context->getObeySplits()) { RecordKeyList keySet(hitSet.getKey()); RecordKeyList resultSet; _blockMgr->findBlockedOverlaps(keySet, hitSet, resultSet); processHits(resultSet); } else { processHits(hitSet); } queryFRM->deleteRecord(queryRecord); } queryFRM->close(); //clean up. delete queryFRM; delete binTree; return true; }
bool ContextBase::openFiles() { //Make a vector of FileRecordMgr objects by going through the vector //of filenames and opening each one. if (_allFilesOpened) { return true; } if (_fileNames.size() == 0) { //No input was specified. Error and exit. _errorMsg += "\n***** ERROR: No input file given. Exiting. *****"; return false; } _files.resize(_fileNames.size()); for (int i = 0; i < (int)_fileNames.size(); i++) { FileRecordMgr *frm = getNewFRM(_fileNames[i], i); if (hasGenomeFile()) { frm->setGenomeFile(_genomeFile); } //If we're going to do column operations, and an input file // is BAM, we'll need the full flags. if (hasColumnOpsMethods()) { setUseFullBamTags(true); } frm->setFullBamFlags(_useFullBamTags); frm->setIsSorted(_sortedInput); frm->setIoBufSize(_ioBufSize); frm->setIsGroupBy(_program == GROUP_BY); if (!frm->open(_inheader)) { return false; } if (_noEnforceCoordSort) { frm->setNoEnforceCoodSort(true); } _files[i] = frm; } _allFilesOpened = true; return true; }
bool ContextBase::openFiles() { //Make a vector of FileRecordMgr objects by going through the vector //of filenames and opening each one. if (_allFilesOpened) { return true; } _files.resize(_fileNames.size()); for (int i = 0; i < (int)_fileNames.size(); i++) { FileRecordMgr *frm = new FileRecordMgr(_fileNames[i], _sortedInput); if (hasGenomeFile()) { frm->setGenomeFile(_genomeFile); } frm->setFullBamFlags(_useFullBamTags); if (!frm->open()) { return false; } _files[i] = frm; } _allFilesOpened = true; return true; }