File indexing completed on 2026-09-17 09:31:02
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TTreeCloner
0013 #define ROOT_TTreeCloner
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #include "TObjArray.h"
0024
0025 class TBranch;
0026 class TTree;
0027 class TFile;
0028 class TFileCacheRead;
0029 class TDirectory;
0030
0031 class TTreeCloner {
0032 TString fWarningMsg;
0033
0034 bool fIsValid;
0035 bool fNeedConversion;
0036 UInt_t fOptions;
0037 TTree *fFromTree;
0038 TTree *fToTree;
0039 TDirectory*fToDirectory;
0040 TFile *fToFile;
0041 Option_t *fMethod;
0042 TObjArray fFromBranches;
0043 TObjArray fToBranches;
0044
0045 UInt_t fMaxBaskets;
0046 UInt_t *fBasketBranchNum;
0047 UInt_t *fBasketNum;
0048
0049 Long64_t *fBasketSeek;
0050 Long64_t *fBasketEntry;
0051 UInt_t *fBasketIndex;
0052
0053 UShort_t fPidOffset;
0054
0055 UInt_t fCloneMethod;
0056 Long64_t fToStartEntries;
0057
0058 Long64_t fCacheSize;
0059 TFileCacheRead *fFileCache;
0060 TFileCacheRead *fPrevCache;
0061
0062 enum ECloneMethod {
0063
0064 #if defined(__clang__) && __clang_major__ < 20
0065 #pragma clang diagnostic push
0066 #pragma clang diagnostic ignored "-Wshadow"
0067 #endif
0068 kDefault = 0,
0069 #if defined(__clang__) && __clang_major__ < 20
0070 #pragma clang diagnostic pop
0071 #endif
0072 kSortBasketsByBranch = 1,
0073 kSortBasketsByOffset = 2,
0074 kSortBasketsByEntry = 3
0075 };
0076
0077 class CompareSeek {
0078 TTreeCloner *fObject;
0079 public:
0080 CompareSeek(TTreeCloner *obj) : fObject(obj) {}
0081 bool operator()(UInt_t i1, UInt_t i2);
0082 };
0083
0084 class CompareEntry {
0085 TTreeCloner *fObject;
0086 public:
0087 CompareEntry(TTreeCloner *obj) : fObject(obj) {}
0088 bool operator()(UInt_t i1, UInt_t i2);
0089 };
0090
0091 friend class CompareSeek;
0092 friend class CompareEntry;
0093
0094 void ImportClusterRanges();
0095 void CreateCache();
0096 UInt_t FillCache(UInt_t from);
0097 void RestoreCache();
0098
0099 public:
0100 enum EClonerOptions {
0101
0102 #if defined(__clang__) && __clang_major__ < 20
0103 #pragma clang diagnostic push
0104 #pragma clang diagnostic ignored "-Wshadow"
0105 #endif
0106 kNone = 0,
0107 #if defined(__clang__) && __clang_major__ < 20
0108 #pragma clang diagnostic pop
0109 #endif
0110 kNoWarnings = BIT(1),
0111 kIgnoreMissingTopLevel = BIT(2),
0112 kNoFileCache = BIT(3)
0113 };
0114
0115 private:
0116 TTreeCloner(const TTreeCloner&) = delete;
0117 TTreeCloner &operator=(const TTreeCloner&) = delete;
0118
0119 TTreeCloner(TTree *from, TTree *to, TDirectory *newdirectory, Option_t *method, UInt_t options = kNone);
0120
0121 public:
0122
0123 TTreeCloner(TTree *from, TTree *to, Option_t *method, UInt_t options = kNone);
0124 TTreeCloner(TTree *from, TDirectory *newdirectory, Option_t *method, UInt_t options = kNone);
0125 virtual ~TTreeCloner();
0126
0127 void CloseOutWriteBaskets();
0128 UInt_t CollectBranches(TBranch *from, TBranch *to);
0129 UInt_t CollectBranches(TObjArray *from, TObjArray *to);
0130 UInt_t CollectBranches();
0131 void CollectBaskets();
0132 void CopyMemoryBaskets();
0133 void CopyStreamerInfos();
0134 void CopyProcessIds();
0135 const char *GetWarning() const { return fWarningMsg; }
0136 bool IsInPlace() const { return fFromTree == fToTree; }
0137 bool Exec();
0138 bool IsValid() { return fIsValid; }
0139 bool NeedConversion() { return fNeedConversion; }
0140 void SetCacheSize(Long64_t size);
0141 void SortBaskets();
0142 void WriteBaskets();
0143
0144 ClassDef(TTreeCloner,0);
0145 };
0146
0147 #endif