X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Ftoolkit%2Fbamtools_header.cpp;fp=src%2Ftoolkit%2Fbamtools_header.cpp;h=534bb14e1cbbe03716fdb8856e32c31db340bdcc;hb=2126ee0d204be8293df9492b48bce076a41a2a25;hp=a08c632defa5bbbce75609f040e03d7a536c28da;hpb=75ebabf8071379eaec8349f6708dfb2567d289c6;p=bamtools.git diff --git a/src/toolkit/bamtools_header.cpp b/src/toolkit/bamtools_header.cpp index a08c632..534bb14 100644 --- a/src/toolkit/bamtools_header.cpp +++ b/src/toolkit/bamtools_header.cpp @@ -2,7 +2,7 @@ // bamtools_header.cpp (c) 2010 Derek Barnett, Erik Garrison // Marth Lab, Department of Biology, Boston College // --------------------------------------------------------------------------- -// Last modified: 7 April 2011 +// Last modified: 10 December 2012 // --------------------------------------------------------------------------- // Prints the SAM-style header from a single BAM file ( or merged header from // multiple BAM files) to stdout @@ -14,6 +14,7 @@ #include using namespace BamTools; +#include #include #include #include @@ -25,14 +26,17 @@ using namespace std; struct HeaderTool::HeaderSettings { // flags - bool HasInputBamFilename; + bool HasInput; + bool HasInputFilelist; // filenames vector InputFiles; + string InputFilelist; // constructor HeaderSettings(void) - : HasInputBamFilename(false) + : HasInput(false) + , HasInputFilelist(false) { } }; @@ -58,9 +62,23 @@ struct HeaderTool::HeaderToolPrivate { bool HeaderTool::HeaderToolPrivate::Run(void) { // set to default input if none provided - if ( !m_settings->HasInputBamFilename ) + if ( !m_settings->HasInput && !m_settings->HasInputFilelist ) m_settings->InputFiles.push_back(Options::StandardIn()); + // add files in the filelist to the input file list + if ( m_settings->HasInputFilelist ) { + + ifstream filelist(m_settings->InputFilelist.c_str(), ios::in); + if ( !filelist.is_open() ) { + cerr << "bamtools header ERROR: could not open input BAM file list... Aborting." << endl; + return false; + } + + string line; + while ( getline(filelist, line) ) + m_settings->InputFiles.push_back(line); + } + // attemp to open BAM files BamMultiReader reader; if ( !reader.Open(m_settings->InputFiles) ) { @@ -85,11 +103,12 @@ HeaderTool::HeaderTool(void) , m_impl(0) { // set program details - Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in -in ...] "); + Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in -in ... | -list ]"); // 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->InputFiles, IO_Opts, Options::StandardIn()); + Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInput, m_settings->InputFiles, IO_Opts, Options::StandardIn()); + Options::AddValueOption("-list", "filename", "the input BAM file list, one line per file", "", m_settings->HasInputFilelist, m_settings->InputFilelist, IO_Opts); } HeaderTool::~HeaderTool(void) {