]> git.donarmstrong.com Git - bamtools.git/blobdiff - src/toolkit/bamtools_revert.cpp
Minor cleanup
[bamtools.git] / src / toolkit / bamtools_revert.cpp
index 2c1ae96d13af73b358383626f37b08ef1b5a6e05..ba0debef68d953f09b86328c76d20cf306fc939f 100644 (file)
@@ -1,22 +1,29 @@
 // ***************************************************************************
-// bamtools_cpp (c) 2010 Derek Barnett, Alistair Ward
+// bamtools_revert.cpp (c) 2010 Derek Barnett, Alistair Ward
 // Marth Lab, Department of Biology, Boston College
-// All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 13 December 2010
+// Last modified: 7 April 2011
 // ---------------------------------------------------------------------------
-// Prints general alignment statistics for BAM file(s).
+// Removes duplicate marks and restores original base qualities
 // ***************************************************************************
 
+#include "bamtools_revert.h"
+
+#include <api/BamReader.h>
+#include <api/BamWriter.h>
+#include <utils/bamtools_options.h>
+#include <utils/bamtools_utilities.h>
+using namespace BamTools;
+
 #include <iostream>
 #include <string>
-#include "bamtools_revert.h"
-#include "bamtools_options.h"
-#include "bamtools_utilities.h"
-#include "BamReader.h"
-#include "BamWriter.h"
 using namespace std;
-using namespace BamTools;
+
+namespace BamTools {
+
+static const string OQ_TAG = "OQ";
+
+} // namespace BamTools;
 
 // ---------------------------------------------
 // RevertSettings implementation
@@ -53,8 +60,10 @@ struct RevertTool::RevertToolPrivate {
   
     // ctor & dtor
     public:
-        RevertToolPrivate(RevertTool::RevertSettings* settings);
-        ~RevertToolPrivate(void);
+        RevertToolPrivate(RevertTool::RevertSettings* settings)
+            : m_settings(settings)
+        { }
+        ~RevertToolPrivate(void) { }
   
     // 'public' interface
     public:
@@ -67,27 +76,21 @@ struct RevertTool::RevertToolPrivate {
     // data members
     private:
         RevertTool::RevertSettings* m_settings;
-        string m_OQ;
 };
 
-RevertTool::RevertToolPrivate::RevertToolPrivate(RevertTool::RevertSettings* settings)
-    : m_settings(settings)
-    , m_OQ("OQ")
-{ }
-
-RevertTool::RevertToolPrivate::~RevertToolPrivate(void) { }
-
-// reverts a BAM alignment
-// default behavior (for now) is : replace Qualities with OQ, clear IsDuplicate flag
+// 'reverts' a BAM alignment
+// default behavior (for now) is:
+//   1 - replace Qualities with OQ contents
+//   2 - clear IsDuplicate flag
 // can override default behavior using command line options
 void RevertTool::RevertToolPrivate::RevertAlignment(BamAlignment& al) {
 
-    // replace Qualities with OQ, if requested
+    // replace Qualities with OQ contents, if requested
     if ( !m_settings->IsKeepQualities ) {
         string originalQualities;
-        if ( al.GetTag(m_OQ, originalQualities) ) {
+        if ( al.GetTag(OQ_TAG, originalQualities) ) {
             al.Qualities = originalQualities;
-            al.RemoveTag(m_OQ);
+            al.RemoveTag(OQ_TAG);
         }
     }
 
@@ -101,7 +104,8 @@ bool RevertTool::RevertToolPrivate::Run(void) {
     // opens the BAM file without checking for indexes
     BamReader reader;
     if ( !reader.Open(m_settings->InputFilename) ) {
-        cerr << "Could not open input BAM file... quitting." << endl;
+        cerr << "bamtools revert ERROR: could not open " << m_settings->InputFilename
+             << " for reading... Aborting." << endl;
         return false;
     }
 
@@ -109,11 +113,19 @@ bool RevertTool::RevertToolPrivate::Run(void) {
     const string& headerText = reader.GetHeaderText();
     const RefVector& references = reader.GetReferenceData();
     
-    // open writer
+    // determine compression mode for BamWriter
+    bool writeUncompressed = ( m_settings->OutputFilename == Options::StandardOut() &&
+                              !m_settings->IsForceCompression );
+    BamWriter::CompressionMode compressionMode = BamWriter::Compressed;
+    if ( writeUncompressed ) compressionMode = BamWriter::Uncompressed;
+
+    // open BamWriter
     BamWriter writer;
-    bool writeUncompressed = ( m_settings->OutputFilename == Options::StandardOut() && !m_settings->IsForceCompression );
-    if ( !writer.Open(m_settings->OutputFilename, headerText, references, writeUncompressed) ) {
-        cerr << "Could not open " << m_settings->OutputFilename << " for writing." << endl;
+    writer.SetCompressionMode(compressionMode);
+    if ( !writer.Open(m_settings->OutputFilename, headerText, references) ) {
+        cerr << "bamtools revert ERROR: could not open " << m_settings->OutputFilename
+             << " for writing... Aborting." << endl;
+        reader.Close();
         return false;
     }
 
@@ -139,7 +151,7 @@ RevertTool::RevertTool(void)
     , m_impl(0)
 {
     // set program details
-    Options::SetProgramInfo("bamtools revert", "removes duplicate marks and restores original (non-recalibrated) base qualities", "[-in <filename> ... ]");
+    Options::SetProgramInfo("bamtools revert", "removes duplicate marks and restores original (non-recalibrated) base qualities", "[-in <filename> -in <filename> ...] [-out <filename> | [-forceCompression]] [revertOptions]");
     
     // set up options 
     OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
@@ -153,6 +165,7 @@ RevertTool::RevertTool(void)
 }
 
 RevertTool::~RevertTool(void) {
+
     delete m_settings;
     m_settings = 0;
     
@@ -170,9 +183,12 @@ int RevertTool::Run(int argc, char* argv[]) {
     // parse command line arguments
     Options::Parse(argc, argv, 1);
 
-    // run internal RevertTool implementation, return success/fail
+    // intialize RevertTool with settings
     m_impl = new RevertToolPrivate(m_settings);
     
-    if ( m_impl->Run() ) return 0;
-    else return 1;
+    // run RevertTool, return success/fail
+    if ( m_impl->Run() )
+        return 0;
+    else
+        return 1;
 }