1 // ***************************************************************************
\r
2 // BamReader.h (c) 2009 Derek Barnett, Michael Str�mberg
\r
3 // Marth Lab, Department of Biology, Boston College
\r
4 // All rights reserved.
\r
5 // ---------------------------------------------------------------------------
\r
6 // Last modified: 2 September 2010 (DB)
\r
7 // ---------------------------------------------------------------------------
\r
8 // Uses BGZF routines were adapted from the bgzf.c code developed at the Broad
\r
10 // ---------------------------------------------------------------------------
\r
11 // Provides the basic functionality for reading BAM files
\r
12 // ***************************************************************************
\r
20 // BamTools includes
\r
23 namespace BamTools {
\r
27 // constructor / destructor
\r
35 // ----------------------
\r
36 // BAM file operations
\r
37 // ----------------------
\r
41 // returns whether index data is loaded (i.e. reader is able to Jump() or not)
\r
42 bool IsIndexLoaded(void) const;
\r
43 // returns whether reader is open for reading or not
\r
44 bool IsOpen(void) const;
\r
45 // performs random-access jump to reference, position
\r
46 bool Jump(int refID, int position = 0);
\r
47 // opens BAM file (and optional BAM index file, if provided)
\r
48 bool Open(const std::string& filename, const std::string& indexFilename = "");
\r
49 // returns file pointer to beginning of alignments
\r
51 // sets a region of interest (with left & right bound reference/position)
\r
52 // attempts a Jump() to left bound as well
\r
53 // returns success/failure of Jump()
\r
54 bool SetRegion(const BamRegion& region);
\r
55 bool SetRegion(const int& leftRefID, const int& leftBound, const int& rightRefID, const int& rightBound);
\r
57 // ----------------------
\r
58 // access alignment data
\r
59 // ----------------------
\r
61 // retrieves next available alignment (returns success/fail)
\r
62 bool GetNextAlignment(BamAlignment& bAlignment);
\r
64 // retrieves next available alignment core data (returns success/fail)
\r
65 // ** DOES NOT parse any character data (read name, bases, qualities, tag data)
\r
66 // these can be accessed, if necessary, from the supportData
\r
67 // useful for operations requiring ONLY positional or other alignment-related information
\r
68 bool GetNextAlignmentCore(BamAlignment& bAlignment);
\r
70 // ----------------------
\r
71 // access auxiliary data
\r
72 // ----------------------
\r
74 // returns SAM header text
\r
75 const std::string GetHeaderText(void) const;
\r
76 // returns number of reference sequences
\r
77 int GetReferenceCount(void) const;
\r
78 // returns vector of reference objects
\r
79 const BamTools::RefVector& GetReferenceData(void) const;
\r
80 // returns reference id (used for BamReader::Jump()) for the given reference name
\r
81 int GetReferenceID(const std::string& refName) const;
\r
82 // returns the name of the file associated with this BamReader
\r
83 const std::string GetFilename(void) const;
\r
85 // ----------------------
\r
86 // BAM index operations
\r
87 // ----------------------
\r
89 // creates index for BAM file, saves to file (default = bamFilename + ".bai")
\r
90 bool CreateIndex(bool useDefaultIndex = true);
\r
92 // private implementation
\r
94 struct BamReaderPrivate;
\r
95 BamReaderPrivate* d;
\r
98 } // namespace BamTools
\r
100 #endif // BAMREADER_H
\r