X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Ftoolkit%2Fbamtools_coverage.cpp;h=6a4493de9992a5366f12e4997cd12dffeb2adcde;hb=1b6d41db1d2f66680620c1af78581f3b1d2a0d6e;hp=d46ba2050b37337b96456e98ce3ae494d38d8acb;hpb=2b99e4788a395d5cde8c7d857fa5c6532b6222dd;p=bamtools.git diff --git a/src/toolkit/bamtools_coverage.cpp b/src/toolkit/bamtools_coverage.cpp index d46ba20..6a4493d 100644 --- a/src/toolkit/bamtools_coverage.cpp +++ b/src/toolkit/bamtools_coverage.cpp @@ -1,23 +1,24 @@ // *************************************************************************** // bamtools_coverage.cpp (c) 2010 Derek Barnett, Erik Garrison // Marth Lab, Department of Biology, Boston College -// All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 16 September 2010 +// Last modified: 24 July 2013 // --------------------------------------------------------------------------- // Prints coverage data for a single BAM file // *************************************************************************** +#include "bamtools_coverage.h" + +#include +#include +#include +using namespace BamTools; + #include #include #include #include -#include "bamtools_coverage.h" -#include "bamtools_options.h" -#include "bamtools_pileup_engine.h" -#include "BamReader.h" using namespace std; -using namespace BamTools; namespace BamTools { @@ -36,12 +37,8 @@ class CoverageVisitor : public PileupVisitor { // PileupVisitor interface implementation public: -// void Visit(const int& refId, const int& position, const vector& alignments) { + // prints coverage results ( tab-delimited ) void Visit(const PileupPosition& pileupData) { - // ----------------------------------------- - // print coverage results ( tab-delimited ) - // <0-based pos> -// *m_out << m_references[refId].RefName << "\t" << position << "\t" << alignments.size() << endl; *m_out << m_references[pileupData.RefId].RefName << "\t" << pileupData.Position << "\t" << pileupData.PileupAlignments.size() << endl; @@ -83,8 +80,12 @@ struct CoverageTool::CoverageToolPrivate { // ctor & dtor public: - CoverageToolPrivate(CoverageTool::CoverageSettings* settings); - ~CoverageToolPrivate(void); + CoverageToolPrivate(CoverageTool::CoverageSettings* settings) + : m_settings(settings) + , m_out(cout.rdbuf()) + { } + + ~CoverageToolPrivate(void) { } // interface public: @@ -97,13 +98,6 @@ struct CoverageTool::CoverageToolPrivate { RefVector m_references; }; -CoverageTool::CoverageToolPrivate::CoverageToolPrivate(CoverageTool::CoverageSettings* settings) - : m_settings(settings) - , m_out(cout.rdbuf()) // default output to cout -{ } - -CoverageTool::CoverageToolPrivate::~CoverageToolPrivate(void) { } - bool CoverageTool::CoverageToolPrivate::Run(void) { // if output filename given @@ -113,7 +107,8 @@ bool CoverageTool::CoverageToolPrivate::Run(void) { // open output file stream outFile.open(m_settings->OutputFilename.c_str()); if ( !outFile ) { - cerr << "Could not open " << m_settings->OutputFilename << " for output." << endl; + cerr << "bamtools coverage ERROR: could not open " << m_settings->OutputFilename + << " for output" << endl; return false; } @@ -123,10 +118,12 @@ bool CoverageTool::CoverageToolPrivate::Run(void) { //open our BAM reader BamReader reader; - if (!reader.Open(m_settings->InputBamFilename)) { - cerr << "Could not open " << m_settings->InputBamFilename << " for reading." << endl; + if ( !reader.Open(m_settings->InputBamFilename) ) { + cerr << "bamtools coverage ERROR: could not open input BAM file: " << m_settings->InputBamFilename << endl; return false; } + + // retrieve references m_references = reader.GetReferenceData(); // set up our output 'visitor' @@ -140,10 +137,12 @@ bool CoverageTool::CoverageToolPrivate::Run(void) { BamAlignment al; while ( reader.GetNextAlignment(al) ) pileup.AddAlignment(al); + pileup.Flush(); // clean up reader.Close(); - if ( m_settings->HasOutputFile ) outFile.close(); + if ( m_settings->HasOutputFile ) + outFile.close(); delete cv; cv = 0; @@ -169,6 +168,7 @@ CoverageTool::CoverageTool(void) } CoverageTool::~CoverageTool(void) { + delete m_settings; m_settings = 0; @@ -186,9 +186,10 @@ int CoverageTool::Run(int argc, char* argv[]) { // parse command line arguments Options::Parse(argc, argv, 1); - // run internal ConvertTool implementation, return success/fail + // initialize CoverageTool with settings m_impl = new CoverageToolPrivate(m_settings); + // run CoverageTool, return success/fail if ( m_impl->Run() ) return 0; else