X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2Finternal%2FBamWriter_p.cpp;h=1b1a3f2136a4452e9a8509896b3c36c38b7873d7;hb=9f1ce8c47aeadb6dc1320b52ee671c3341b97935;hp=100de2d2d25a378c64179e39e71e6fdf874eb847;hpb=2e1822c9ed231b25fd474117a01a1492d4209fa4;p=bamtools.git diff --git a/src/api/internal/BamWriter_p.cpp b/src/api/internal/BamWriter_p.cpp index 100de2d..1b1a3f2 100644 --- a/src/api/internal/BamWriter_p.cpp +++ b/src/api/internal/BamWriter_p.cpp @@ -2,16 +2,16 @@ // BamWriter_p.cpp (c) 2010 Derek Barnett // Marth Lab, Department of Biology, Boston College // --------------------------------------------------------------------------- -// Last modified: 7 October 2011 (DB) +// Last modified: 10 October 2011 (DB) // --------------------------------------------------------------------------- // Provides the basic functionality for producing BAM files // *************************************************************************** -#include -#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; @@ -29,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); @@ -160,7 +160,7 @@ bool BamWriterPrivate::Open(const string& filename, try { // open the BGZF file for writing - m_stream.Open(filename, IBamIODevice::WriteOnly); + m_stream.Open(filename, IBamIODevice::WriteOnly); // write BAM file 'metadata' components WriteMagicNumber(); @@ -213,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;