]> git.donarmstrong.com Git - bamtools.git/commitdiff
Reviewed BAM to YAML conversion contribution (thank you Chase Miller). Reorganized...
authorderek <derek@donatello.(none)>
Mon, 4 Oct 2010 14:25:30 +0000 (10:25 -0400)
committerderek <derek@donatello.(none)>
Mon, 4 Oct 2010 14:26:47 +0000 (10:26 -0400)
1  2 
src/toolkit/bamtools_convert.cpp

index 1d8bad4257247fd94a5e482c531171d2fac500d6,f68207378788f3a1fcc7312c48e30f1334101005..b236b63dda0ce2eb20cc70c66d4e7a231269d523
@@@ -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<CigarOp>& cigarData = a.CigarData;
++    if ( !cigarData.empty() ) {
++      m_out << "   " <<  "Cigar: ";
++      vector<CigarOp>::const_iterator cigarBegin = cigarData.begin();
++      vector<CigarOp>::const_iterator cigarIter = cigarBegin;
++      vector<CigarOp>::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