From b1c4035f6ff27e9a04673bfec77b234d99aa5def Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 31 Aug 2010 23:09:20 -0400 Subject: [PATCH] Added uncompressed output as default behavior for Filter-, Merge-, and RandomTools when sending results to stdout. User can override this behavior using the command line option: -forceCompression --- src/toolkit/bamtools_filter.cpp | 8 ++++++-- src/toolkit/bamtools_merge.cpp | 10 +++++++--- src/toolkit/bamtools_random.cpp | 9 +++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/toolkit/bamtools_filter.cpp b/src/toolkit/bamtools_filter.cpp index 6941da2..af7af5f 100644 --- a/src/toolkit/bamtools_filter.cpp +++ b/src/toolkit/bamtools_filter.cpp @@ -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 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(""); diff --git a/src/toolkit/bamtools_merge.cpp b/src/toolkit/bamtools_merge.cpp index dcea172..8170f1a 100644 --- a/src/toolkit/bamtools_merge.cpp +++ b/src/toolkit/bamtools_merge.cpp @@ -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; diff --git a/src/toolkit/bamtools_random.cpp b/src/toolkit/bamtools_random.cpp index 89ca92b..2600f42 100644 --- a/src/toolkit/bamtools_random.cpp +++ b/src/toolkit/bamtools_random.cpp @@ -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) ); -- 2.39.2