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