QueryManager Class Reference

#include <QueryManager.h>

Collaboration diagram for QueryManager:

Collaboration graph
[legend]
List of all members.

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

HashTableGenericsubjectTable_
ostream & monitoringStream_

Protected Attributes

SequenceReaderqueryReader_
MatchPolicypolicy_

Private Member Functions

 QueryManager (const QueryManager &)
QueryManageroperator= (const QueryManager &)

Detailed Description

Definition at line 333 of file QueryManager.h.


Constructor & Destructor Documentation

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]


Member Function Documentation

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]


Member Data Documentation

HashTableGeneric& QueryManager::subjectTable_

Definition at line 389 of file QueryManager.h.

Referenced by doQuery().

ostream& QueryManager::monitoringStream_

Definition at line 390 of file QueryManager.h.

Referenced by doQuery(), and ~QueryManager().

SequenceReader& QueryManager::queryReader_ [protected]

Definition at line 397 of file QueryManager.h.

Referenced by doQuery().

MatchPolicy* QueryManager::policy_ [protected]

Definition at line 398 of file QueryManager.h.

Referenced by ~QueryManager().


The documentation for this class was generated from the following files:
Generated on Fri Dec 21 13:19:31 2007 for ssaha by  doxygen 1.5.2