X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Ftoolkit%2Fbamtools_convert.cpp;h=88968828b6af53142fa092ce1a5d04729dbe1971;hb=6bb3f902d3f8087112afd4dbf8a783b73b40db8d;hp=cc32e2c9a2f90e7e975c84f8983613baf4a8a832;hpb=8c80d760637f8df39262683cd2570f0589423d36;p=bamtools.git diff --git a/src/toolkit/bamtools_convert.cpp b/src/toolkit/bamtools_convert.cpp index cc32e2c..8896882 100644 --- a/src/toolkit/bamtools_convert.cpp +++ b/src/toolkit/bamtools_convert.cpp @@ -1,9 +1,8 @@ // *************************************************************************** // bamtools_convert.cpp (c) 2010 Derek Barnett, Erik Garrison // Marth Lab, Department of Biology, Boston College -// All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 21 March 2011 +// Last modified: 8 October 2011 // --------------------------------------------------------------------------- // Converts between BAM and a number of other formats // *************************************************************************** @@ -27,46 +26,46 @@ using namespace std; namespace BamTools { - // --------------------------------------------- - // ConvertTool constants - - // supported conversion format command-line names - static const string FORMAT_BED = "bed"; - static const string FORMAT_FASTA = "fasta"; - static const string FORMAT_FASTQ = "fastq"; - static const string FORMAT_JSON = "json"; - static const string FORMAT_SAM = "sam"; - static const string FORMAT_PILEUP = "pileup"; - static const string FORMAT_YAML = "yaml"; - - // other constants - static const unsigned int FASTA_LINE_MAX = 50; - - // --------------------------------------------- - // ConvertPileupFormatVisitor declaration - - class ConvertPileupFormatVisitor : public PileupVisitor { - - // ctor & dtor - public: - ConvertPileupFormatVisitor(const RefVector& references, - const string& fastaFilename, - const bool isPrintingMapQualities, - ostream* out); - ~ConvertPileupFormatVisitor(void); - - // PileupVisitor interface implementation - public: - void Visit(const PileupPosition& pileupData); - - // data members - private: - Fasta m_fasta; - bool m_hasFasta; - bool m_isPrintingMapQualities; - ostream* m_out; - RefVector m_references; - }; +// --------------------------------------------- +// ConvertTool constants + +// supported conversion format command-line names +static const string FORMAT_BED = "bed"; +static const string FORMAT_FASTA = "fasta"; +static const string FORMAT_FASTQ = "fastq"; +static const string FORMAT_JSON = "json"; +static const string FORMAT_SAM = "sam"; +static const string FORMAT_PILEUP = "pileup"; +static const string FORMAT_YAML = "yaml"; + +// other constants +static const unsigned int FASTA_LINE_MAX = 50; + +// --------------------------------------------- +// ConvertPileupFormatVisitor declaration + +class ConvertPileupFormatVisitor : public PileupVisitor { + + // ctor & dtor + public: + ConvertPileupFormatVisitor(const RefVector& references, + const string& fastaFilename, + const bool isPrintingMapQualities, + ostream* out); + ~ConvertPileupFormatVisitor(void); + + // PileupVisitor interface implementation + public: + void Visit(const PileupPosition& pileupData); + + // data members + private: + Fasta m_fasta; + bool m_hasFasta; + bool m_isPrintingMapQualities; + ostream* m_out; + RefVector m_references; +}; } // namespace BamTools @@ -75,7 +74,7 @@ namespace BamTools { struct ConvertTool::ConvertSettings { - // flags + // flag bool HasInput; bool HasOutput; bool HasFormat; @@ -116,8 +115,12 @@ struct ConvertTool::ConvertToolPrivate { // ctor & dtor public: - ConvertToolPrivate(ConvertTool::ConvertSettings* settings); - ~ConvertToolPrivate(void); + ConvertToolPrivate(ConvertTool::ConvertSettings* settings) + : m_settings(settings) + , m_out(cout.rdbuf()) + { } + + ~ConvertToolPrivate(void) { } // interface public: @@ -142,13 +145,6 @@ struct ConvertTool::ConvertToolPrivate { ostream m_out; }; -ConvertTool::ConvertToolPrivate::ConvertToolPrivate(ConvertTool::ConvertSettings* settings) - : m_settings(settings) - , m_out(cout.rdbuf()) // default output to cout -{ } - -ConvertTool::ConvertToolPrivate::~ConvertToolPrivate(void) { } - bool ConvertTool::ConvertToolPrivate::Run(void) { // ------------------------------------ @@ -281,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; @@ -298,7 +294,7 @@ void ConvertTool::ConvertToolPrivate::PrintFasta(const BamAlignment& a) { // N.B. - QueryBases are reverse-complemented if aligned to reverse strand // print header - m_out << "> " << a.Name << endl; + m_out << ">" << a.Name << endl; // handle reverse strand alignment - bases string sequence = a.QueryBases; @@ -400,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; @@ -543,7 +539,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; @@ -713,6 +709,7 @@ ConvertTool::ConvertTool(void) } ConvertTool::~ConvertTool(void) { + delete m_settings; m_settings = 0; @@ -730,9 +727,10 @@ int ConvertTool::Run(int argc, char* argv[]) { // parse command line arguments Options::Parse(argc, argv, 1); - // run internal ConvertTool implementation, return success/fail + // initialize ConvertTool with settings m_impl = new ConvertToolPrivate(m_settings); + // run ConvertTool, return success/fail if ( m_impl->Run() ) return 0; else