]> git.donarmstrong.com Git - bamtools.git/blob - src/toolkit/bamtools_header.cpp
180ef9e8f5f74cae23597eb46491f6dd73fe0248
[bamtools.git] / src / toolkit / bamtools_header.cpp
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 // ***************************************************************************
11
12 #include <iostream>
13 #include <string>
14 #include <vector>
15 #include "bamtools_header.h"
16 #include "bamtools_options.h"
17 #include "BamReader.h"
18 #include "BamMultiReader.h"
19 using namespace std;
20 using namespace BamTools; 
21   
22 // ---------------------------------------------
23 // HeaderSettings implementation
24
25 struct HeaderTool::HeaderSettings {
26
27     // flags
28     bool HasInputBamFilename;
29
30     // filenames
31     vector<string> InputFiles;
32     
33     // constructor
34     HeaderSettings(void)
35         : HasInputBamFilename(false)
36     { }
37 };  
38
39 // ---------------------------------------------
40 // HeaderTool implementation
41
42 HeaderTool::HeaderTool(void)
43     : AbstractTool()
44     , m_settings(new HeaderSettings)
45 {
46     // set program details
47     Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in <filename> -in <filename> ...] ");
48     
49     // set up options 
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());
52 }
53
54 HeaderTool::~HeaderTool(void) {
55     delete m_settings;
56     m_settings = 0;
57 }
58
59 int HeaderTool::Help(void) {
60     Options::DisplayHelp();
61     return 0;
62 }
63
64 int HeaderTool::Run(int argc, char* argv[]) {
65   
66     // parse command line arguments
67     Options::Parse(argc, argv, 1);
68   
69     // set to default input if none provided
70     if ( !m_settings->HasInputBamFilename ) 
71         m_settings->InputFiles.push_back(Options::StandardIn());
72     
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;
77         
78     // clean up & exit
79     reader.Close();
80     return 0;
81 }