diff --git a/io/io/inc/TFileMerger.h b/io/io/inc/TFileMerger.h index 7d8a1ce28da35a32cf985b585f4853d2a78d77ca..93693041c8e853d1be168bfa9ec7617f9739c595 100644 --- a/io/io/inc/TFileMerger.h +++ b/io/io/inc/TFileMerger.h @@ -81,7 +81,8 @@ public: kAllIncremental = kIncremental | kAll, // Merge incrementally all type of objects. kOnlyListed = BIT(4), // Only the objects specified in fObjectNames list - kSkipListed = BIT(5) // Skip objects specified in fObjectNames list + kSkipListed = BIT(5), // Skip objects specified in fObjectNames list + kKeepCompression= BIT(6) // Keep compression level unchanged for each input files }; TFileMerger(Bool_t isLocal = kTRUE, Bool_t histoOneGo = kTRUE); virtual ~TFileMerger(); diff --git a/io/io/src/TFileMerger.cxx b/io/io/src/TFileMerger.cxx index ee02b48f2a453adfd346dd76295e20243e7d5ded..2d2340f8cc5211d4781d7dfc96515d0200a81afc 100644 --- a/io/io/src/TFileMerger.cxx +++ b/io/io/src/TFileMerger.cxx @@ -353,6 +353,7 @@ Bool_t TFileMerger::MergeRecursive(TDirectory *target, TList *sourcelist, Int_t // kNonResetable : merge only the objects without a MergeAfterReset member function. // kOnlyListed : merge only objects listed in fObjectNames // kSkipListed : skip merging of objects listed in fObjectNames + // kKeepCompression : Keep compression level of the buffer as it is in each the original input files. Bool_t status = kTRUE; Bool_t onlyListed = kFALSE; if (fPrintLevel > 0) { @@ -380,7 +381,7 @@ Bool_t TFileMerger::MergeRecursive(TDirectory *target, TList *sourcelist, Int_t TFileMergeInfo info(target); - if ((fFastMethod && !fCompressionChange)) { + if (fFastMethod && ((type&kKeepCompression) || !fCompressionChange) ) { info.fOptions.Append(" fast"); }