]> git.donarmstrong.com Git - bamtools.git/blob - src/api/BamMultiReader.h
Major update to BamTools version 1.0
[bamtools.git] / src / api / BamMultiReader.h
1 // ***************************************************************************
2 // BamMultiReader.h (c) 2010 Erik Garrison, Derek Barnett
3 // Marth Lab, Department of Biology, Boston College
4 // All rights reserved.
5 // ---------------------------------------------------------------------------
6 // Last modified: 15 March 2011 (DB)
7 // ---------------------------------------------------------------------------
8 // Convenience class for reading multiple BAM files.
9 // ***************************************************************************
10
11 #ifndef BAMMULTIREADER_H
12 #define BAMMULTIREADER_H
13
14 #include <api/api_global.h>
15 #include <api/BamReader.h>
16 #include <map>
17 #include <sstream>
18 #include <string>
19 #include <utility>
20
21 namespace BamTools {
22
23 namespace Internal {
24     class BamMultiReaderPrivate;
25 } // namespace Internal
26
27 class API_EXPORT BamMultiReader {
28
29     public:
30         enum SortOrder { SortedByPosition = 0
31                        , SortedByReadName
32                        , Unsorted
33                        };
34
35     // constructor / destructor
36     public:
37         BamMultiReader(void);
38         ~BamMultiReader(void);
39
40     // public interface
41     public:
42
43         // ----------------------
44         // BAM file operations
45         // ----------------------
46
47         // closes all open BAM files
48         void Close(void);
49         // close only the requested BAM file
50         void CloseFile(const std::string& filename);
51         // returns list of filenames for all open BAM files
52         const std::vector<std::string> Filenames(void) const;
53         // returns true if multireader has any open BAM files
54         bool HasOpenReaders(void) const;
55         // performs random-access jump within current BAM files
56         bool Jump(int refID, int position = 0);
57         // opens BAM files
58         bool Open(const std::vector<std::string>& filenames);
59         // opens a single BAM file, adding to any other current BAM files
60         bool OpenFile(const std::string& filename);
61         // returns file pointers to beginning of alignments
62         bool Rewind(void);
63         // sets the target region of interest
64         bool SetRegion(const BamRegion& region);
65         // sets the target region of interest
66         bool SetRegion(const int& leftRefID,
67                        const int& leftPosition,
68                        const int& rightRefID,
69                        const int& rightPosition);
70
71         // ----------------------
72         // access alignment data
73         // ----------------------
74
75         // retrieves next available alignment
76         bool GetNextAlignment(BamAlignment& alignment);
77         // retrieves next available alignmnet (without populating the alignment's string data fields)
78         bool GetNextAlignmentCore(BamAlignment& alignment);
79
80         // sets the expected sorting order for reading across multiple BAM files
81         void SetSortOrder(const SortOrder& order);
82
83         // ----------------------
84         // access auxiliary data
85         // ----------------------
86
87         // returns unified SAM header for all files
88         SamHeader GetHeader(void) const;
89         // returns unified SAM header text for all files
90         std::string GetHeaderText(void) const;
91         // returns number of reference sequences
92         int GetReferenceCount(void) const;
93         // returns all reference sequence entries.
94         const BamTools::RefVector GetReferenceData(void) const;
95         // returns the ID of the reference with this name.
96         int GetReferenceID(const std::string& refName) const;
97
98         // ----------------------
99         // BAM index operations
100         // ----------------------
101
102         // creates index files for current BAM files
103         bool CreateIndexes(const BamIndex::IndexType& type = BamIndex::STANDARD);
104         // returns true if all BAM files have index data available
105         bool HasIndexes(void) const;
106         // looks for index files that match current BAM files
107         bool LocateIndexes(const BamIndex::IndexType& preferredType = BamIndex::STANDARD);
108         // opens index files for current BAM files.
109         bool OpenIndexes(const std::vector<std::string>& indexFilenames);
110         // changes the caching behavior of the index data
111         void SetIndexCacheMode(const BamIndex::IndexCacheMode& mode);
112
113     // deprecated methods
114     public:
115         // returns \c true if all BAM files have index data available.
116         bool IsIndexLoaded(void) const;
117         // convenience method for printing filenames to stdout
118         void PrintFilenames(void) const;
119
120     // private implementation
121     private:
122         Internal::BamMultiReaderPrivate* d;
123 };
124
125 } // namespace BamTools
126
127 #endif // BAMMULTIREADER_H