SequenceReaderFilter Class Reference

#include <SequenceReaderFilter.h>

Inheritance diagram for SequenceReaderFilter:

Inheritance graph
[legend]
Collaboration diagram for SequenceReaderFilter:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 SequenceReaderFilter (SequenceReader *pSeq, ifstream *pFilterSource, ostream &monitoringStream=cerr)
 SequenceReaderFilter (SequenceReader *pSeq, const char *filterFileName, ostream &monitoringStream=cerr)
 SequenceReaderFilter (const SequenceReaderFilter &rhs)
 ~SequenceReaderFilter ()
virtual SequenceReaderclone (void)
void readFilterNames (ifstream *pFilterSource)
virtual void changeMode (SequenceReaderMode *pMode)
virtual void rewind (void)
virtual int getNextSequence (WordSequence &nextSeq, int wordLength)
virtual int getSequence (WordSequence &nextSeq, SequenceNumber sequenceNumber, int wordLength)
virtual void getLastSequenceName (string &seqName) const
virtual int getBitsPerSymbol (void) const
virtual SourceDataType getSourceDataType (void) const
int getNumFiltered (void) const
virtual bool printName (ostream &os, SequenceNumber seqNum)
virtual bool printSideInfo (ostream &os, SequenceNumber seqNum)
virtual bool printSource (ostream &os, SequenceNumber seqNum)
virtual bool findSequence (SequenceNumber seqNum)
virtual void extractSource (char **pSource, SequenceNumber seqNum, SequenceOffset seqStart, SequenceOffset seqEnd)
virtual void saveIndexImp (ostream &fileFile, ostream &indexFile, int &fileNumber)
virtual SequenceReaderStatesaveState (void) const
virtual void restoreState (SequenceReaderState *pState)

Protected Member Functions

virtual SequenceNumber computeNumSequencesInFile (void)

Protected Attributes

SequenceReaderpSeq_
StringHashpFilterNames_
vector< SequenceNumberfilterNums_
int numFiltered_

Private Member Functions

SequenceReaderFilteroperator= (const SequenceReaderFilter &)

Detailed Description

Definition at line 127 of file SequenceReaderFilter.h.


Constructor & Destructor Documentation

SequenceReaderFilter::SequenceReaderFilter ( SequenceReader pSeq,
ifstream *  pFilterSource,
ostream &  monitoringStream = cerr 
)

Definition at line 49 of file SequenceReaderFilter.cpp.

Referenced by clone().

00051                               :
00052   SequenceReader( monitoringStream ),
00053   pSeq_(pSeq),
00054   pFilterNames_( new StringHash ),
00055   numFiltered_(0)
00056 {
00057   monitoringStream_ 
00058     << "constructing SequenceReaderFilter" << endl;
00059   readFilterNames( pFilterSource );
00060 } // ~constructor

Here is the caller graph for this function:

SequenceReaderFilter::SequenceReaderFilter ( SequenceReader pSeq,
const char *  filterFileName,
ostream &  monitoringStream = cerr 
)

Definition at line 63 of file SequenceReaderFilter.cpp.

00065                               :
00066   SequenceReader( monitoringStream ),
00067   pSeq_(pSeq),
00068   pFilterNames_( new StringHash ),
00069   numFiltered_(0)
00070 {
00071   monitoringStream_ 
00072     << "constructing SequenceReaderFilter for file " 
00073     << filterFileName << endl;
00074   readFilterNames( new ifstream( filterFileName ) );
00075 } // ~constructor

SequenceReaderFilter::SequenceReaderFilter ( const SequenceReaderFilter rhs  ) 

Definition at line 111 of file SequenceReaderFilter.cpp.

References SequenceReader::monitoringStream_.

00111                                                                            :
00112 SequenceReader( rhs.monitoringStream_ ),
00113 pSeq_( rhs.pSeq_->clone() )
00114 {
00115   monitoringStream_ << "copy constructing SequenceReaderFilter" << endl;
00116   // copy set across
00117   monitoringStream_ << "copy constructor not implemented!!" << endl;
00118   assert(1==0);
00119 } // ~destructor

SequenceReaderFilter::~SequenceReaderFilter (  ) 

Definition at line 123 of file SequenceReaderFilter.cpp.

References SequenceReader::monitoringStream_, pFilterNames_, and pSeq_.

