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: 21 March 2011
7 // ---------------------------------------------------------------------------
8 // Prints the SAM-style header from a single BAM file ( or merged header from
9 // multiple BAM files) to stdout
10 // ***************************************************************************
12 #include "bamtools_header.h"
14 #include <api/BamMultiReader.h>
15 #include <utils/bamtools_options.h>
16 using namespace BamTools;
23 // ---------------------------------------------
24 // HeaderSettings implementation
26 struct HeaderTool::HeaderSettings {
29 bool HasInputBamFilename;
32 vector<string> InputFiles;
36 : HasInputBamFilename(false)
40 // ---------------------------------------------
41 // HeaderTool implementation
43 HeaderTool::HeaderTool(void)
45 , m_settings(new HeaderSettings)
47 // set program details
48 Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in <filename> -in <filename> ...] ");
51 OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
52 Options::AddValueOption("-in", "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename, m_settings->InputFiles, IO_Opts, Options::StandardIn());
55 HeaderTool::~HeaderTool(void) {
60 int HeaderTool::Help(void) {
61 Options::DisplayHelp();
65 int HeaderTool::Run(int argc, char* argv[]) {
67 // parse command line arguments
68 Options::Parse(argc, argv, 1);
70 // set to default input if none provided
71 if ( !m_settings->HasInputBamFilename )
72 m_settings->InputFiles.push_back(Options::StandardIn());
74 // attemp to open BAM files
75 BamMultiReader reader;
76 if ( !reader.Open(m_settings->InputFiles) ) {
77 cerr << "bamtools header ERROR: could not open BAM file(s) for reading... Aborting." << endl;
81 // dump (merged) header contents to stdout
82 cout << reader.GetHeaderText() << endl;