]> git.donarmstrong.com Git - bamtools.git/blob - bamtools_filter.cpp
json output
[bamtools.git] / bamtools_filter.cpp
1 // ***************************************************************************
2 // bamtools_filter.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 // Filters a single BAM file (or filters multiple BAM files and merges) 
9 // according to some user-specified criteria.
10 // ***************************************************************************
11
12 #include <iostream>
13 #include <string>
14 #include <vector>
15
16 #include "bamtools_filter.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 // FilterSettings implementation
26
27 struct FilterTool::FilterSettings {
28
29     // flags
30     bool HasInputBamFilename;
31     bool HasOutputBamFilename;
32
33     // filenames
34     vector<string> InputFiles;
35     string OutputFilename;
36     
37     // constructor
38     FilterSettings(void)
39         : HasInputBamFilename(false)
40         , HasOutputBamFilename(false)
41         , OutputFilename(Options::StandardOut())
42     { }
43 };  
44
45 // ---------------------------------------------
46 // FilterTool implementation
47
48 FilterTool::FilterTool(void)
49     : AbstractTool()
50     , m_settings(new FilterSettings)
51 {
52     // set program details
53     Options::SetProgramInfo("bamtools filter", "filters BAM file(s)", "-in <filename> [-in <filename> ... ] -out <filename> ");
54     
55     // set up options 
56     OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
57     Options::AddValueOption("-in",  "BAM filename", "the input BAM file(s)", "", m_settings->HasInputBamFilename,  m_settings->InputFiles,     IO_Opts, Options::StandardIn());
58     Options::AddValueOption("-out", "BAM filename", "the output BAM file",   "", m_settings->HasOutputBamFilename, m_settings->OutputFilename, IO_Opts, Options::StandardOut());
59 }
60
61 FilterTool::~FilterTool(void) {
62     delete m_settings;
63     m_settings = 0;
64 }
65
66 int FilterTool::Help(void) {
67     Options::DisplayHelp();
68     return 0;
69 }
70
71 int FilterTool::Run(int argc, char* argv[]) {
72   
73     // parse command line arguments
74     Options::Parse(argc, argv, 1);
75   
76     // set to default input if none provided
77     if ( !m_settings->HasInputBamFilename ) 
78         m_settings->InputFiles.push_back(Options::StandardIn());
79     
80     // open files
81     BamMultiReader reader;
82     reader.Open(m_settings->InputFiles, false);
83         
84     // do filtering
85     
86     // clean up & exit
87     reader.Close();
88     return 0;
89 }