]> git.donarmstrong.com Git - bamtools.git/blobdiff - BamMultiReader.cpp
fixed potential bug with previous commit
[bamtools.git] / BamMultiReader.cpp
index 2d8580d1d96158d0afe133e87d57770503b0a22d..92911c90da8793a0a86bed63b9ba49ddce137009 100644 (file)
@@ -204,6 +204,7 @@ bool BamMultiReader::CreateIndexes(void) {
 const string BamMultiReader::GetHeaderText(void) const {
 
     string mergedHeader = "";
+    map<string, bool> readGroups;
 
     // foreach extraction entry (each BAM file)
     bool isFirstTime = true;
@@ -231,10 +232,24 @@ const string BamMultiReader::GetHeaderText(void) const {
                 }
             }
 
-            // (for all files) append RG entries
+            // (for all files) append RG entries if they are unique
             if ( headerLine.find("@RG") == 0 ) {
-                mergedHeader.append(headerLine.c_str() );
-                mergedHeader.append(1, '\n');
+                stringstream headerLineSs(headerLine);
+                string part, readGroupPart, readGroup;
+                while(std::getline(headerLineSs, part, '\t')) {
+                    stringstream partSs(part);
+                    string subtag;
+                    std::getline(partSs, subtag, ':');
+                    if (subtag == "ID") {
+                        std::getline(partSs, readGroup, ':');
+                        break;
+                    }
+                }
+                if (readGroups.find(readGroup) == readGroups.end()) { // prevents duplicate @RG entries
+                    mergedHeader.append(headerLine.c_str() );
+                    mergedHeader.append(1, '\n');
+                    readGroups[readGroup] = true;
+                }
             }
 
         }