diff spp/src/BamReader.h @ 6:ce08b0efa3fd draft

Uploaded
author zzhou
date Tue, 27 Nov 2012 16:11:40 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spp/src/BamReader.h	Tue Nov 27 16:11:40 2012 -0500
@@ -0,0 +1,130 @@
+// ***************************************************************************
+// BamReader.h (c) 2009 Derek Barnett, Michael Str�mberg
+// Marth Lab, Department of Biology, Boston College
+// All rights reserved.
+// ---------------------------------------------------------------------------
+// Last modified: 19 November 2010 (DB)
+// ---------------------------------------------------------------------------
+// Provides the basic functionality for reading BAM files
+// ***************************************************************************
+
+#ifndef BAMREADER_H
+#define BAMREADER_H
+
+#include <api_global.h>
+#include <BamAlignment.h>
+#include <BamIndex.h>
+#include <string>
+
+namespace BamTools {
+  
+namespace Internal {
+    class BamReaderPrivate;
+} // namespace Internal
+
+class API_EXPORT BamReader {
+
+    // constructor / destructor
+    public:
+        BamReader(void);
+        ~BamReader(void);
+
+    // public interface
+    public:
+
+        // ----------------------
+        // BAM file operations
+        // ----------------------
+
+        // close BAM file
+        void Close(void);
+        // returns whether reader is open for reading or not
+        bool IsOpen(void) const;
+        // performs random-access jump using (reference, position) as a left-bound
+        bool Jump(int refID, int position = 0);
+        // opens BAM file (and optional BAM index file, if provided)
+        // @lookForIndex - if no indexFilename provided, look in BAM file's directory for an existing index file
+        //   default behavior is to skip index file search if no index filename given
+        // @preferStandardIndex - if true, give priority in index file searching to standard BAM index (*.bai)
+        //   default behavior is to prefer the BamToolsIndex (*.bti) if both are available
+        bool Open(const std::string& filename, 
+                  const std::string& indexFilename = "", 
+                  const bool lookForIndex = false, 
+                  const bool preferStandardIndex = false);
+        // returns file pointer to beginning of alignments
+        bool Rewind(void);
+        // sets a region of interest (with left & right bound reference/position)
+        // returns success/failure of seeking to left bound of region
+        bool SetRegion(const BamRegion& region);
+        bool SetRegion(const int& leftRefID, const int& leftBound, const int& rightRefID, const int& rightBound);
+
+        // ----------------------
+        // access alignment data
+        // ----------------------
+
+        // retrieves next available alignment (returns success/fail)
+        bool GetNextAlignment(BamAlignment& bAlignment);
+        // retrieves next available alignment core data (returns success/fail)
+        // ** DOES NOT parse any character data (read name, bases, qualities, tag data) **
+        // useful for operations requiring ONLY aligner-related information 
+        // (refId/position, alignment flags, CIGAR, mapQuality, etc)
+        bool GetNextAlignmentCore(BamAlignment& bAlignment);
+
+        // ----------------------
+        // access auxiliary data
+        // ----------------------
+
+        // returns SAM header text
+        const std::string GetHeaderText(void) const;
+        // returns number of reference sequences
+        int GetReferenceCount(void) const;
+        // returns vector of reference objects
+        const BamTools::RefVector& GetReferenceData(void) const;
+        // returns reference id (used for BamReader::Jump()) for the given reference name
+        int GetReferenceID(const std::string& refName) const;
+        // returns the name of the file associated with this BamReader
+        const std::string GetFilename(void) const;
+
+        // ----------------------
+        // BAM index operations
+        // ----------------------
+
+        // creates index for BAM file, saves to file
+        // default behavior is to create the BAM standard index (".bai")
+        // set flag to false to create the BamTools-specific index (".bti")
+        bool CreateIndex(bool useStandardIndex = true);
+        // returns whether index data is available for reading
+        // (e.g. if true, BamReader should be able to seek to a region)
+        bool HasIndex(void) const;
+        // change the index caching behavior
+        // default BamReader/Index mode is LimitedIndexCaching
+        // @mode - can be either FullIndexCaching, LimitedIndexCaching,
+        //   or NoIndexCaching. See BamIndex.h for more details
+        void SetIndexCacheMode(const BamIndex::BamIndexCacheMode mode);
+	
+    // deprecated methods
+    public:
+	
+        // deprecated (but still available): prefer HasIndex() instead
+        //
+        // Deprecated purely for API semantic clarity - HasIndex() should be clearer
+        // than IsIndexLoaded() in light of the new caching modes that may clear the
+        // index data from memory, but leave the index file open for later random access
+        // seeks.
+        //
+        // For example, what would (IsIndexLoaded() == true) mean when cacheMode has been
+        // explicitly set to NoIndexCaching? This is confusing at best, misleading about
+        // current memory behavior at worst.
+        //
+        // returns whether index data is available
+        // (e.g. if true, BamReader should be able to seek to a region)
+        bool IsIndexLoaded(void) const;
+        
+    // private implementation
+    private:
+        Internal::BamReaderPrivate* d;
+};
+
+} // namespace BamTools
+
+#endif // BAMREADER_H