1 // ***************************************************************************
2 // BamReader_p.h (c) 2010 Derek Barnett
3 // Marth Lab, Department of Biology, Boston College
4 // ---------------------------------------------------------------------------
5 // Last modified: 5 April 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);
70 void SetIndexCacheMode(const BamIndex::IndexCacheMode& mode);
72 // internal methods, but available as a BamReaderPrivate 'interface'
74 // these methods should only be used by BamTools::Internal classes
75 // (currently only used by the BamIndex subclasses)
77 // retrieves header text from BAM file
78 bool LoadHeaderData(void);
79 // retrieves BAM alignment under file pointer
80 // (does no overlap checking or character data parsing)
81 bool LoadNextAlignment(BamAlignment& alignment);
82 // builds reference data structure from BAM file
83 bool LoadReferenceData(void);
84 // seek reader to file position
85 bool Seek(const int64_t& position);
86 // return reader's file position
87 int64_t Tell(void) const;
92 // general BAM file data
93 int64_t m_alignmentsBeginOffset;
94 std::string m_filename;
95 RefVector m_references;
103 // BamReaderPrivate components
105 BamRandomAccessController m_randomAccessController;
109 } // namespace Internal
110 } // namespace BamTools
112 #endif // BAMREADER_P_H