1 // ***************************************************************************
2 // bamtools_header.cpp (c) 2010 Derek Barnett, Erik Garrison
3 // Marth Lab, Department of Biology, Boston College
4 // ---------------------------------------------------------------------------
5 // Last modified: 7 April 2011
6 // ---------------------------------------------------------------------------
7 // Prints the SAM-style header from a single BAM file ( or merged header from
8 // multiple BAM files) to stdout
9 // ***************************************************************************
11 #include "bamtools_header.h"
13 #include <api/BamMultiReader.h>
14 #include <utils/bamtools_options.h>
15 using namespace BamTools;
22 // ---------------------------------------------
23 // HeaderSettings implementation
25 struct HeaderTool::HeaderSettings {
28 bool HasInputBamFilename;
31 vector<string> InputFiles;
35 : HasInputBamFilename(false)
39 struct HeaderTool::HeaderToolPrivate {
43 HeaderToolPrivate(HeaderTool::HeaderSettings* settings)
44 : m_settings(settings)
47 ~HeaderToolPrivate(void) { }
55 HeaderTool::HeaderSettings* m_settings;
58 bool HeaderTool::HeaderToolPrivate::Run(void) {
60 // set to default input if none provided
61 if ( !m_settings->HasInputBamFilename )
62 m_settings->InputFiles.push_back(Options::StandardIn());
64 // attemp to open BAM files
65 BamMultiReader reader;
66 if ( !reader.Open(m_settings->InputFiles) ) {
67 cerr << "bamtools header ERROR: could not open BAM file(s) for reading... Aborting." << endl;
71 // dump (merged) header contents to stdout
72 cout << reader.GetHeaderText() << endl;
79 // ---------------------------------------------
80 // HeaderTool implementation
82 HeaderTool::HeaderTool(void)
84 , m_settings(new HeaderSettings)
87 // set program details
88 Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in <filename> -in <filename> ...] ");
91 OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
92 Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename, m_settings->InputFiles, IO_Opts, Options::StandardIn());
95 HeaderTool::~HeaderTool(void) {
104 int HeaderTool::Help(void) {
105 Options::DisplayHelp();
109 int HeaderTool::Run(int argc, char* argv[]) {
111 // parse command line arguments
112 Options::Parse(argc, argv, 1);
114 // initialize HeaderTool with settings
115 m_impl = new HeaderToolPrivate(m_settings);
117 // run HeaderTool, return success/fail