// BamMultiReader.h (c) 2010 Erik Garrison, Derek Barnett
// Marth Lab, Department of Biology, Boston College
// ---------------------------------------------------------------------------
-// Last modified: 15 March 2011 (DB)
+// Last modified: 14 January 2013 (DB)
// ---------------------------------------------------------------------------
// Convenience class for reading multiple BAM files.
// ***************************************************************************
#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>
class API_EXPORT BamMultiReader {
+ // enums
public:
- enum SortOrder { SortedByPosition = 0
- , SortedByReadName
- , Unsorted
- };
+ // possible merge order strategies
+ enum MergeOrder { RoundRobinMerge = 0
+ , MergeByCoordinate
+ , MergeByName
+ };
// constructor / destructor
public:
// ----------------------
// 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
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
+ bool SetExplicitMergeOrder(BamMultiReader::MergeOrder order);
// sets the target region of interest
bool SetRegion(const BamRegion& region);
// sets the target region of interest
// retrieves next available alignment
bool GetNextAlignment(BamAlignment& alignment);
- // retrieves next available alignmnet (without populating the alignment's string data fields)
+ // retrieves next available alignment (without populating the alignment's string data fields)
bool GetNextAlignmentCore(BamAlignment& alignment);
- // sets the expected sorting order for reading across multiple BAM files
- void SetSortOrder(const SortOrder& order);
-
// ----------------------
// access auxiliary data
// ----------------------
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);
- // deprecated methods
- public:
- // returns \c true if all BAM files have index data available.
- bool IsIndexLoaded(void) const;
- // convenience method for printing filenames to stdout
- void PrintFilenames(void) const;
+ // ----------------------
+ // error handling
+ // ----------------------
+
+ // returns a human-readable description of the last error that occurred
+ std::string GetErrorString(void) const;
// private implementation
private: