1 // ***************************************************************************
2 // BamReader_p.h (c) 2010 Derek Barnett
3 // Marth Lab, Department of Biology, Boston College
4 // ---------------------------------------------------------------------------
5 // Last modified: 10 October 2011 (DB)
6 // ---------------------------------------------------------------------------
7 // Provides the basic functionality for reading BAM files
8 // ***************************************************************************
17 // This file is not part of the BamTools API. It exists purely as an
18 // implementation detail. This header file may change from version to version
19 // without notice, or even be removed.
23 #include "api/BamAlignment.h"
24 #include "api/BamIndex.h"
25 #include "api/BamReader.h"
26 #include "api/SamHeader.h"
27 #include "api/internal/BamHeader_p.h"
28 #include "api/internal/BamRandomAccessController_p.h"
29 #include "api/internal/BgzfStream_p.h"
35 class BamReaderPrivate {
39 BamReaderPrivate(BamReader* parent);
40 ~BamReaderPrivate(void);
42 // BamReader interface
47 const std::string Filename(void) const;
48 bool IsOpen(void) const;
49 bool Open(const std::string& filename);
51 bool SetRegion(const BamRegion& region);
53 // access alignment data
54 bool GetNextAlignment(BamAlignment& alignment);
55 bool GetNextAlignmentCore(BamAlignment& alignment);
57 // access auxiliary data
58 std::string GetHeaderText(void) const;
59 SamHeader GetSamHeader(void) const;
60 int GetReferenceCount(void) const;
61 const RefVector& GetReferenceData(void) const;
62 int GetReferenceID(const std::string& refName) const;
65 bool CreateIndex(const BamIndex::IndexType& type);
66 bool HasIndex(void) const;
67 bool LocateIndex(const BamIndex::IndexType& preferredType);
68 bool OpenIndex(const std::string& indexFilename);
69 void SetIndex(BamIndex* index);
72 std::string GetErrorString(void) const;
73 void SetErrorString(const std::string& where, const std::string& what);
75 // internal methods, but available as a BamReaderPrivate 'interface'
77 // these methods should only be used by BamTools::Internal classes
78 // (currently only used by the BamIndex subclasses)
80 // retrieves header text from BAM file
81 void LoadHeaderData(void);
82 // retrieves BAM alignment under file pointer
83 // (does no overlap checking or character data parsing)
84 bool LoadNextAlignment(BamAlignment& alignment);
85 // builds reference data structure from BAM file
86 bool LoadReferenceData(void);
87 // seek reader to file position
88 bool Seek(const int64_t& position);
89 // return reader's file position
90 int64_t Tell(void) const;
95 // general BAM file data
96 int64_t m_alignmentsBeginOffset;
97 std::string m_filename;
98 RefVector m_references;
106 // BamReaderPrivate components
108 BamRandomAccessController m_randomAccessController;
112 std::string m_errorString;
115 } // namespace Internal
116 } // namespace BamTools
118 #endif // BAMREADER_P_H