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