// Marth Lab, Department of Biology, Boston College
// All rights reserved.
// ---------------------------------------------------------------------------
-// Last modified: 22 July 2010
+// Last modified: 19 September 2010
// ---------------------------------------------------------------------------
// Integrates a number of BamTools functionalities into a single executable.
// ***************************************************************************
-// Std C/C++ includes
#include <iostream>
-
-// BamTools includes
#include "bamtools_convert.h"
#include "bamtools_count.h"
#include "bamtools_coverage.h"
#include "bamtools_merge.h"
#include "bamtools_random.h"
#include "bamtools_sort.h"
+#include "bamtools_split.h"
#include "bamtools_stats.h"
-
using namespace std;
using namespace BamTools;
static const string MERGE = "merge";
static const string RANDOM = "random";
static const string SORT = "sort";
+static const string SPLIT = "split";
static const string STATS = "stats";
// ------------------------------------------
static const string LONG_VERSION = "--version";
static const string SHORT_VERSION = "-v";
+// ------------------------------------------
+// Subtool factory method
+AbstractTool* CreateTool(const string& arg) {
+
+ // determine tool type based on arg
+ if ( arg == CONVERT ) return new ConvertTool;
+ if ( arg == COUNT ) return new CountTool;
+ if ( arg == COVERAGE ) return new CoverageTool;
+ if ( arg == FILTER ) return new FilterTool;
+ if ( arg == HEADER ) return new HeaderTool;
+ if ( arg == INDEX ) return new IndexTool;
+ if ( arg == MERGE ) return new MergeTool;
+ if ( arg == RANDOM ) return new RandomTool;
+ if ( arg == SORT ) return new SortTool;
+ if ( arg == SPLIT ) return new SplitTool;
+ if ( arg == STATS ) return new StatsTool;
+
+ // unknown arg
+ return 0;
+}
+
// ------------------------------------------
// Print help info
int Help(int argc, char* argv[]) {
// 'bamtools help COMMAND'
if (argc > 2) {
- AbstractTool* tool(0);
- if ( argv[2] == CONVERT ) tool = new ConvertTool;
- if ( argv[2] == COUNT ) tool = new CountTool;
- if ( argv[2] == COVERAGE ) tool = new CoverageTool;
- if ( argv[2] == FILTER ) tool = new FilterTool;
- if ( argv[2] == HEADER ) tool = new HeaderTool;
- if ( argv[2] == INDEX ) tool = new IndexTool;
- if ( argv[2] == MERGE ) tool = new MergeTool;
- if ( argv[2] == RANDOM ) tool = new RandomTool;
- if ( argv[2] == SORT ) tool = new SortTool;
- if ( argv[2] == STATS ) tool = new StatsTool;
+ AbstractTool* tool = CreateTool( argv[2] );
+// if ( argv[2] == CONVERT ) tool = new ConvertTool;
+// if ( argv[2] == COUNT ) tool = new CountTool;
+// if ( argv[2] == COVERAGE ) tool = new CoverageTool;
+// if ( argv[2] == FILTER ) tool = new FilterTool;
+// if ( argv[2] == HEADER ) tool = new HeaderTool;
+// if ( argv[2] == INDEX ) tool = new IndexTool;
+// if ( argv[2] == MERGE ) tool = new MergeTool;
+// if ( argv[2] == RANDOM ) tool = new RandomTool;
+// if ( argv[2] == SORT ) tool = new SortTool;
+// if ( argv[2] == SPLIT ) tool = new SplitTool;
+// if ( argv[2] == STATS ) tool = new StatsTool;
// if tool known, print its help screen
if ( tool ) return tool->Help();
cerr << "\tmerge Merge multiple BAM files into single file" << endl;
cerr << "\trandom Select random alignments from existing BAM file(s)" << endl;
cerr << "\tsort Sorts the BAM file according to some criteria" << endl;
+ cerr << "\tsplit Splits a BAM file on user-specified property, creating a new BAM output file for each value found" << endl;
cerr << "\tstats Prints some basic statistics from input BAM file(s)" << endl;
cerr << endl;
cerr << "See 'bamtools help COMMAND' for more information on a specific command." << endl;
if ( (argv[1] == VERSION) || (argv[1] == LONG_VERSION) || (argv[1] == SHORT_VERSION) ) return Version();
// determine desired sub-tool
- AbstractTool* tool(0);
- if ( argv[1] == CONVERT ) tool = new ConvertTool;
- if ( argv[1] == COUNT ) tool = new CountTool;
- if ( argv[1] == COVERAGE ) tool = new CoverageTool;
- if ( argv[1] == FILTER ) tool = new FilterTool;
- if ( argv[1] == HEADER ) tool = new HeaderTool;
- if ( argv[1] == INDEX ) tool = new IndexTool;
- if ( argv[1] == MERGE ) tool = new MergeTool;
- if ( argv[1] == RANDOM ) tool = new RandomTool;
- if ( argv[1] == SORT ) tool = new SortTool;
- if ( argv[1] == STATS ) tool = new StatsTool;
+ AbstractTool* tool = CreateTool( argv[1] );
+// if ( argv[1] == CONVERT ) tool = new ConvertTool;
+// if ( argv[1] == COUNT ) tool = new CountTool;
+// if ( argv[1] == COVERAGE ) tool = new CoverageTool;
+// if ( argv[1] == FILTER ) tool = new FilterTool;
+// if ( argv[1] == HEADER ) tool = new HeaderTool;
+// if ( argv[1] == INDEX ) tool = new IndexTool;
+// if ( argv[1] == MERGE ) tool = new MergeTool;
+// if ( argv[1] == RANDOM ) tool = new RandomTool;
+// if ( argv[1] == SORT ) tool = new SortTool;
+// if ( argv[1] == SPLIT ) tool = new SplitTool;
+// if ( argv[1] == STATS ) tool = new StatsTool;
// if found, run tool
if ( tool ) return tool->Run(argc, argv);