00124 {
00125   monitoringStream_ << "destructing SequenceReaderFilter" << endl;
00126   delete pSeq_;
00127   delete pFilterNames_;
00128 } // ~destructor


Member Function Documentation

virtual SequenceReader* SequenceReaderFilter::clone ( void   )  [inline, virtual]

Implements SequenceReader.

Definition at line 168 of file SequenceReaderFilter.h.

References SequenceReaderFilter().

00169   { 
00170     return new SequenceReaderFilter( *this ); 
00171   }

Here is the call graph for this function:

void SequenceReaderFilter::readFilterNames ( ifstream *  pFilterSource  ) 

Definition at line 82 of file SequenceReaderFilter.cpp.

References filterNums_, StringHash::makeBins(), SequenceReader::monitoringStream_, and pFilterNames_.

00083 {
00084   if ( pFilterSource->fail() )
00085   {
00086     throw SSAHAException
00087       ( "SequenceReaderFile - unable to open filter file ");
00088 
00089   } // ~if
00090 
00091   //  string thisName;
00092 
00093   //  while (*pFilterSource>>thisName) pFilterNames_->insert(thisName);
00094   pFilterNames_->push_back( (string) "" );
00095   while (*pFilterSource>>pFilterNames_->back()) pFilterNames_->push_back( (string) "" );
00096   pFilterNames_->pop_back();
00097   pFilterNames_->makeBins();
00098 
00099   monitoringStream_ << "Read in " << pFilterNames_->size() 
00100                     << " names to filter out" << endl;
00101   filterNums_.push_back(0);
00102   pFilterSource->close();
00103   delete pFilterSource;
00104 }

Here is the call graph for this function:

virtual void SequenceReaderFilter::changeMode ( SequenceReaderMode pMode  )  [inline, virtual]

Implements SequenceReader.

Definition at line 191 of file SequenceReaderFilter.h.

References SequenceReader::changeMode(), and pSeq_.

00192   {
00193     pSeq_->changeMode( pMode );
00194   }

Here is the call graph for this function:

void SequenceReaderFilter::rewind ( void   )  [virtual]

Implements SequenceReader.

Definition at line 243 of file SequenceReaderFilter.cpp.

References SequenceReader::lastSequenceNumber_, pSeq_, and SequenceReader::rewind().

Referenced by main().

00244 {
00245   pSeq_->rewind();
00246   lastSequenceNumber_ = 0;
00247 } // ~rewind 

Here is the call graph for this function:

Here is the caller graph for this function:

int SequenceReaderFilter::getNextSequence ( WordSequence nextSeq,
int  wordLength 
) [virtual]

Implements SequenceReader.

Definition at line 210 of file SequenceReaderFilter.cpp.

References filterNums_, findSequence(), SequenceReader::getSequence(), SequenceReader::lastSequenceNumber_, and pSeq_.

Referenced by main().

00212 {
00213   if (!findSequence(lastSequenceNumber_+1)) 
00214   {
00215     assert(filterNums_.size()==lastSequenceNumber_+1);
00216     return -1;
00217   } // ~if
00218   else 
00219   {
00220     ++lastSequenceNumber_;
00221     return pSeq_->getSequence( nextSeq, filterNums_[lastSequenceNumber_], 
00222                                  wordLength );
00223   } // ~else
00224 } // ~SequenceReaderFilter::getNextSequence

Here is the call graph for this function:

Here is the caller graph for this function:

int SequenceReaderFilter::getSequence ( WordSequence nextSeq,
SequenceNumber  sequenceNumber,
int  wordLength 
) [virtual]

Implements SequenceReader.

Definition at line 232 of file SequenceReaderFilter.cpp.

References filterNums_, findSequence(), SequenceReader::getSequence(), SequenceReader::lastSequenceNumber_, and pSeq_.

Referenced by main().

00233 {
00234   if (!findSequence(sequenceNumber)) return -1;
00235   assert(filterNums_.size()>=sequenceNumber+1);
00236   lastSequenceNumber_=sequenceNumber;
00237   return pSeq_->getSequence
00238     ( nextSeq, filterNums_[sequenceNumber], wordLength );
00239   
00240 } // ~SequenceReaderFilter::getSequence

Here is the call graph for this function:

Here is the caller graph for this function:

