]> git.donarmstrong.com Git - bamtools.git/commitdiff
Added uncompressed output as default behavior for Filter-, Merge-, and RandomTools...
authorDerek <derekwbarnett@gmail.com>
Wed, 1 Sep 2010 03:09:20 +0000 (23:09 -0400)
committerDerek <derekwbarnett@gmail.com>
Wed, 1 Sep 2010 03:09:20 +0000 (23:09 -0400)
src/toolkit/bamtools_filter.cpp
src/toolkit/bamtools_merge.cpp
src/toolkit/bamtools_random.cpp

index 6941da2d56d7719d2950f7fa8cf7250f9f30e35f..af7af5f66b86b23e4a70d3410a9f776765b76715 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College
 // All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 30 August 2010
+// Last modified: 31 August 2010
 // ---------------------------------------------------------------------------
 // Filters a single BAM file (or filters multiple BAM files and merges) 
 // according to some user-specified criteria.
@@ -110,6 +110,7 @@ struct FilterTool::FilterSettings {
     bool HasOutputBamFilename;
     bool HasRegion;
     bool HasScriptFilename;
+    bool IsForceCompression;
     
     // filenames
     vector<string> InputFiles;
@@ -175,6 +176,7 @@ struct FilterTool::FilterSettings {
         , HasOutputBamFilename(false)
         , HasRegion(false)
         , HasScriptFilename(false)
+        , IsForceCompression(false)
         , OutputFilename(Options::StandardOut())
         , HasAlignmentFlagFilter(false)
         , HasInsertSizeFilter(false)
@@ -223,6 +225,7 @@ FilterTool::FilterTool(void)
     Options::AddValueOption("-out",    "BAM filename", "the output BAM file",   "", m_settings->HasOutputBamFilename, m_settings->OutputFilename, IO_Opts, Options::StandardOut());
     Options::AddValueOption("-region", "REGION",       "only read data from this genomic region (see README for more details)", "", m_settings->HasRegion, m_settings->Region, IO_Opts);
     Options::AddValueOption("-script", "filename",     "the filter script file (see README for more details)", "", m_settings->HasScriptFilename, m_settings->ScriptFilename, IO_Opts);
+    Options::AddOption("-forceCompression", "if results are sent to stdout (like when piping to another tool), default behavior is to leave output uncompressed. Use this flag to override and force compression", m_settings->IsForceCompression, IO_Opts);
     
     OptionGroup* FilterOpts = Options::CreateOptionGroup("General Filters");
     Options::AddValueOption("-alignmentFlag", "int",     "keep reads with this *exact* alignment flag (for more detailed queries, see below)", "", m_settings->HasAlignmentFlagFilter, m_settings->AlignmentFlagFilter, FilterOpts);
@@ -607,7 +610,8 @@ bool FilterTool::FilterToolPrivate::Run(void) {
     
     // open writer
     BamWriter writer;
-    writer.Open(m_settings->OutputFilename, headerText, m_references);
+    bool writeUncompressed = ( m_settings->OutputFilename == Options::StandardOut() && !m_settings->IsForceCompression );
+    writer.Open(m_settings->OutputFilename, headerText, m_references, writeUncompressed);
     
     // set up error handling
     ostringstream errorStream("");
index dcea1725b229a4c95200318ebbe0103cc55ec809..8170f1a63651a0f64702a193315e16a769a80e7f 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College
 // All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 2 June 2010
+// Last modified: 31 August 2010
 // ---------------------------------------------------------------------------
 // Merges multiple BAM files into one.
 //
@@ -32,6 +32,7 @@ struct MergeTool::MergeSettings {
     // flags
     bool HasInputBamFilename;
     bool HasOutputBamFilename;
+    bool IsForceCompression;
 //     bool HasRegion;
     
     // filenames
@@ -45,6 +46,7 @@ struct MergeTool::MergeSettings {
     MergeSettings(void)
         : HasInputBamFilename(false)
         , HasOutputBamFilename(false)
+        , IsForceCompression(false)
 //         , HasRegion(false)
         , OutputFilename(Options::StandardOut())
     { }
@@ -64,6 +66,7 @@ MergeTool::MergeTool(void)
     OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
     Options::AddValueOption("-in",  "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename,  m_settings->InputFiles,     IO_Opts);
     Options::AddValueOption("-out", "BAM filename", "the output BAM file",   "", m_settings->HasOutputBamFilename, m_settings->OutputFilename, IO_Opts);
+    Options::AddOption("-forceCompression", "if results are sent to stdout (like when piping to another tool), default behavior is to leave output uncompressed. Use this flag to override and force compression", m_settings->IsForceCompression, IO_Opts);
     
 //     OptionGroup* FilterOpts = Options::CreateOptionGroup("Filters");
 //     Options::AddValueOption("-region", "REGION", "genomic region. See README for more details", "", m_settings->HasRegion, m_settings->Region, FilterOpts);
@@ -95,9 +98,10 @@ int MergeTool::Run(int argc, char* argv[]) {
     std::string mergedHeader = reader.GetHeaderText();
     RefVector references = reader.GetReferenceData();
 
-    // open BamWriter
+    // open writer
     BamWriter writer;
-    writer.Open(m_settings->OutputFilename, mergedHeader, references);
+    bool writeUncompressed = ( m_settings->OutputFilename == Options::StandardOut() && !m_settings->IsForceCompression );
+    writer.Open(m_settings->OutputFilename, mergedHeader, references, writeUncompressed);
 
     // store alignments to output file
     BamAlignment bAlignment;
index 89ca92ba4bc7356ae581ff73439f3661d50e5a49..2600f424051d6f9c7752fcf4f532c1c0562b0fa9 100644 (file)
@@ -38,6 +38,7 @@ struct RandomTool::RandomSettings {
     bool HasInput;
     bool HasOutput;
     bool HasRegion;
+    bool IsForceCompression;
 
     // parameters
     unsigned int AlignmentCount;
@@ -51,7 +52,9 @@ struct RandomTool::RandomSettings {
         , HasInput(false)
         , HasOutput(false)
         , HasRegion(false)
+        , IsForceCompression(false)
         , AlignmentCount(RANDOM_MAX_ALIGNMENT_COUNT)
+        , OutputFilename(Options::StandardOut())
     { }  
 };  
 
@@ -69,6 +72,7 @@ RandomTool::RandomTool(void)
     OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
     Options::AddValueOption("-in",  "BAM filename", "the input BAM file",  "", m_settings->HasInput,  m_settings->InputFiles,     IO_Opts, Options::StandardIn());
     Options::AddValueOption("-out", "BAM filename", "the output BAM file", "", m_settings->HasOutput, m_settings->OutputFilename, IO_Opts, Options::StandardOut());
+    Options::AddOption("-forceCompression", "if results are sent to stdout (like when piping to another tool), default behavior is to leave output uncompressed. Use this flag to override and force compression", m_settings->IsForceCompression, IO_Opts);
     
     OptionGroup* FilterOpts = Options::CreateOptionGroup("Filters");
     Options::AddValueOption("-n", "count", "number of alignments to grab.  Note - no duplicate checking is performed (currently)", "", m_settings->HasAlignmentCount, m_settings->AlignmentCount, FilterOpts, RANDOM_MAX_ALIGNMENT_COUNT);
@@ -116,9 +120,10 @@ int RandomTool::Run(int argc, char* argv[]) {
             reader.SetRegion(region);
     }
     
-    // open out BAM writer
+    // open writer
     BamWriter writer;
-    writer.Open(m_settings->OutputFilename, headerText, references);
+    bool writeUncompressed = ( m_settings->OutputFilename == Options::StandardOut() && !m_settings->IsForceCompression );
+    writer.Open(m_settings->OutputFilename, headerText, references, writeUncompressed);
     
     // seed our random number generator
     srand (time(NULL) );