X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Ftoolkit%2Fbamtools_convert.cpp;h=0e1743ffcba56a1859fbe946c3a345f890ac037a;hb=3052ce4f428518b5d75fe744d37a7e7946b10ded;hp=991cebce7512c625896cfc0f7ee62a44ce36222b;hpb=1a93ff03d7e40d97c32e6f5966045ceaeb2f038a;p=bamtools.git diff --git a/src/toolkit/bamtools_convert.cpp b/src/toolkit/bamtools_convert.cpp index 991cebc..0e1743f 100644 --- a/src/toolkit/bamtools_convert.cpp +++ b/src/toolkit/bamtools_convert.cpp @@ -2,7 +2,7 @@ // bamtools_convert.cpp (c) 2010 Derek Barnett, Erik Garrison // Marth Lab, Department of Biology, Boston College // --------------------------------------------------------------------------- -// Last modified: 11 June 2011 +// Last modified: 11 November 2012 // --------------------------------------------------------------------------- // Converts between BAM and a number of other formats // *************************************************************************** @@ -277,7 +277,7 @@ void ConvertTool::ConvertToolPrivate::PrintBed(const BamAlignment& a) { m_out << m_references.at(a.RefID).RefName << "\t" << a.Position << "\t" - << a.GetEndPosition() + 1 << "\t" + << a.GetEndPosition() << "\t" << a.Name << "\t" << a.MapQuality << "\t" << (a.IsReverseStrand() ? "-" : "+") << endl; @@ -396,7 +396,7 @@ void ConvertTool::ConvertToolPrivate::PrintJson(const BamAlignment& a) { m_out << "\"queryBases\":\"" << a.QueryBases << "\","; // write qualities - if ( !a.Qualities.empty() ) { + if ( !a.Qualities.empty() && a.Qualities.at(0) != (char)0xFF ) { string::const_iterator s = a.Qualities.begin(); m_out << "\"qualities\":[" << static_cast(*s) - 33; ++s; @@ -434,9 +434,15 @@ void ConvertTool::ConvertToolPrivate::PrintJson(const BamAlignment& a) { ++index; break; - case (Constants::BAM_TAG_TYPE_INT8) : + case (Constants::BAM_TAG_TYPE_INT8) : + // force value into integer-type (instead of char value) + m_out << static_cast(tagData[index]); + ++index; + break; + case (Constants::BAM_TAG_TYPE_UINT8) : - m_out << (int)tagData[index]; + // force value into integer-type (instead of char value) + m_out << static_cast(tagData[index]); ++index; break; @@ -497,8 +503,8 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { // [ :: [...] ] // write name & alignment flag - m_out << a.Name << "\t" << a.AlignmentFlag << "\t"; - + m_out << a.Name << "\t" << a.AlignmentFlag << "\t"; + // write reference name if ( (a.RefID >= 0) && (a.RefID < (int)m_references.size()) ) m_out << m_references[a.RefID].RefName << "\t"; @@ -526,7 +532,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { if ( a.MateRefID == a.RefID ) m_out << "=\t"; else - m_out << m_references[a.MateRefID].RefName << "\t"; + m_out << m_references[a.MateRefID].RefName << "\t"; m_out << a.MatePosition+1 << "\t" << a.InsertSize << "\t"; } else @@ -539,7 +545,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { m_out << a.QueryBases << "\t"; // write qualities - if ( a.Qualities.empty() ) + if ( a.Qualities.empty() || (a.Qualities.at(0) == (char)0xFF) ) m_out << "*"; else m_out << a.Qualities; @@ -565,9 +571,15 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { ++index; break; - case (Constants::BAM_TAG_TYPE_INT8) : + case (Constants::BAM_TAG_TYPE_INT8) : + // force value into integer-type (instead of char value) + m_out << "i:" << static_cast(tagData[index]); + ++index; + break; + case (Constants::BAM_TAG_TYPE_UINT8) : - m_out << "i:" << (int)tagData[index]; + // force value into integer-type (instead of char value) + m_out << "i:" << static_cast(tagData[index]); ++index; break; @@ -596,7 +608,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { index += sizeof(float); break; - case (Constants::BAM_TAG_TYPE_HEX) : + case (Constants::BAM_TAG_TYPE_HEX) : // fall-through case (Constants::BAM_TAG_TYPE_STRING) : m_out << type << ":"; while (tagData[index]) { @@ -607,7 +619,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { break; } - if ( tagData[index] == '\0') + if ( tagData[index] == '\0' ) break; }