]> git.donarmstrong.com Git - bamtools.git/commitdiff
Various cleanups. Added -noheader to SAM conversion in ConvertTool
authorDerek <derekwbarnett@gmail.com>
Thu, 22 Jul 2010 18:24:54 +0000 (14:24 -0400)
committerDerek <derekwbarnett@gmail.com>
Thu, 22 Jul 2010 18:24:54 +0000 (14:24 -0400)
BamAux.h
bamtools.cpp
bamtools_convert.cpp

index 6387dd33a54e3a879c43362ab7108e1fe259d156..833f52fb27fa895889bfd727d6c859c8d57f288c 100644 (file)
--- a/BamAux.h
+++ b/BamAux.h
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 21 July 2010 (DB)\r
+// Last modified: 22 July 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // Provides the basic constants, data structures, etc. for using BAM files\r
 // ***************************************************************************\r
index ef13e284545bc5c44f8dcb9d3debdd4483f0395d..3b5c458bea39d76dd3d47c16a97751ebb9f0e491 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College
 // All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 20 July 2010
+// Last modified: 22 July 2010
 // ---------------------------------------------------------------------------
 // Integrates a number of BamTools functionalities into a single executable.
 // ***************************************************************************
@@ -20,7 +20,6 @@
 #include "bamtools_index.h"
 #include "bamtools_merge.h"
 #include "bamtools_random.h"
-// #include "bamtools_sam.h"
 #include "bamtools_sort.h"
 #include "bamtools_stats.h"
 
@@ -37,7 +36,6 @@ static const string HEADER   = "header";
 static const string INDEX    = "index";
 static const string MERGE    = "merge";
 static const string RANDOM   = "random";
-// static const string SAM      = "sam";
 static const string SORT     = "sort";
 static const string STATS    = "stats";
 
@@ -67,7 +65,6 @@ int Help(int argc, char* argv[]) {
         if ( argv[2] == INDEX )    tool = new IndexTool;
         if ( argv[2] == MERGE )    tool = new MergeTool;
         if ( argv[2] == RANDOM )   tool = new RandomTool;
-//         if ( argv[2] == SAM )      tool = new SamTool;
         if ( argv[2] == SORT )     tool = new SortTool;
         if ( argv[2] == STATS )    tool = new StatsTool;
         
@@ -88,7 +85,6 @@ int Help(int argc, char* argv[]) {
     cerr << "\tindex     Generates index for BAM file" << endl;
     cerr << "\tmerge     Merge multiple BAM files into single file" << endl;
     cerr << "\trandom    Grab a random subset of alignments" << endl;
-//     cerr << "\tsam       Prints the BAM file in SAM (text) format" << endl;
     cerr << "\tsort      Sorts the BAM file according to some criteria" << endl;
     cerr << "\tstats     Prints some basic statistics from the input BAM file" << endl;
     cerr << endl;
@@ -132,7 +128,6 @@ int main(int argc, char* argv[]) {
     if ( argv[1] == INDEX )    tool = new IndexTool;
     if ( argv[1] == MERGE )    tool = new MergeTool;
     if ( argv[1] == RANDOM )   tool = new RandomTool;
-//     if ( argv[1] == SAM )      tool = new SamTool;
     if ( argv[1] == SORT )     tool = new SortTool;
     if ( argv[1] == STATS )    tool = new StatsTool;
     
index 771feb2e839503777b9bf73572ee8e0a8a473225..de9cc369bab9c32762c8fb2f9e5d1457326970db 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College
 // All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 9 July 2010
+// Last modified: 22 July 2010
 // ---------------------------------------------------------------------------
 // Converts between BAM and a number of other formats
 // ***************************************************************************
@@ -83,6 +83,7 @@ struct ConvertTool::ConvertSettings {
 
     // pileup flags
     bool HasFastaFilename;
+    bool IsOmittingSamHeader;
     bool IsPrintingPileupMapQualities;
     
     // options
@@ -101,6 +102,7 @@ struct ConvertTool::ConvertSettings {
         , HasFormat(false)
         , HasRegion(false)
         , HasFastaFilename(false)
+        , IsOmittingSamHeader(false)
         , IsPrintingPileupMapQualities(false)
         , OutputFilename(Options::StandardOut())
     { } 
@@ -129,6 +131,9 @@ ConvertTool::ConvertTool(void)
     OptionGroup* PileupOpts = Options::CreateOptionGroup("Pileup Options");
     Options::AddValueOption("-fasta", "FASTA filename", "FASTA reference file", "", m_settings->HasFastaFilename, m_settings->FastaFilename, PileupOpts, "");
     Options::AddOption("-mapqual", "print the mapping qualities", m_settings->IsPrintingPileupMapQualities, PileupOpts);
+    
+    OptionGroup* SamOpts = Options::CreateOptionGroup("SAM Options");
+    Options::AddOption("-noheader", "omit the SAM header from output", m_settings->IsOmittingSamHeader, SamOpts);
 }
 
 ConvertTool::~ConvertTool(void) {
@@ -181,7 +186,7 @@ bool ConvertTool::ConvertToolPrivate::Run(void) {
     
     // open input files
     BamMultiReader reader;
-    reader.Open(m_settings->InputFiles);
+    reader.Open(m_settings->InputFiles, false);
     m_references = reader.GetReferenceData();
 
     // set region if specified
@@ -250,6 +255,12 @@ bool ConvertTool::ConvertToolPrivate::Run(void) {
             convertedOk = false;
         }
         
+        // if SAM format & not omitting header, print SAM header
+        if ( (m_settings->Format == FORMAT_SAM) && !m_settings->IsOmittingSamHeader ) {
+            string headerText = reader.GetHeaderText();
+            m_out << headerText;
+        }
+        
         // ------------------------
         // do conversion
         if ( !formatError ) {
@@ -524,14 +535,14 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) {
     size_t index = 0;
     while ( index < tagDataLength ) {
 
-        // write tag name        
-        m_out << "\t" << a.TagData.substr(index, 2) << ":";
+        // write tag name   
+        string tagName = a.TagData.substr(index, 2);
+        m_out << "\t" << tagName << ":";
         index += 2;
         
         // get data type
         char type = a.TagData.at(index);
         ++index;
-        
         switch (type) {
             case('A') : 
                 m_out << "A:" << tagData[index]; 
@@ -549,7 +560,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) {
                 break;
             
             case('S') : 
-                m_out << "i:" << BgzfData::UnpackUnsignedShort(&tagData[index]); 
+                m_out << "i:" << BgzfData::UnpackUnsignedShort(&tagData[index]);
                 index += 2; 
                 break;
                 
@@ -580,7 +591,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) {
             
             case('Z') :
             case('H') : 
-                m_out << type << ":"; 
+                m_out << type << ":";
                 while (tagData[index]) {
                     m_out << tagData[index];
                     ++index;