From: barnett Date: Fri, 25 Sep 2009 17:59:46 +0000 (+0000) Subject: Changed BamAlignment::InsertSize to signed int... need to test X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=5255969ee7c62eb6f08365ff5ddd5dc90498c3ce;p=bamtools.git Changed BamAlignment::InsertSize to signed int... need to test git-svn-id: svn+ssh://gene.bc.edu/home/subversion/Derek/BamTools/trunk@26 9efb377e-2e27-44b9-b91a-ec4abb80ed8b --- diff --git a/BamAux.h b/BamAux.h index 701f35a..7f47afe 100644 --- a/BamAux.h +++ b/BamAux.h @@ -280,7 +280,8 @@ namespace BamTools { std::vector CigarData; //!< CIGAR operations for this alignment unsigned int MateRefID; //!< ID number for reference sequence where alignment's mate was aligned unsigned int MatePosition; //!< Position (0-based) where alignment's mate starts - unsigned int InsertSize; //!< Mate-pair insert size + //unsigned int InsertSize; //!< Mate-pair insert size + signed int InsertSize; //!< Mate-pair insert size // Alignment flag query constants private: diff --git a/BamDumpMain.cpp b/BamDumpMain.cpp index f76852a..2c31015 100644 --- a/BamDumpMain.cpp +++ b/BamDumpMain.cpp @@ -50,6 +50,7 @@ int main(int argc, char* argv[]) { // Spit out basic BamAlignment data void PrintAlignment(const BamAlignment& alignment) { cout << "---------------------------------" << endl; - cout << "Name: " << alignment.Name << endl; - cout << "Aligned to: " << alignment.RefID << ":" << alignment.Position << endl; + cout << "Name: " << alignment.Name << endl; + cout << "Aligned to: " << alignment.RefID; + cout << ":" << alignment.Position << endl; } diff --git a/BamReader.cpp b/BamReader.cpp index 4f0f361..f9df5cf 100644 --- a/BamReader.cpp +++ b/BamReader.cpp @@ -572,7 +572,8 @@ bool BamReader::LoadNextAlignment(BamAlignment& bAlignment) { querySequenceLength = BgzfUnpackUnsignedInt(&x[16]); bAlignment.MateRefID = BgzfUnpackUnsignedInt(&x[20]); bAlignment.MatePosition = BgzfUnpackUnsignedInt(&x[24]); - bAlignment.InsertSize = BgzfUnpackUnsignedInt(&x[28]); + //bAlignment.InsertSize = BgzfUnpackUnsignedInt(&x[28]); + bAlignment.InsertSize = BgzfUnpackSignedInt(&x[28]); // calculate lengths/offsets const unsigned int dataLength = blockLength - BAM_CORE_SIZE; diff --git a/BamReader.h b/BamReader.h index a4a82e4..ed8397d 100644 --- a/BamReader.h +++ b/BamReader.h @@ -181,6 +181,8 @@ namespace BamTools { static inline unsigned int BgzfUnpackUnsignedInt(char* buffer); // unpacks a buffer into an unsigned short static inline unsigned short BgzfUnpackUnsignedShort(char* buffer); + // unpacks a buffer into a signed int + static inline signed int BgzfUnpackSignedInt(char* buffer); // calculate bins that overlap region ( left to reference end for now ) int BinsFromRegion(int, unsigned int, uint16_t[MAX_BIN]); // calculates alignment end position based on starting position and provided CIGAR operations @@ -244,6 +246,16 @@ namespace BamTools { un.valueBuffer[1] = buffer[1]; return un.value; } + + // unpacks a buffer into a signed int + inline signed int BamReader::BgzfUnpackSignedInt(char* buffer) { + union { signed int value; unsigned char valueBuffer[sizeof(signed int)]; } un; + un.valueBuffer[0] = buffer[0]; + un.valueBuffer[1] = buffer[1]; + un.valueBuffer[2] = buffer[2]; + un.valueBuffer[3] = buffer[3]; + return un.value; + } // -------------------------------------------------------------------------------------- // template classes/methods (internal - can exclude from main documentation)