// ***************************************************************************
// BamReader_p.cpp (c) 2009 Derek Barnett
// Marth Lab, Department of Biology, Boston College
-// All rights reserved.
// ---------------------------------------------------------------------------
-// Last modified: 21 March 2011 (DB)
+// Last modified: 10 May 2011 (DB)
// ---------------------------------------------------------------------------
// Provides the basic functionality for reading BAM files
// ***************************************************************************
}
bool BamReaderPrivate::LocateIndex(const BamIndex::IndexType& preferredType) {
- return m_randomAccessController.LocateIndex(m_filename, preferredType);
+ return m_randomAccessController.LocateIndex(this, preferredType);
}
// opens BAM file (and index)
Close();
// attempt to open BgzfStream for reading
- if ( !m_stream.Open(filename, "rb") )
+ if ( !m_stream.Open(filename, "rb") ) {
+ cerr << "BamReader ERROR: Could not open BGZF stream for " << filename << endl;
return false;
+ }
// attempt to load header data
- if ( !LoadHeaderData() )
+ if ( !LoadHeaderData() ) {
+ cerr << "BamReader ERROR: Could not load header data for " << filename << endl;
+ Close();
return false;
+ }
// attempt to load reference data
- if ( !LoadReferenceData() )
+ if ( !LoadReferenceData() ) {
+ cerr << "BamReader ERROR: Could not load reference data for " << filename << endl;
+ Close();
return false;
+ }
// if all OK, store filename & offset of first alignment
m_filename = filename;
}
bool BamReaderPrivate::OpenIndex(const std::string& indexFilename) {
- return m_randomAccessController.OpenIndex(indexFilename);
+ return m_randomAccessController.OpenIndex(indexFilename, this);
}
// returns BAM file pointer to beginning of alignment data
return m_stream.Seek(m_alignmentsBeginOffset);
}
+bool BamReaderPrivate::Seek(const int64_t& position) {
+ return m_stream.Seek(position);
+}
+
void BamReaderPrivate::SetIndex(BamIndex* index) {
m_randomAccessController.SetIndex(index);
}
return m_randomAccessController.SetRegion(this, region, m_references.size());
}
-// returns handle to internal BgzfStream
-BgzfStream* BamReaderPrivate::Stream(void) {
- return &m_stream;
+int64_t BamReaderPrivate::Tell(void) const {
+ return m_stream.Tell();
}