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 // ***************************************************************************
16 #include "bamtools_filter.h"
17 #include "bamtools_options.h"
18 #include "BamReader.h"
19 #include "BamMultiReader.h"
22 using namespace BamTools;
24 // ---------------------------------------------
25 // FilterSettings implementation
27 struct FilterTool::FilterSettings {
30 bool HasInputBamFilename;
31 bool HasOutputBamFilename;
34 vector<string> InputFiles;
35 string OutputFilename;
39 : HasInputBamFilename(false)
40 , HasOutputBamFilename(false)
41 , OutputFilename(Options::StandardOut())
45 // ---------------------------------------------
46 // FilterTool implementation
48 FilterTool::FilterTool(void)
50 , m_settings(new FilterSettings)
52 // set program details
53 Options::SetProgramInfo("bamtools filter", "filters BAM file(s)", "-in <filename> [-in <filename> ... ] -out <filename> ");
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());
61 FilterTool::~FilterTool(void) {
66 int FilterTool::Help(void) {
67 Options::DisplayHelp();
71 int FilterTool::Run(int argc, char* argv[]) {
73 // parse command line arguments
74 Options::Parse(argc, argv, 1);
76 // set to default input if none provided
77 if ( !m_settings->HasInputBamFilename )
78 m_settings->InputFiles.push_back(Options::StandardIn());
81 BamMultiReader reader;
82 reader.Open(m_settings->InputFiles, false);