annotate BEDTools-Version-2.14.3/src/utils/BamTools/src/api/BamMultiReader.h @ 0:dfcd8b6c1bda

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