X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2Finternal%2FBamWriter_p.cpp;h=1b1a3f2136a4452e9a8509896b3c36c38b7873d7;hb=9f1ce8c47aeadb6dc1320b52ee671c3341b97935;hp=a8fe370b5a374a192b1264894e932218bda58d28;hpb=2e049ed7f28881bce09653e60f5aea54bfd7afbf;p=bamtools.git diff --git a/src/api/internal/BamWriter_p.cpp b/src/api/internal/BamWriter_p.cpp index a8fe370..1b1a3f2 100644 --- a/src/api/internal/BamWriter_p.cpp +++ b/src/api/internal/BamWriter_p.cpp @@ -2,15 +2,16 @@ // BamWriter_p.cpp (c) 2010 Derek Barnett // Marth Lab, Department of Biology, Boston College // --------------------------------------------------------------------------- -// Last modified: 6 October 2011 (DB) +// Last modified: 10 October 2011 (DB) // --------------------------------------------------------------------------- // Provides the basic functionality for producing BAM files // *************************************************************************** -#include -#include -#include -#include +#include "api/BamAlignment.h" +#include "api/BamConstants.h" +#include "api/IBamIODevice.h" +#include "api/internal/BamException_p.h" +#include "api/internal/BamWriter_p.h" using namespace BamTools; using namespace BamTools::Internal; @@ -28,7 +29,7 @@ BamWriterPrivate::~BamWriterPrivate(void) { Close(); } -// calculates minimum bin for a BAM alignment interval +// calculates minimum bin for a BAM alignment interval [begin, end) uint32_t BamWriterPrivate::CalculateMinimumBin(const int begin, int end) const { --end; if ( (begin >> 14) == (end >> 14) ) return 4681 + (begin >> 14); @@ -148,7 +149,7 @@ std::string BamWriterPrivate::GetErrorString(void) const { // returns whether BAM file is open for writing or not bool BamWriterPrivate::IsOpen(void) const { - return m_stream.IsOpen; + return m_stream.IsOpen(); } // opens the alignment archive @@ -158,8 +159,8 @@ bool BamWriterPrivate::Open(const string& filename, { try { - // open the BGZF file for writing, return failure if error - m_stream.Open(filename, "wb"); + // open the BGZF file for writing + m_stream.Open(filename, IBamIODevice::WriteOnly); // write BAM file 'metadata' components WriteMagicNumber(); @@ -212,10 +213,9 @@ void BamWriterPrivate::WriteAlignment(const BamAlignment& al) { const unsigned int queryLength = al.QueryBases.size(); const unsigned int tagDataLength = al.TagData.size(); - // no way to tell if BamAlignment.Bin is already defined (no default, invalid value) - // force calculation of Bin before storing - const int endPosition = al.GetEndPosition(); - const uint32_t alignmentBin = CalculateMinimumBin(al.Position, endPosition); + // no way to tell if alignment's bin is already defined (there is no default, invalid value) + // so we'll go ahead calculate its bin ID before storing + const uint32_t alignmentBin = CalculateMinimumBin(al.Position, al.GetEndPosition()); // create our packed cigar string string packedCigar;