From: derek Date: Mon, 4 Oct 2010 14:25:30 +0000 (-0400) Subject: Reviewed BAM to YAML conversion contribution (thank you Chase Miller). Reorganized... X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8807d4776b73d173b10cf6fb77ccbf485d270597;p=bamtools.git Reviewed BAM to YAML conversion contribution (thank you Chase Miller). Reorganized to fit BT code style & structure. --- 8807d4776b73d173b10cf6fb77ccbf485d270597 diff --cc src/toolkit/bamtools_convert.cpp index 1d8bad4,f682073..b236b63 --- a/src/toolkit/bamtools_convert.cpp +++ b/src/toolkit/bamtools_convert.cpp @@@ -3,7 -3,7 +3,7 @@@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- --// Last modified: 23 September 2010 ++// Last modified: 4 October 2010 // --------------------------------------------------------------------------- // Converts between BAM and a number of other formats // *************************************************************************** @@@ -37,6 -37,7 +37,7 @@@ namespace BamTools static const string FORMAT_SAM = "sam"; static const string FORMAT_PILEUP = "pileup"; static const string FORMAT_WIGGLE = "wig"; ++ static const string FORMAT_YAML = "yaml"; // other constants static const unsigned int FASTA_LINE_MAX = 50; @@@ -129,8 -130,9 +130,9 @@@ struct ConvertTool::ConvertToolPrivate void PrintFasta(const BamAlignment& a); void PrintFastq(const BamAlignment& a); void PrintJson(const BamAlignment& a); - void PrintYaml(const BamAlignment& a); void PrintSam(const BamAlignment& a); void PrintWiggle(const BamAlignment& a); ++ void PrintYaml(const BamAlignment& a); // special case - uses the PileupEngine bool RunPileupConversion(BamMultiReader* reader); @@@ -228,8 -216,9 +230,9 @@@ bool ConvertTool::ConvertToolPrivate::R else if ( m_settings->Format == FORMAT_FASTA ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintFasta; else if ( m_settings->Format == FORMAT_FASTQ ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintFastq; else if ( m_settings->Format == FORMAT_JSON ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintJson; - else if ( m_settings->Format == FORMAT_YAML ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintYaml; else if ( m_settings->Format == FORMAT_SAM ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintSam; else if ( m_settings->Format == FORMAT_WIGGLE ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintWiggle; ++ else if ( m_settings->Format == FORMAT_YAML ) pFunction = &BamTools::ConvertTool::ConvertToolPrivate::PrintYaml; else { cerr << "Unrecognized format: " << m_settings->Format << endl; cerr << "Please see help|README (?) for details on supported formats " << endl; @@@ -628,6 -656,6 +631,44 @@@ void ConvertTool::ConvertToolPrivate::P ; } ++// Print BamAlignment in YAML format ++void ConvertTool::ConvertToolPrivate::PrintYaml(const BamAlignment& a) { ++ ++ // write alignment name ++ m_out << "---" << endl; ++ m_out << a.Name << ":" << endl; ++ ++ // write alignment data ++ m_out << " " << "AlndBases: " << a.AlignedBases << endl; ++ m_out << " " << "Qualities: " << a.Qualities << endl; ++ m_out << " " << "Name: " << a.Name << endl; ++ m_out << " " << "Length: " << a.Length << endl; ++ m_out << " " << "TagData: " << a.TagData << endl; ++ m_out << " " << "RefID: " << a.RefID << endl; ++ m_out << " " << "RefName: " << m_references[a.RefID].RefName << endl; ++ m_out << " " << "Position: " << a.Position << endl; ++ m_out << " " << "Bin: " << a.Bin << endl; ++ m_out << " " << "MapQuality: " << a.MapQuality << endl; ++ m_out << " " << "AlignmentFlag: " << a.AlignmentFlag << endl; ++ m_out << " " << "MateRefID: " << a.MateRefID << endl; ++ m_out << " " << "MatePosition: " << a.MatePosition << endl; ++ m_out << " " << "InsertSize: " << a.InsertSize << endl; ++ ++ // write Cigar data ++ const vector& cigarData = a.CigarData; ++ if ( !cigarData.empty() ) { ++ m_out << " " << "Cigar: "; ++ vector::const_iterator cigarBegin = cigarData.begin(); ++ vector::const_iterator cigarIter = cigarBegin; ++ vector::const_iterator cigarEnd = cigarData.end(); ++ for ( ; cigarIter != cigarEnd; ++cigarIter ) { ++ const CigarOp& op = (*cigarIter); ++ m_out << op.Length << op.Type; ++ } ++ m_out << endl; ++ } ++} ++ bool ConvertTool::ConvertToolPrivate::RunPileupConversion(BamMultiReader* reader) { // check for valid BamMultiReader