]> git.donarmstrong.com Git - bamtools.git/blob - src/toolkit/bamtools_resolve.cpp
Brought API up to compliance with recent SAM Format Spec (v1.4-r962)
[bamtools.git] / src / toolkit / bamtools_resolve.cpp
1 // ***************************************************************************
2 // bamtools_resolve.cpp (c) 2011
3 // Marth Lab, Department of Biology, Boston College
4 // All rights reserved.
5 // ---------------------------------------------------------------------------
6 // Last modified: 7 April 2011
7 // ---------------------------------------------------------------------------
8 // Resolves paired-end reads (marking the IsProperPair flag as needed)
9 // ***************************************************************************
10
11 #include "bamtools_resolve.h"
12
13 #include <api/BamReader.h>
14 #include <api/BamWriter.h>
15 #include <utils/bamtools_options.h>
16 #include <utils/bamtools_utilities.h>
17 using namespace BamTools;
18
19 #include <iostream>
20 #include <string>
21 using namespace std;
22
23 // ---------------------------------------------
24 // ResolveSettings implementation
25
26 struct ResolveTool::ResolveSettings {
27
28     // flags
29     bool HasInput;
30     bool HasOutput;
31     bool IsForceCompression;
32
33     // filenames
34     string InputFilename;
35     string OutputFilename;
36
37     // constructor
38     ResolveSettings(void)
39         : HasInput(false)
40         , HasOutput(false)
41         , IsForceCompression(false)
42         , InputFilename(Options::StandardIn())
43         , OutputFilename(Options::StandardOut())
44     { }
45 };
46
47 // ---------------------------------------------
48 // ResolveToolPrivate implementation
49
50 struct ResolveTool::ResolveToolPrivate {
51
52     // ctor & dtor
53     public:
54         ResolveToolPrivate(ResolveTool::ResolveSettings* settings)
55             : m_settings(settings)
56         { }
57
58         ~ResolveToolPrivate(void) { }
59
60     // 'public' interface
61     public:
62         bool Run(void);
63
64     // internal methods
65     private:
66
67     // data members
68     private:
69         ResolveTool::ResolveSettings* m_settings;
70 };
71
72 bool ResolveTool::ResolveToolPrivate::Run(void) {
73     cerr << "Resoling BAM file..." << endl;
74     return true;
75 }
76
77 // ---------------------------------------------
78 // ResolveTool implementation
79
80 ResolveTool::ResolveTool(void)
81     : AbstractTool()
82     , m_settings(new ResolveSettings)
83     , m_impl(0)
84 {
85     // set program details
86     Options::SetProgramInfo("bamtools resolve", "resolves paired-end reads (marking the IsProperPair flag as needed)", "[-in <filename> -in <filename> ...] [-out <filename> | [-forceCompression]] [resolveOptions]");
87
88     // set up options
89     OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
90     Options::AddValueOption("-in",  "BAM filename", "the input BAM file",  "", m_settings->HasInput,  m_settings->InputFilename,  IO_Opts, Options::StandardIn());
91     Options::AddValueOption("-out", "BAM filename", "the output BAM file", "", m_settings->HasOutput, m_settings->OutputFilename, IO_Opts, Options::StandardOut());
92     Options::AddOption("-forceCompression", "if results are sent to stdout (like when piping to another tool), default behavior is to leave output uncompressed. Use this flag to override and force compression", m_settings->IsForceCompression, IO_Opts);
93 }
94
95 ResolveTool::~ResolveTool(void) {
96
97     delete m_settings;
98     m_settings = 0;
99
100     delete m_impl;
101     m_impl = 0;
102 }
103
104 int ResolveTool::Help(void) {
105     Options::DisplayHelp();
106     return 0;
107 }
108
109 int ResolveTool::Run(int argc, char* argv[]) {
110
111     // parse command line arguments
112     Options::Parse(argc, argv, 1);
113
114     // initialize ResolveTool
115     m_impl = new ResolveToolPrivate(m_settings);
116
117     // run ResolveTool, return success/failure
118     if ( m_impl->Run() ) return 0;
119     else return 1;
120 }