void SequenceReaderFilter::getLastSequenceName ( string &  seqName  )  const [virtual]

Implements SequenceReader.

Definition at line 253 of file SequenceReaderFilter.cpp.

References SequenceReader::getLastSequenceName(), and pSeq_.

Referenced by main().

00254 {
00255   return pSeq_->getLastSequenceName(seqName);
00256 } // ~SequenceReaderFilter::getLastSequenceName( string& seqName ) const

Here is the call graph for this function:

Here is the caller graph for this function:

virtual int SequenceReaderFilter::getBitsPerSymbol ( void   )  const [inline, virtual]

Implements SequenceReader.

Definition at line 233 of file SequenceReaderFilter.h.

References SequenceReader::getBitsPerSymbol(), and pSeq_.

Referenced by main().

00234   {
00235     return pSeq_->getBitsPerSymbol();
00236   }

Here is the call graph for this function:

Here is the caller graph for this function:

virtual SourceDataType SequenceReaderFilter::getSourceDataType ( void   )  const [inline, virtual]

Implements SequenceReader.

Definition at line 242 of file SequenceReaderFilter.h.

References SequenceReader::getSourceDataType(), and pSeq_.

Referenced by main().

00243   {
00244     return pSeq_->getSourceDataType();
00245   }

Here is the call graph for this function:

Here is the caller graph for this function:

int SequenceReaderFilter::getNumFiltered ( void   )  const [inline]

Definition at line 252 of file SequenceReaderFilter.h.

References numFiltered_.

Referenced by main().

00253   {
00254     return numFiltered_;
00255   }

Here is the caller graph for this function:

bool SequenceReaderFilter::printName ( ostream &  os,
SequenceNumber  seqNum 
) [virtual]

Implements SequenceReader.

Definition at line 262 of file SequenceReaderFilter.cpp.

References filterNums_, findSequence(), SequenceReader::printName(), and pSeq_.

00263 {
00264   if (!findSequence(seqNum)) return false;
00265   assert(filterNums_.size()>=seqNum+1);
00266   pSeq_->printName(os, filterNums_[seqNum]);
00267   return true;
00268 } // ~SequenceReaderFilter::printName( ostream& os, SequenceNumber seqNum)  

Here is the call graph for this function:

bool SequenceReaderFilter::printSideInfo ( ostream &  os,
SequenceNumber  seqNum 
) [virtual]

Implements SequenceReader.

Definition at line 275 of file SequenceReaderFilter.cpp.

References filterNums_, findSequence(), SequenceReader::printName(), and pSeq_.

00276 {
00277   if (!findSequence(seqNum)) return false;
00278   assert(filterNums_.size()>=seqNum+1);
00279   pSeq_->printName(os, filterNums_[seqNum]);
00280   return true;
00281 } // ~bool SequenceReaderFilter::printSideInfo

Here is the call graph for this function:

bool SequenceReaderFilter::printSource ( ostream &  os,
SequenceNumber  seqNum 
) [virtual]

Implements SequenceReader.

Definition at line 288 of file SequenceReaderFilter.cpp.

References filterNums_, findSequence(), SequenceReader::printName(), and pSeq_.

00289 {
00290   if (!findSequence(seqNum)) return false;
00291   assert(filterNums_.size()>=seqNum+1);
00292   pSeq_->printName(os, filterNums_[seqNum]);
00293   return true;
00294 } // ~SequenceReaderFilter::printSource

Here is the call graph for this function:

bool SequenceReaderFilter::findSequence ( SequenceNumber  seqNum  )  [virtual]

Implements SequenceReader.

Definition at line 130 of file SequenceReaderFilter.cpp.

References SequenceReader::allSequencesRead_, filterNums_, StringHash::isPresent(), SequenceReader::monitoringStream_, numFiltered_, SequenceReader::numSequencesInFile_, pFilterNames_, SequenceReader::printName(), and pSeq_.

Referenced by computeNumSequencesInFile(), getNextSequence(), getSequence(), printName(), printSideInfo(), and printSource().

