]> git.donarmstrong.com Git - bamtools.git/blobdiff - src/api/BamMultiReader.h
Added explicit merge order to BamMultiReader
[bamtools.git] / src / api / BamMultiReader.h
index 959048c27f1f6dea1ee5fc5522abd53ea019fb90..27745628cb0f0dabf3c819d2eb659b15aca5a33b 100644 (file)
@@ -2,7 +2,7 @@
 // BamMultiReader.h (c) 2010 Erik Garrison, Derek Barnett
 // Marth Lab, Department of Biology, Boston College
 // ---------------------------------------------------------------------------
-// Last modified: 1 October 2011 (DB)
+// Last modified: 14 January 2013 (DB)
 // ---------------------------------------------------------------------------
 // Convenience class for reading multiple BAM files.
 // ***************************************************************************
@@ -10,8 +10,8 @@
 #ifndef BAMMULTIREADER_H
 #define BAMMULTIREADER_H
 
-#include <api/api_global.h>
-#include <api/BamReader.h>
+#include "api/api_global.h"
+#include "api/BamReader.h"
 #include <map>
 #include <sstream>
 #include <string>
@@ -25,6 +25,14 @@ namespace Internal {
 
 class API_EXPORT BamMultiReader {
 
+    // enums
+    public:
+        // possible merge order strategies
+        enum MergeOrder { RoundRobinMerge = 0
+                        , MergeByCoordinate
+                        , MergeByName
+                        };
+
     // constructor / destructor
     public:
         BamMultiReader(void);
@@ -38,11 +46,13 @@ class API_EXPORT BamMultiReader {
         // ----------------------
 
         // closes all open BAM files
-        void Close(void);
+        bool Close(void);
         // close only the requested BAM file
-        void CloseFile(const std::string& filename);
+        bool CloseFile(const std::string& filename);
         // returns list of filenames for all open BAM files
         const std::vector<std::string> Filenames(void) const;
+        // returns curent merge order strategy
+        BamMultiReader::MergeOrder GetMergeOrder(void) const;
         // returns true if multireader has any open BAM files
         bool HasOpenReaders(void) const;
         // performs random-access jump within current BAM files
@@ -53,6 +63,8 @@ class API_EXPORT BamMultiReader {
         bool OpenFile(const std::string& filename);
         // returns file pointers to beginning of alignments
         bool Rewind(void);
+        // sets an explicit merge order, regardless of the BAM files' SO header tag
+        void SetExplicitMergeOrder(BamMultiReader::MergeOrder order);
         // sets the target region of interest
         bool SetRegion(const BamRegion& region);
         // sets the target region of interest
@@ -97,8 +109,13 @@ class API_EXPORT BamMultiReader {
         bool LocateIndexes(const BamIndex::IndexType& preferredType = BamIndex::STANDARD);
         // opens index files for current BAM files.
         bool OpenIndexes(const std::vector<std::string>& indexFilenames);
-        // changes the caching behavior of the index data
-        void SetIndexCacheMode(const BamIndex::IndexCacheMode& mode);
+
+        // ----------------------
+        // error handling
+        // ----------------------
+
+        // returns a human-readable description of the last error that occurred
+        std::string GetErrorString(void) const;
 
     // private implementation
     private: