From: Derek Date: Thu, 22 Jul 2010 18:24:54 +0000 (-0400) Subject: Various cleanups. Added -noheader to SAM conversion in ConvertTool X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=344deb0be8f4cc5db83cdfe7b31b9e8276ff677c;p=bamtools.git Various cleanups. Added -noheader to SAM conversion in ConvertTool --- diff --git a/BamAux.h b/BamAux.h index 6387dd3..833f52f 100644 --- a/BamAux.h +++ b/BamAux.h @@ -3,7 +3,7 @@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 21 July 2010 (DB) +// Last modified: 22 July 2010 (DB) // --------------------------------------------------------------------------- // Provides the basic constants, data structures, etc. for using BAM files // *************************************************************************** diff --git a/bamtools.cpp b/bamtools.cpp index ef13e28..3b5c458 100644 --- a/bamtools.cpp +++ b/bamtools.cpp @@ -3,7 +3,7 @@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 20 July 2010 +// Last modified: 22 July 2010 // --------------------------------------------------------------------------- // Integrates a number of BamTools functionalities into a single executable. // *************************************************************************** @@ -20,7 +20,6 @@ #include "bamtools_index.h" #include "bamtools_merge.h" #include "bamtools_random.h" -// #include "bamtools_sam.h" #include "bamtools_sort.h" #include "bamtools_stats.h" @@ -37,7 +36,6 @@ static const string HEADER = "header"; static const string INDEX = "index"; static const string MERGE = "merge"; static const string RANDOM = "random"; -// static const string SAM = "sam"; static const string SORT = "sort"; static const string STATS = "stats"; @@ -67,7 +65,6 @@ int Help(int argc, char* argv[]) { if ( argv[2] == INDEX ) tool = new IndexTool; if ( argv[2] == MERGE ) tool = new MergeTool; if ( argv[2] == RANDOM ) tool = new RandomTool; -// if ( argv[2] == SAM ) tool = new SamTool; if ( argv[2] == SORT ) tool = new SortTool; if ( argv[2] == STATS ) tool = new StatsTool; @@ -88,7 +85,6 @@ int Help(int argc, char* argv[]) { cerr << "\tindex Generates index for BAM file" << endl; cerr << "\tmerge Merge multiple BAM files into single file" << endl; cerr << "\trandom Grab a random subset of alignments" << endl; -// cerr << "\tsam Prints the BAM file in SAM (text) format" << endl; cerr << "\tsort Sorts the BAM file according to some criteria" << endl; cerr << "\tstats Prints some basic statistics from the input BAM file" << endl; cerr << endl; @@ -132,7 +128,6 @@ int main(int argc, char* argv[]) { if ( argv[1] == INDEX ) tool = new IndexTool; if ( argv[1] == MERGE ) tool = new MergeTool; if ( argv[1] == RANDOM ) tool = new RandomTool; -// if ( argv[1] == SAM ) tool = new SamTool; if ( argv[1] == SORT ) tool = new SortTool; if ( argv[1] == STATS ) tool = new StatsTool; diff --git a/bamtools_convert.cpp b/bamtools_convert.cpp index 771feb2..de9cc36 100644 --- a/bamtools_convert.cpp +++ b/bamtools_convert.cpp @@ -3,7 +3,7 @@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 9 July 2010 +// Last modified: 22 July 2010 // --------------------------------------------------------------------------- // Converts between BAM and a number of other formats // *************************************************************************** @@ -83,6 +83,7 @@ struct ConvertTool::ConvertSettings { // pileup flags bool HasFastaFilename; + bool IsOmittingSamHeader; bool IsPrintingPileupMapQualities; // options @@ -101,6 +102,7 @@ struct ConvertTool::ConvertSettings { , HasFormat(false) , HasRegion(false) , HasFastaFilename(false) + , IsOmittingSamHeader(false) , IsPrintingPileupMapQualities(false) , OutputFilename(Options::StandardOut()) { } @@ -129,6 +131,9 @@ ConvertTool::ConvertTool(void) OptionGroup* PileupOpts = Options::CreateOptionGroup("Pileup Options"); Options::AddValueOption("-fasta", "FASTA filename", "FASTA reference file", "", m_settings->HasFastaFilename, m_settings->FastaFilename, PileupOpts, ""); Options::AddOption("-mapqual", "print the mapping qualities", m_settings->IsPrintingPileupMapQualities, PileupOpts); + + OptionGroup* SamOpts = Options::CreateOptionGroup("SAM Options"); + Options::AddOption("-noheader", "omit the SAM header from output", m_settings->IsOmittingSamHeader, SamOpts); } ConvertTool::~ConvertTool(void) { @@ -181,7 +186,7 @@ bool ConvertTool::ConvertToolPrivate::Run(void) { // open input files BamMultiReader reader; - reader.Open(m_settings->InputFiles); + reader.Open(m_settings->InputFiles, false); m_references = reader.GetReferenceData(); // set region if specified @@ -250,6 +255,12 @@ bool ConvertTool::ConvertToolPrivate::Run(void) { convertedOk = false; } + // if SAM format & not omitting header, print SAM header + if ( (m_settings->Format == FORMAT_SAM) && !m_settings->IsOmittingSamHeader ) { + string headerText = reader.GetHeaderText(); + m_out << headerText; + } + // ------------------------ // do conversion if ( !formatError ) { @@ -524,14 +535,14 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { size_t index = 0; while ( index < tagDataLength ) { - // write tag name - m_out << "\t" << a.TagData.substr(index, 2) << ":"; + // write tag name + string tagName = a.TagData.substr(index, 2); + m_out << "\t" << tagName << ":"; index += 2; // get data type char type = a.TagData.at(index); ++index; - switch (type) { case('A') : m_out << "A:" << tagData[index]; @@ -549,7 +560,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { break; case('S') : - m_out << "i:" << BgzfData::UnpackUnsignedShort(&tagData[index]); + m_out << "i:" << BgzfData::UnpackUnsignedShort(&tagData[index]); index += 2; break; @@ -580,7 +591,7 @@ void ConvertTool::ConvertToolPrivate::PrintSam(const BamAlignment& a) { case('Z') : case('H') : - m_out << type << ":"; + m_out << type << ":"; while (tagData[index]) { m_out << tagData[index]; ++index;