From 155ba46a7dc23b749cc353b194f7ae6336f9f23d Mon Sep 17 00:00:00 2001 From: Erik Garrison Date: Wed, 7 Jul 2010 15:54:39 -0400 Subject: [PATCH] Merge BamMultiReader and SetRegion into bamtools convert This commit merges the BamMultiReader and SetRegion method into the conversion tool. This greatly simplifies the process of dumping alignments from regions in a set of bam files. Breaking in this commit: stdin input by default. To be fixed in a subsequent commit. --- bamtools_convert.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/bamtools_convert.cpp b/bamtools_convert.cpp index 655c25a..633c21d 100644 --- a/bamtools_convert.cpp +++ b/bamtools_convert.cpp @@ -16,6 +16,7 @@ #include "bamtools_convert.h" //#include "bamtools_format.h" #include "bamtools_options.h" +#include "bamtools_utilities.h" #include "BGZF.h" #include "BamReader.h" #include "BamMultiReader.h" @@ -45,20 +46,25 @@ namespace BamTools { struct ConvertTool::ConvertSettings { // flags - bool HasInputBamFilename; + bool HasInputBamFilenames; bool HasOutputBamFilename; bool HasFormat; + bool HasRegion; // filenames - string InputFilename; + //string InputFilename; + vector InputFiles; string OutputFilename; string Format; + + // region + string Region; // constructor ConvertSettings(void) - : HasInputBamFilename(false) + : HasInputBamFilenames(false) , HasOutputBamFilename(false) - , InputFilename(Options::StandardIn()) + //, InputFilename(Options::StandardIn()) , OutputFilename(Options::StandardOut()) { } }; @@ -75,9 +81,12 @@ ConvertTool::ConvertTool(void) // set up options OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output"); - Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename, m_settings->InputFilename, IO_Opts, Options::StandardIn()); + //Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename, m_settings->InputFilename, IO_Opts, Options::StandardIn()); + Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilenames, m_settings->InputFiles, IO_Opts, Options::StandardIn()); Options::AddValueOption("-out", "BAM filename", "the output BAM file", "", m_settings->HasOutputBamFilename, m_settings->OutputFilename, IO_Opts, Options::StandardOut()); Options::AddValueOption("-format", "FORMAT", "the output file format - see README for recognized formats", "", m_settings->HasFormat, m_settings->Format, IO_Opts); + OptionGroup* FilterOpts = Options::CreateOptionGroup("Filters"); + Options::AddValueOption("-region", "REGION", "genomic region. Index file is recommended for better performance, and is read automatically if it exists as .bai. See \'bamtools help index\' for more details on creating one", "", m_settings->HasRegion, m_settings->Region, FilterOpts); } ConvertTool::~ConvertTool(void) { @@ -98,9 +107,16 @@ int ConvertTool::Run(int argc, char* argv[]) { Options::Parse(argc, argv, 1); // open files - BamReader reader; - reader.Open(m_settings->InputFilename); + BamMultiReader reader; + reader.Open(m_settings->InputFiles); references = reader.GetReferenceData(); + + BamRegion region; + if ( Utilities::ParseRegionString(m_settings->Region, reader, region) ) { + if ( !reader.SetRegion(region) ) { + cerr << "Could not set BamReader region to REGION: " << m_settings->Region << endl; + } + } // ---------------------------------------- // do conversion,depending on desired output format -- 2.39.2