#include <SequenceReaderFilter.h>
Inheritance diagram for SequenceReaderFilter:


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 SequenceReader * | clone (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 SequenceReaderState * | saveState (void) const |
| virtual void | restoreState (SequenceReaderState *pState) |
Protected Member Functions | |
| virtual SequenceNumber | computeNumSequencesInFile (void) |
Protected Attributes | |
| SequenceReader * | pSeq_ |
| StringHash * | pFilterNames_ |
| vector< SequenceNumber > | filterNums_ |
| int | numFiltered_ |
Private Member Functions | |
| SequenceReaderFilter & | operator= (const SequenceReaderFilter &) |
Definition at line 127 of file SequenceReaderFilter.h.
| 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
| 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] |
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().
1.5.2