From 5eb631a840b7f24b308ecf6eea118d020cbcdff2 Mon Sep 17 00:00:00 2001 From: derek Date: Thu, 8 Dec 2011 03:14:17 -0500 Subject: [PATCH] Fixed: split tool crash when trying to split unmapped reads by reference --- src/toolkit/bamtools_split.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/toolkit/bamtools_split.cpp b/src/toolkit/bamtools_split.cpp index 4575d85..3291819 100644 --- a/src/toolkit/bamtools_split.cpp +++ b/src/toolkit/bamtools_split.cpp @@ -311,9 +311,17 @@ bool SplitTool::SplitToolPrivate::SplitReference(void) { // if no writer associated with this value if ( writerIter == outputFiles.end() ) { - // open new BamWriter - const string refName = m_references.at(currentRefId).RefName; + // fetch reference name for ID + string refName; + if ( currentRefId == -1 ) + refName = "unmapped"; + else + refName = m_references.at(currentRefId).RefName; + + // construct new output filename const string outputFilename = m_outputFilenameStub + SPLIT_REFERENCE_TOKEN + refName + ".bam"; + + // open new BamWriter writer = new BamWriter; if ( !writer->Open(outputFilename, m_header, m_references) ) { cerr << "bamtools split ERROR: could not open " << outputFilename @@ -373,9 +381,13 @@ bool SplitTool::SplitToolPrivate::SplitTag(void) { case (Constants::BAM_TAG_TYPE_STRING) : case (Constants::BAM_TAG_TYPE_HEX) : return SplitTagImpl(al); + + case (Constants::BAM_TAG_TYPE_ARRAY) : + cerr << "bamtools split ERROR: array tag types are not supported" << endl; + return false; default: - fprintf(stderr, "bamtools split ERROR: unknown tag type encountered: [%c]\n", tagType); + cerr << "bamtools split ERROR: unknown tag type encountered: " << tagType << endl; return false; } } -- 2.39.2