1 // ***************************************************************************
2 // bamtools_header.cpp (c) 2010 Derek Barnett, Erik Garrison
3 // Marth Lab, Department of Biology, Boston College
4 // All rights reserved.
5 // ---------------------------------------------------------------------------
6 // Last modified: 1 June 2010
7 // ---------------------------------------------------------------------------
8 // Prints the SAM-style header from a single BAM file ( or merged header from
9 // multiple BAM files) to stdout
10 // ***************************************************************************
15 #include "bamtools_header.h"
16 #include "bamtools_options.h"
17 #include "BamReader.h"
18 #include "BamMultiReader.h"
20 using namespace BamTools;
22 // ---------------------------------------------
23 // HeaderSettings implementation
25 struct HeaderTool::HeaderSettings {
28 bool HasInputBamFilename;
31 vector<string> InputFiles;
35 : HasInputBamFilename(false)
39 // ---------------------------------------------
40 // HeaderTool implementation
42 HeaderTool::HeaderTool(void)
44 , m_settings(new HeaderSettings)
46 // set program details
47 Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in <filename> -in <filename> ...] ");
50 OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
51 Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename, m_settings->InputFiles, IO_Opts, Options::StandardIn());
54 HeaderTool::~HeaderTool(void) {
59 int HeaderTool::Help(void) {
60 Options::DisplayHelp();
64 int HeaderTool::Run(int argc, char* argv[]) {
66 // parse command line arguments
67 Options::Parse(argc, argv, 1);
69 // set to default input if none provided
70 if ( !m_settings->HasInputBamFilename )
71 m_settings->InputFiles.push_back(Options::StandardIn());
73 // if able to open files, dump (merged) header contents to stdout
74 BamMultiReader reader;
75 if ( reader.Open(m_settings->InputFiles, false) )
76 cout << reader.GetHeaderText() << endl;