#include <QueryManager.h>
Collaboration diagram for QueryManager:

Public Member Functions | |
| QueryManager (SequenceReader &querySeqs, HashTableGeneric &subjectSeqs, ostream &monitoringStream=cerr) | |
| virtual | ~QueryManager () |
| void | doQuery (MatchAlgorithm &match, MatchTask &task, int queryStart=1, int queryEnd=-1) |
Public Attributes | |
| HashTableGeneric & | subjectTable_ |
| ostream & | monitoringStream_ |
Protected Attributes | |
| SequenceReader & | queryReader_ |
| MatchPolicy * | policy_ |
Private Member Functions | |
| QueryManager (const QueryManager &) | |
| QueryManager & | operator= (const QueryManager &) |
Definition at line 333 of file QueryManager.h.
| QueryManager::QueryManager | ( | SequenceReader & | querySeqs, | |
| HashTableGeneric & | subjectSeqs, | |||
| ostream & | monitoringStream = cerr | |||
| ) |
Definition at line 387 of file QueryManager.cpp.
References gBaseBits, HashTableGeneric::getBitsPerSymbol(), gResidueBits, MatchPolicyDNADNA::MatchPolicyDNADNA(), and MatchPolicy::subjectTable_.
00388 : 00389 queryReader_( querySeqs ), 00390 subjectTable_( subjectSeqs ), 00391 monitoringStream_( monitoringStream ) 00392 { 00393 monitoringStream_ << "constructing QueryManager\n"; 00394 00395 HashTableTranslated* pTransTable 00396 (dynamic_cast<HashTableTranslated*>(&subjectSeqs)); 00397 00398 if ( pTransTable != NULL ) 00399 { 00400 if (queryReader_.getBitsPerSymbol()==gResidueBits ) 00401 { 00402 monitoringStream_ 00403 << "Info: running protein query against translated DNA hash table.\n"; 00404 policy_ = new MatchPolicyProteinTranslated(*pTransTable); 00405 } 00406 else if (queryReader_.getBitsPerSymbol()==gBaseBits ) 00407 { 00408 monitoringStream_ 00409 << "Info: running DNA query against translated DNA hash table.\n"; 00410 policy_ = new MatchPolicyDNATranslated(*pTransTable); 00411 } 00412 else assert (1==0); 00413 } 00414 else // not a translated table 00415 { 00416 HashTablePackedProtein* pProteinTable 00417 (dynamic_cast<HashTablePackedProtein*>(&subjectSeqs)); 00418 if (pProteinTable!=NULL) 00419 { 00420 00421 if (queryReader_.getBitsPerSymbol()==gResidueBits) 00422 { 00423 monitoringStream_ 00424 << "Info: running protein query against protein hash table." 00425 << endl; 00426 policy_ = new MatchPolicyProteinProtein(*pProteinTable); 00427 } // ~if 00428 else if (queryReader_.getBitsPerSymbol()==gBaseBits) 00429 { 00430 monitoringStream_ 00431 << "Info: running DNA query against protein hash table." 00432 << endl; 00433 policy_ = new MatchPolicyDNAProtein(*pProteinTable); 00434 } // ~else if 00435 else assert (1==0); 00436 } // ~if 00437 else if (subjectTable_.getBitsPerSymbol()==gBaseBits ) 00438 { 00439 if (queryReader_.getBitsPerSymbol()==gBaseBits) 00440 { 00441 monitoringStream_ 00442 << "Info: running DNA query against DNA hash table." 00443 << endl; 00444 policy_ = new MatchPolicyDNADNA(subjectSeqs); 00445 } // ~if 00446 else 00447 { 00448 monitoringStream_ 00449 << "Error: can't run protein query against DNA hash table!\n"; 00450 throw SSAHAException 00451 ("Can't run protein query against DNA hash table!"); 00452 } // ~else 00453 00454 } // ~else if 00455 00456 } // ~else 00457 00458 } // ~constructor
Here is the call graph for this function:

| QueryManager::~QueryManager | ( | ) | [virtual] |
Definition at line 460 of file QueryManager.cpp.
References monitoringStream_, and policy_.
00461 { 00462 monitoringStream_ << "destructing QueryManager\n"; 00463 delete policy_; 00464 } // ~constructor
| QueryManager::QueryManager | ( | const QueryManager & | ) | [private] |
| void QueryManager::doQuery | ( | MatchAlgorithm & | match, | |
| MatchTask & | task, | |||
| int | queryStart = 1, |
|||
| int | queryEnd = -1 | |||
| ) |
Definition at line 468 of file QueryManager.cpp.
References SequenceReader::getLastSequenceName(), SequenceReader::getLastSequenceNumber(), HashTableGeneric::getNameReader(), SequenceReader::getNextSequence(), SequenceReader::getSequence(), monitoringStream_, queryReader_, SequenceReader::rewind(), subjectTable_, and wordLength.
Referenced by main(), and processQuery().
00472 { 00473 int numBasesInLast(0); 00474 int wordLength( (*policy_).getWordLength() ); 00475 00476 WordSequence querySeqFwd; 00477 00478 queryReader_.rewind(); 00479 00480 if ( queryStart == 1 ) 00481 { 00482 numBasesInLast = queryReader_.getNextSequence 00483 ( querySeqFwd, wordLength ); 00484 } // ~if 00485 else if ( queryStart > 1 ) 00486 { 00487 numBasesInLast = queryReader_.getSequence 00488 ( querySeqFwd, queryStart, wordLength ); 00489 } // ~else if 00490 else throw SSAHAException("Invalid query start value!"); 00491 00492 if ( numBasesInLast == -1 ) 00493 { 00494 monitoringStream_ << "Info: requested sequence start (" << queryStart 00495 << ") exceeds number of sequences in query database.\n"; 00496 return; 00497 } // ~if 00498 00499 do 00500 { 00501 00502 string queryName; 00503 queryReader_.getLastSequenceName( queryName ); 00504 int queryNum = queryReader_.getLastSequenceNumber(); 00505 int queryBases = ( querySeqFwd.size() - 1 )*wordLength 00506 + querySeqFwd.getNumBasesInLast(); 00507 00508 MatchStoreImp store 00509 ( queryName, 00510 queryNum, 00511 queryBases, 00512 subjectTable_.getNameReader() ); 00513 00514 // cout << "QM: doing " << queryNum << endl; 00515 (*policy_)( querySeqFwd, store, match ); 00516 00517 store.setup(); 00518 00519 task( store ); 00520 00521 if ( queryReader_.getLastSequenceNumber() == queryEnd ) break; 00522 00523 // clear the query sequence ready to read in next query 00524 querySeqFwd.clear(); 00525 00526 00527 // read in next query 00528 numBasesInLast = queryReader_.getNextSequence 00529 ( querySeqFwd, wordLength ); 00530 } // ~while 00531 while ( numBasesInLast != -1 ); 00532 00533 if ( ( queryReader_.getLastSequenceNumber() < queryEnd ) 00534 && ( queryEnd != - 1 ) ) 00535 { 00536 monitoringStream_ << "Info: requested final sequence (" << queryEnd 00537 << ") exceeded number of\nsequences in query database (" 00538 << queryReader_.getLastSequenceNumber() << ").\n"; 00539 } // ~if 00540 00541 return; 00542 00543 } // ~QueryManager::doQuery
Here is the call graph for this function:

Here is the caller graph for this function:

| QueryManager& QueryManager::operator= | ( | const QueryManager & | ) | [private] |
| ostream& QueryManager::monitoringStream_ |
SequenceReader& QueryManager::queryReader_ [protected] |
MatchPolicy* QueryManager::policy_ [protected] |
1.5.2