00131 {
00132   if ( seqNum <= filterNums_.size()-1 ) return true; // no neeed!
00133   if (allSequencesRead_)
00134   {
00135     monitoringStream_ 
00136       << "Requested sequence number (" << seqNum 
00137       << ")\nis outside range of sequences in file (1 to " 
00138       << numSequencesInFile_ << ")." << endl;
00139     return false;
00140   } // ~if
00141 
00142   SequenceNumber lastInSource(filterNums_.back());
00143   // = (filterNums_.empty() ? 0 : filterNums_.back()); no need, never empty
00144   std::ostrstream buffer;
00145   string name;
00146 
00147   while (filterNums_.size()!=seqNum+1)
00148   {
00149 
00150     ++lastInSource;
00151 
00152     if ( pSeq_->printName( buffer, lastInSource ) == false )
00153     {
00154       if(allSequencesRead_==false)
00155       {
00156         allSequencesRead_=true;
00157         if (pFilterNames_!=NULL) 
00158         {
00159           monitoringStream_ 
00160           << "deleting filter name data, no longer needed" << endl;
00161           delete pFilterNames_;
00162           pFilterNames_=NULL;  
00163         } // ~if
00164         numSequencesInFile_ = filterNums_.size()-1;
00165         monitoringStream_ 
00166           << "Requested sequence number (" << seqNum
00167           << ")\nis outside range of sequences in file (1 to " 
00168           << numSequencesInFile_ << ")." << endl;
00169 
00170       } // ~if
00171       return false;
00172     } // ~catch
00173 
00174     name=buffer.str();
00175     string::size_type nameEnd=name.find_first_of('\t');
00176     // NB stop at tab not spc
00177     if (nameEnd!=string::npos) name.erase(nameEnd,name.size());
00178 
00179     //    if ( pFilterNames_->find(name)==pFilterNames_->end() )
00180     if ( !pFilterNames_->isPresent(name) )
00181     {
00182       filterNums_.push_back(lastInSource);
00183       //  monitoringStream_ << filterNums_.size()-1 << " " << lastInSource << endl;
00184     } // ~if
00185     else
00186     {
00187       //      monitoringStream_ << filterNums_.size()-1 << " " << lastInSource 
00188       //                << " Filtered: " << name << " " 
00189       //                << *(pFilterNames_->find(name)) << endl;
00190       numFiltered_++;
00191     } // ~else
00192 
00193 
00194     buffer.freeze(false); // release memory to write further stuff to buffer  
00195     buffer.seekp(0,ios::beg); // ensure next write is to start of buffer
00196   
00197   } // ~while
00198 
00199   return true;
00200 
00201 } // ~SequenceReaderFilter::findSequence( SequenceNumber seqNum )

Here is the call graph for this function:

Here is the caller graph for this function:

void SequenceReaderFilter::extractSource ( char **  pSource,
SequenceNumber  seqNum,
SequenceOffset  seqStart,
SequenceOffset  seqEnd 
) [virtual]

Reimplemented from SourceReader.

Definition at line 316 of file SequenceReaderFilter.cpp.

References SourceReader::extractSource(), filterNums_, and pSeq_.

00320 {
00321   //  cout << seqNum << " " << filterNums_[seqNum] << " " << seqStart << " " << seqEnd << endl; 
00322   pSeq_->extractSource( pSource, filterNums_[seqNum], seqStart, seqEnd );
00323 } // ~void SequenceReaderFilter::extractSource

Here is the call graph for this function:

void SequenceReaderFilter::saveIndexImp ( ostream &  fileFile,
ostream &  indexFile,
int &  fileNumber 
) [virtual]

Reimplemented from SourceReader.

Definition at line 330 of file SequenceReaderFilter.cpp.

References filterNums_, SequenceReader::getNumSequencesInFile(), pSeq_, and SourceReader::saveIndexImp().

