Mercurial > repos > zzhou > spp_phantompeak
comparison spp/src/BamMultiReader.h @ 6:ce08b0efa3fd draft
Uploaded
| author | zzhou |
|---|---|
| date | Tue, 27 Nov 2012 16:11:40 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 5:608a8e0eac56 | 6:ce08b0efa3fd |
|---|---|
| 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: 19 November 2010 (DB) | |
| 7 // --------------------------------------------------------------------------- | |
| 8 // Functionality for simultaneously reading multiple BAM files | |
| 9 // *************************************************************************** | |
| 10 | |
| 11 #ifndef BAMMULTIREADER_H | |
| 12 #define BAMMULTIREADER_H | |
| 13 | |
| 14 #include <api_global.h> | |
| 15 #include <BamReader.h> | |
| 16 #include <map> | |
| 17 #include <sstream> | |
| 18 #include <string> | |
| 19 #include <utility> | |
| 20 | |
| 21 namespace BamTools { | |
| 22 | |
| 23 // index mapping reference/position pairings to bamreaders and their alignments | |
| 24 typedef std::multimap<std::pair<int, int>, std::pair<BamReader*, BamAlignment*> > AlignmentIndex; | |
| 25 | |
| 26 class API_EXPORT BamMultiReader { | |
| 27 | |
| 28 // constructor / destructor | |
| 29 public: | |
| 30 BamMultiReader(void); | |
| 31 ~BamMultiReader(void); | |
| 32 | |
| 33 // public interface | |
| 34 public: | |
| 35 | |
| 36 // positioning | |
| 37 int CurrentRefID; | |
| 38 int CurrentLeft; | |
| 39 | |
| 40 // region under analysis, specified using SetRegion | |
| 41 BamRegion Region; | |
| 42 | |
| 43 // ---------------------- | |
| 44 // BAM file operations | |
| 45 // ---------------------- | |
| 46 | |
| 47 // close BAM files | |
| 48 void Close(void); | |
| 49 | |
| 50 // opens BAM files (and optional BAM index files, if provided) | |
| 51 // @openIndexes - triggers index opening, useful for suppressing | |
| 52 // error messages during merging of files in which we may not have | |
| 53 // indexes. | |
| 54 // @coreMode - setup our first alignments using GetNextAlignmentCore(); | |
| 55 // also useful for merging | |
| 56 // @preferStandardIndex - look for standard BAM index ".bai" first. If false, | |
| 57 // will look for BamTools index ".bti". | |
| 58 bool Open(const std::vector<std::string>& filenames, bool openIndexes = true, bool coreMode = false, bool preferStandardIndex = false); | |
| 59 | |
| 60 // returns whether underlying BAM readers ALL have an index loaded | |
| 61 // this is useful to indicate whether Jump() or SetRegion() are possible | |
| 62 bool IsIndexLoaded(void) const; | |
| 63 | |
| 64 // performs random-access jump to reference, position | |
| 65 bool Jump(int refID, int position = 0); | |
| 66 | |
| 67 // sets the target region | |
| 68 bool SetRegion(const BamRegion& region); | |
| 69 bool SetRegion(const int&, const int&, const int&, const int&); // convenience function to above | |
| 70 | |
| 71 // returns file pointers to beginning of alignments | |
| 72 bool Rewind(void); | |
| 73 | |
| 74 // ---------------------- | |
| 75 // access alignment data | |
| 76 // ---------------------- | |
| 77 // updates the reference id marker to match the lower limit of our readers | |
| 78 void UpdateReferenceID(void); | |
| 79 | |
| 80 // retrieves next available alignment (returns success/fail) from all files | |
| 81 bool GetNextAlignment(BamAlignment&); | |
| 82 // retrieves next available alignment (returns success/fail) from all files | |
| 83 // and populates the support data with information about the alignment | |
| 84 // *** BUT DOES NOT PARSE CHARACTER DATA FROM THE ALIGNMENT | |
| 85 bool GetNextAlignmentCore(BamAlignment&); | |
| 86 // ... should this be private? | |
| 87 bool HasOpenReaders(void); | |
| 88 | |
| 89 // ---------------------- | |
| 90 // access auxiliary data | |
| 91 // ---------------------- | |
| 92 | |
| 93 // returns unified SAM header text for all files | |
| 94 const std::string GetHeaderText(void) const; | |
| 95 // returns number of reference sequences | |
| 96 const int GetReferenceCount(void) const; | |
| 97 // returns vector of reference objects | |
| 98 const BamTools::RefVector GetReferenceData(void) const; | |
| 99 // returns reference id (used for BamMultiReader::Jump()) for the given reference name | |
| 100 const int GetReferenceID(const std::string& refName) const; | |
| 101 // validates that we have a congruent set of BAM files that are aligned against the same reference sequences | |
| 102 void ValidateReaders() const; | |
| 103 | |
| 104 // ---------------------- | |
| 105 // BAM index operations | |
| 106 // ---------------------- | |
| 107 | |
| 108 // creates index for BAM files which lack them, saves to files (default = bamFilename + ".bai") | |
| 109 bool CreateIndexes(bool useStandardIndex = true); | |
| 110 | |
| 111 // sets the index caching mode for the readers | |
| 112 void SetIndexCacheMode(const BamIndex::BamIndexCacheMode mode); | |
| 113 | |
| 114 //const int GetReferenceID(const string& refName) const; | |
| 115 | |
| 116 // utility | |
| 117 void PrintFilenames(void); | |
| 118 void DumpAlignmentIndex(void); | |
| 119 void UpdateAlignments(void); // updates our alignment cache | |
| 120 | |
| 121 // private implementation | |
| 122 private: | |
| 123 | |
| 124 // the set of readers and alignments which we operate on, maintained throughout the life of this class | |
| 125 std::vector<std::pair<BamReader*, BamAlignment*> > readers; | |
| 126 | |
| 127 // readers and alignments sorted by reference id and position, to keep track of the lowest (next) alignment | |
| 128 // when a reader reaches EOF, its entry is removed from this index | |
| 129 AlignmentIndex alignments; | |
| 130 | |
| 131 std::vector<std::string> fileNames; | |
| 132 }; | |
| 133 | |
| 134 } // namespace BamTools | |
| 135 | |
| 136 #endif // BAMMULTIREADER_H |
