]> git.donarmstrong.com Git - bamtools.git/commitdiff
Fixed: split tool crash when trying to split unmapped reads by reference
authorderek <derekwbarnett@gmail.com>
Thu, 8 Dec 2011 08:14:17 +0000 (03:14 -0500)
committerderek <derekwbarnett@gmail.com>
Thu, 8 Dec 2011 08:14:17 +0000 (03:14 -0500)
src/toolkit/bamtools_split.cpp

index 4575d8596cc9c1dc8b808e8690f3ca2bfbb2d08d..32918193361cdb6f49fc78a3042df158f3dc948d 100644 (file)
@@ -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<string>(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;
         }
     }