00333 {
00334   std::strstream indexTemp;
00335   pSeq_->saveIndexImp( fileFile, indexTemp, fileNumber );
00336   const SeqIndexInfo* pIndex= (const SeqIndexInfo*)indexTemp.str();
00337 
00338   // writing individually is slow as a slow thing on Valium ...
00339   //  int numSeqs(getNumSequencesInFile());
00340   //  for (int i(1); i<=numSeqs; i++)
00341   //  {
00342   //    //        cout << "Index: " << i << " " << filterNums_[i]-1 << " "  
00343   //    //     << pIndex[filterNums_[i]-1].fileNum
00344     //   << " " << pIndex[filterNums_[i]-1].seqPos << endl;
00345   //   indexFile.write
00346   //    ( (const char*)&pIndex[ filterNums_[i]-1 ], sizeof(SeqIndexInfo) );
00347   //  } // ~for
00348 
00349   int numSeqs(getNumSequencesInFile());
00350   vector<SeqIndexInfo> newIndex;
00351   newIndex.reserve(numSeqs);
00352 
00353   for (int i(1); i<=numSeqs; i++)
00354   {
00355     //        cout << "Index: " << i << " " << filterNums_[i]-1 << " "  
00356     //     << pIndex[filterNums_[i]-1].fileNum
00357     //   << " " << pIndex[filterNums_[i]-1].seqPos << endl;
00358     newIndex.push_back(pIndex[ filterNums_[i]-1 ]);
00359   } // ~for
00360 
00361   indexFile.write
00362     ( (const char*)&newIndex[ 0 ], numSeqs*sizeof(SeqIndexInfo) );
00363 
00364 
00365 
00366 } // ~void SequenceReaderFilter::saveIndexImp

Here is the call graph for this function:

virtual SequenceReaderState* SequenceReaderFilter::saveState ( void   )  const [inline, virtual]

Reimplemented from SequenceReader.

Definition at line 299 of file SequenceReaderFilter.h.

References SequenceReader::lastSequenceNumber_, and pSeq_.

00300   {
00301     return new SequenceReaderFilterState( lastSequenceNumber_, pSeq_ );
00302   }

virtual void SequenceReaderFilter::restoreState ( SequenceReaderState pState  )  [inline, virtual]

Reimplemented from SequenceReader.

Definition at line 309 of file SequenceReaderFilter.h.

References SequenceReaderState::lastSequenceNumber_, SequenceReader::lastSequenceNumber_, pSeq_, SequenceReaderFilterState::pState_, and SequenceReader::restoreState().

00310   {
00311     SequenceReaderFilterState* p
00312       (dynamic_cast<SequenceReaderFilterState*>(pState));
00313     assert(p!=NULL);
00314     lastSequenceNumber_ = p->lastSequenceNumber_;
00315     pSeq_->restoreState( p->pState_ );
00316     delete pState;
00317   }

Here is the call graph for this function:

SequenceNumber SequenceReaderFilter::computeNumSequencesInFile ( void   )  [protected, virtual]

Implements SequenceReader.

Definition at line 296 of file SequenceReaderFilter.cpp.

References findSequence(), SequenceReader::getNumSequencesInFile(), SequenceReader::numSequencesInFile_, and pSeq_.

00297 {
00298   try
00299   {
00300     // this will always work out num seqs in pSeq_ 
00301     findSequence( 1+pSeq_->getNumSequencesInFile() );
00302   } // ~try
00303   catch( const NumberOutOfRange& err )
00304     {} // ~catch
00305 
00306   return numSequencesInFile_;
00307 
00308 } // ~SequenceReaderFilter::computeNumSequencesInFile( void )

Here is the call graph for this function:

SequenceReaderFilter& SequenceReaderFilter::operator= ( const SequenceReaderFilter  )  [private]


Member Data Documentation

SequenceReader* SequenceReaderFilter::pSeq_ [protected]

Definition at line 339 of file SequenceReaderFilter.h.

Referenced by changeMode(), computeNumSequencesInFile(), extractSource(), findSequence(), getBitsPerSymbol(), getLastSequenceName(), getNextSequence(), getSequence(), getSourceDataType(), printName(), printSideInfo(), printSource(), restoreState(), rewind(), saveIndexImp(), saveState(), and ~SequenceReaderFilter().

StringHash* SequenceReaderFilter::pFilterNames_ [protected]

Definition at line 342 of file SequenceReaderFilter.h.

Referenced by findSequence(), readFilterNames(), and ~SequenceReaderFilter().

vector<SequenceNumber> SequenceReaderFilter::filterNums_ [protected]

Definition at line 346 of file SequenceReaderFilter.h.

Referenced by extractSource(), findSequence(), getNextSequence(), getSequence(), printName(), printSideInfo(), printSource(), readFilterNames(), and saveIndexImp().

int SequenceReaderFilter::numFiltered_ [protected]

Definition at line 347 of file SequenceReaderFilter.h.

Referenced by findSequence(), and getNumFiltered().


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