Logo ROOT  
Reference Guide
TFileMerger.h
Go to the documentation of this file.
1// @(#)root/io:$Id$
2// Author: Andreas Peters + Fons Rademakers 26/5/2005
3
4/*************************************************************************
5 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TFileMerger
13#define ROOT_TFileMerger
14
15#include "TList.h"
16#include "TObject.h"
17#include "TString.h"
18#include "TStopwatch.h"
19
20#include <memory>
21
22class TList;
23class TFile;
24class TDirectory;
25class THashList;
26class TKey;
27
28namespace ROOT {
29class TIOFeatures;
30} // namespace ROOT
31
32class TFileMerger : public TObject {
33private:
35
36 TFileMerger(const TFileMerger&) = delete;
38
39protected:
40 TStopwatch fWatch; ///< Stop watch to measure file copy speed
41 TList fFileList; ///< A list the file (TFile*) which shall be merged
42 TFile *fOutputFile{nullptr}; ///< The outputfile for merging
43 TString fOutputFilename; ///< The name of the outputfile for merging
44 Bool_t fFastMethod{kTRUE}; ///< True if using Fast merging algorithm (default)
45 Bool_t fNoTrees{kFALSE}; ///< True if Trees should not be merged (default is kFALSE)
46 Bool_t fExplicitCompLevel{kFALSE}; ///< True if the user explicitly requested a compressio level change (default kFALSE)
47 Bool_t fCompressionChange{kFALSE}; ///< True if the output and input have different compression level (default kFALSE)
48 Int_t fPrintLevel{0}; ///< How much information to print out at run time
49 TString fMergeOptions; ///< Options (in string format) to be passed down to the Merge functions
50 TIOFeatures *fIOFeatures{nullptr}; ///< IO features to use in the output file.
51 TString fMsgPrefix{"TFileMerger"}; ///< Prefix to be used when printing informational message (default TFileMerger)
52
53 Int_t fMaxOpenedFiles; ///< Maximum number of files opened at the same time by the TFileMerger
54 Bool_t fLocal; ///< Makes local copies of merging files if True (default is kTRUE)
55 Bool_t fHistoOneGo; ///< Merger histos in one go (default is kTRUE)
56 TString fObjectNames; ///< List of object names to be either merged exclusively or skipped
57 TList fMergeList; ///< list of TObjString containing the name of the files need to be merged
58 TList fExcessFiles; ///<! List of TObjString containing the name of the files not yet added to fFileList due to user or system limitiation on the max number of files opened.
59
61 virtual Bool_t AddFile(TFile *source, Bool_t own, Bool_t cpProgress);
62 virtual Bool_t MergeRecursive(TDirectory *target, TList *sourcelist, Int_t type = kRegular | kAll);
63
64 virtual Bool_t MergeOne(TDirectory *target, TList *sourcelist, Int_t type,
65 TFileMergeInfo &info, TString &oldkeyname, THashList &allNames, Bool_t &status, Bool_t &onlyListed,
66 const TString &path,
67 TDirectory *current_sourcedir, TFile *current_file,
68 TKey *key, TObject *obj, TIter &nextkey);
69public:
70 /// Type of the partial merge
72 kRegular = 0, ///< Normal merge, overwritting the output file.
73 kIncremental = BIT(1), ///< Merge the input file with the content of the output file (if already exising).
74 kResetable = BIT(2), ///< Only the objects with a MergeAfterReset member function.
75 kNonResetable = BIT(3), ///< Only the objects without a MergeAfterReset member function.
76 kDelayWrite = BIT(4), ///< Delay the TFile write (to reduce the number of write when reusing the file)
77
78 kAll = BIT(2)|BIT(3), ///< Merge all type of objects (default)
79 kAllIncremental = kIncremental | kAll, ///< Merge incrementally all type of objects.
80
81 kOnlyListed = BIT(5), ///< Only the objects specified in fObjectNames list
82 kSkipListed = BIT(6), ///< Skip objects specified in fObjectNames list
83 kKeepCompression= BIT(7) ///< Keep compression level unchanged for each input files
84 };
85
86 TFileMerger(Bool_t isLocal = kTRUE, Bool_t histoOneGo = kTRUE);
87 virtual ~TFileMerger();
88
89 Int_t GetPrintLevel() const { return fPrintLevel; }
90 void SetPrintLevel(Int_t level) { fPrintLevel = level; }
92 const char *GetOutputFileName() const { return fOutputFilename; }
94 TFile *GetOutputFile() const { return fOutputFile; }
96 void SetMaxOpenedFiles(Int_t newmax);
97 const char *GetMsgPrefix() const { return fMsgPrefix; }
98 void SetMsgPrefix(const char *prefix);
99 const char *GetMergeOptions() { return fMergeOptions; }
100 void SetMergeOptions(const TString &options) { fMergeOptions = options; }
101 void SetMergeOptions(const std::string_view &options) { fMergeOptions = options; }
102 void SetIOFeatures(ROOT::TIOFeatures &features) { fIOFeatures = &features; }
103 void AddObjectNames(const char *name) {fObjectNames += name; fObjectNames += " ";}
104 const char *GetObjectNames() const {return fObjectNames.Data();}
106
107 //--- file management interface
108 virtual Bool_t SetCWD(const char * /*path*/) { MayNotUse("SetCWD"); return kFALSE; }
109 virtual const char *GetCWD() { MayNotUse("GetCWD"); return 0; }
110
111 //--- file merging interface
112 virtual void Reset();
113 virtual Bool_t AddFile(const char *url, Bool_t cpProgress = kTRUE);
114 virtual Bool_t AddFile(TFile *source, Bool_t cpProgress = kTRUE);
115 virtual Bool_t AddAdoptFile(TFile *source, Bool_t cpProgress = kTRUE);
116 virtual Bool_t OutputFile(const char *url, Bool_t force);
117 virtual Bool_t OutputFile(const char *url, Bool_t force, Int_t compressionLevel);
118 virtual Bool_t OutputFile(const char *url, const char *mode = "RECREATE");
119 virtual Bool_t OutputFile(const char *url, const char *mode, Int_t compressionLevel);
120 virtual Bool_t OutputFile(std::unique_ptr<TFile> file);
121 virtual void PrintFiles(Option_t *options);
122 virtual Bool_t Merge(Bool_t = kTRUE);
124 virtual void SetFastMethod(Bool_t fast=kTRUE) {fFastMethod = fast;}
125 Bool_t GetNotrees() const { return fNoTrees; }
126 virtual void SetNotrees(Bool_t notrees=kFALSE) {fNoTrees = notrees;}
127 virtual void RecursiveRemove(TObject *obj);
128
129 ClassDef(TFileMerger, 6) // File copying and merging services
130};
131
132#endif
133
int Int_t
Definition: RtypesCore.h:43
const Bool_t kFALSE
Definition: RtypesCore.h:90
bool Bool_t
Definition: RtypesCore.h:61
const Bool_t kTRUE
Definition: RtypesCore.h:89
const char Option_t
Definition: RtypesCore.h:64
#define ClassDef(name, id)
Definition: Rtypes.h:322
#define BIT(n)
Definition: Rtypes.h:83
char name[80]
Definition: TGX11.cxx:109
int type
Definition: TGX11.cxx:120
TIOFeatures provides the end-user with the ability to change the IO behavior of data written via a TT...
Definition: TIOFeatures.hxx:69
Describe directory structure in memory.
Definition: TDirectory.h:40
This class provides file copy and merging services.
Definition: TFileMerger.h:32
virtual void SetFastMethod(Bool_t fast=kTRUE)
Definition: TFileMerger.h:124
TString fObjectNames
List of object names to be either merged exclusively or skipped.
Definition: TFileMerger.h:56
virtual Bool_t OutputFile(const char *url, Bool_t force)
Open merger output file.
TList fMergeList
list of TObjString containing the name of the files need to be merged
Definition: TFileMerger.h:57
Bool_t GetNotrees() const
Definition: TFileMerger.h:125
TFile * GetOutputFile() const
Definition: TFileMerger.h:94
virtual Bool_t AddFile(TFile *source, Bool_t own, Bool_t cpProgress)
Add the TFile to this file merger and give ownership of the TFile to this object (unless kFALSE is re...
virtual void PrintFiles(Option_t *options)
Print list of files being merged.
const char * GetMsgPrefix() const
Definition: TFileMerger.h:97
Bool_t fHistoOneGo
Merger histos in one go (default is kTRUE)
Definition: TFileMerger.h:55
virtual Bool_t MergeRecursive(TDirectory *target, TList *sourcelist, Int_t type=kRegular|kAll)
Merge all objects in a directory.
TList fFileList
A list the file (TFile*) which shall be merged.
Definition: TFileMerger.h:41
virtual Bool_t Merge(Bool_t=kTRUE)
Merge the files.
virtual Bool_t MergeOne(TDirectory *target, TList *sourcelist, Int_t type, TFileMergeInfo &info, TString &oldkeyname, THashList &allNames, Bool_t &status, Bool_t &onlyListed, const TString &path, TDirectory *current_sourcedir, TFile *current_file, TKey *key, TObject *obj, TIter &nextkey)
TList * GetMergeList()
Definition: TFileMerger.h:93
TString fOutputFilename
The name of the outputfile for merging.
Definition: TFileMerger.h:43
const char * GetObjectNames() const
Definition: TFileMerger.h:104
virtual void RecursiveRemove(TObject *obj)
Intercept the case where the output TFile is deleted!
const char * GetOutputFileName() const
Definition: TFileMerger.h:92
TString fMsgPrefix
Prefix to be used when printing informational message (default TFileMerger)
Definition: TFileMerger.h:51
void ClearObjectNames()
Definition: TFileMerger.h:105
TIOFeatures * fIOFeatures
IO features to use in the output file.
Definition: TFileMerger.h:50
TFileMerger(const TFileMerger &)=delete
const char * GetMergeOptions()
Definition: TFileMerger.h:99
void SetMsgPrefix(const char *prefix)
Set the prefix to be used when printing informational message.
Int_t GetPrintLevel() const
Definition: TFileMerger.h:89
Bool_t fNoTrees
True if Trees should not be merged (default is kFALSE)
Definition: TFileMerger.h:45
Bool_t HasCompressionChange() const
Definition: TFileMerger.h:91
void SetPrintLevel(Int_t level)
Definition: TFileMerger.h:90
void AddObjectNames(const char *name)
Definition: TFileMerger.h:103
EPartialMergeType
Type of the partial merge.
Definition: TFileMerger.h:71
@ kAll
Merge all type of objects (default)
Definition: TFileMerger.h:78
@ kIncremental
Merge the input file with the content of the output file (if already exising).
Definition: TFileMerger.h:73
@ kKeepCompression
Keep compression level unchanged for each input files.
Definition: TFileMerger.h:83
@ kSkipListed
Skip objects specified in fObjectNames list.
Definition: TFileMerger.h:82
@ kNonResetable
Only the objects without a MergeAfterReset member function.
Definition: TFileMerger.h:75
@ kResetable
Only the objects with a MergeAfterReset member function.
Definition: TFileMerger.h:74
@ kOnlyListed
Only the objects specified in fObjectNames list.
Definition: TFileMerger.h:81
@ kAllIncremental
Merge incrementally all type of objects.
Definition: TFileMerger.h:79
@ kRegular
Normal merge, overwritting the output file.
Definition: TFileMerger.h:72
@ kDelayWrite
Delay the TFile write (to reduce the number of write when reusing the file)
Definition: TFileMerger.h:76
void SetMergeOptions(const TString &options)
Definition: TFileMerger.h:100
Bool_t fExplicitCompLevel
True if the user explicitly requested a compressio level change (default kFALSE)
Definition: TFileMerger.h:46
Bool_t fCompressionChange
True if the output and input have different compression level (default kFALSE)
Definition: TFileMerger.h:47
virtual ~TFileMerger()
Cleanup.
virtual void SetNotrees(Bool_t notrees=kFALSE)
Definition: TFileMerger.h:126
Int_t fPrintLevel
How much information to print out at run time.
Definition: TFileMerger.h:48
void SetMaxOpenedFiles(Int_t newmax)
Set a limit to the number of files that TFileMerger will open simultaneously.
TString fMergeOptions
Options (in string format) to be passed down to the Merge functions.
Definition: TFileMerger.h:49
Int_t GetMaxOpenedFiles() const
Definition: TFileMerger.h:95
Bool_t OpenExcessFiles()
Open up to fMaxOpenedFiles of the excess files.
void SetIOFeatures(ROOT::TIOFeatures &features)
Definition: TFileMerger.h:102
TList fExcessFiles
! List of TObjString containing the name of the files not yet added to fFileList due to user or syste...
Definition: TFileMerger.h:58
virtual const char * GetCWD()
Definition: TFileMerger.h:109
TStopwatch fWatch
Stop watch to measure file copy speed.
Definition: TFileMerger.h:40
TFile * fOutputFile
The outputfile for merging.
Definition: TFileMerger.h:42
void SetMergeOptions(const std::string_view &options)
Definition: TFileMerger.h:101
virtual Bool_t PartialMerge(Int_t type=kAll|kIncremental)
Merge the files.
Bool_t fLocal
Makes local copies of merging files if True (default is kTRUE)
Definition: TFileMerger.h:54
TFileMerger & operator=(const TFileMerger &)=delete
virtual void Reset()
Reset merger file list.
Int_t fMaxOpenedFiles
Maximum number of files opened at the same time by the TFileMerger.
Definition: TFileMerger.h:53
virtual Bool_t SetCWD(const char *)
Definition: TFileMerger.h:108
virtual Bool_t AddAdoptFile(TFile *source, Bool_t cpProgress=kTRUE)
Add the TFile to this file merger and give ownership of the TFile to this object (unless kFALSE is re...
Bool_t fFastMethod
True if using Fast merging algorithm (default)
Definition: TFileMerger.h:44
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:53
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
Definition: THashList.h:34
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition: TKey.h:28
A doubly linked list.
Definition: TList.h:44
Mother of all ROOT objects.
Definition: TObject.h:37
void MayNotUse(const char *method) const
Use this method to signal that a method (defined in a base class) may not be called in a derived clas...
Definition: TObject.cxx:944
Stopwatch class.
Definition: TStopwatch.h:28
Basic string class.
Definition: TString.h:131
void Clear()
Clear string without changing its capacity.
Definition: TString.cxx:1176
const char * Data() const
Definition: TString.h:364
basic_string_view< char > string_view
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Definition: StringConv.hxx:21
Definition: file.py:1