70 class TVirtualPerfStats;
72 class TTree :
public TNamed,
public TAttLine,
public TAttFill,
public TAttMarker {
74 using TIOFeatures = ROOT::TIOFeatures;
82 Long64_t fFlushedBytes;
87 Int_t fDefaultEntryOffsetLen;
89 Int_t fMaxClusterRange;
91 Long64_t fMaxEntryLoop;
92 Long64_t fMaxVirtualSize;
96 Long64_t *fClusterRangeEnd;
97 Long64_t *fClusterSize;
99 Long64_t fChainOffset;
101 std::atomic<Long64_t> fTotalBuffers;
107 TIOFeatures fIOFeatures{0};
111 TDirectory *fDirectory;
115 TEventList *fEventList;
116 TEntryList *fEntryList;
117 TArrayD fIndexValues;
119 TVirtualIndex *fTreeIndex;
121 TVirtualPerfStats *fPerfStats;
123 TVirtualTreePlayer *fPlayer;
125 TBranchRef *fBranchRef;
126 UInt_t fFriendLockStatus;
127 TBuffer *fTransientBuffer;
128 Bool_t fCacheDoAutoInit;
129 Bool_t fCacheDoClusterPrefetch;
130 Bool_t fCacheUserSet;
132 UInt_t fNEntriesSinceSorting;
133 std::vector<std::pair<Long64_t,TBranch*>> fSortedBranches;
134 std::vector<TBranch*> fSeqBranches;
135 Float_t fTargetMemoryRatio{1.1f};
138 #ifdef R__TRACK_BASKET_ALLOC_TIME
139 mutable std::atomic<ULong64_t> fAllocationTime{0};
141 mutable std::atomic<UInt_t> fAllocationCount{0};
143 static Int_t fgBranchStyle;
144 static Long64_t fgMaxTreeSize;
148 mutable Bool_t fIMTFlush{
false};
149 mutable std::atomic<Long64_t> fIMTTotBytes;
150 mutable std::atomic<Long64_t> fIMTZipBytes;
152 void InitializeBranchLists(
bool checkLeafCount);
153 void SortBranchesByTime();
154 Int_t FlushBasketsImpl()
const;
155 void MarkEventCluster();
158 virtual void KeepCircular();
159 virtual TBranch *BranchImp(
const char* branchname,
const char* classname, TClass* ptrClass,
void* addobj, Int_t bufsize, Int_t splitlevel);
160 virtual TBranch *BranchImp(
const char* branchname, TClass* ptrClass,
void* addobj, Int_t bufsize, Int_t splitlevel);
161 virtual TBranch *BranchImpRef(
const char* branchname,
const char* classname, TClass* ptrClass,
void* addobj, Int_t bufsize, Int_t splitlevel);
162 virtual TBranch *BranchImpRef(
const char* branchname, TClass* ptrClass, EDataType datatype,
void* addobj, Int_t bufsize, Int_t splitlevel);
163 virtual TBranch *BranchImpArr(
const char* branchname, EDataType datatype, std::size_t N,
void* addobj, Int_t bufsize, Int_t splitlevel);
164 virtual Int_t CheckBranchAddressType(TBranch* branch, TClass* ptrClass, EDataType datatype, Bool_t ptr);
165 virtual TBranch *BronchExec(
const char* name,
const char* classname,
void* addobj, Bool_t isptrptr, Int_t bufsize, Int_t splitlevel);
166 friend TBranch *TTreeBranchImpRef(TTree *tree,
const char* branchname, TClass* ptrClass, EDataType datatype,
void* addobj, Int_t bufsize, Int_t splitlevel);
167 Int_t SetBranchAddressImp(TBranch *branch,
void* addr, TBranch** ptr);
168 virtual TLeaf *GetLeafImpl(
const char* branchname,
const char* leafname);
170 Long64_t GetCacheAutoSize(Bool_t withDefault = kFALSE)
const;
171 char GetNewlineValue(std::istream &inputStream);
172 void ImportClusterRanges(TTree *fromtree);
173 void MoveReadCache(TFile *src, TDirectory *dir);
174 Int_t SetCacheSizeAux(Bool_t autocache = kTRUE, Long64_t cacheSize = 0);
184 TFriendLock(
const TFriendLock&);
185 TFriendLock& operator=(
const TFriendLock&);
188 TFriendLock(TTree* tree, UInt_t methodbit);
191 friend class TFriendLock;
193 friend class TTreeIndex;
194 friend class TChainIndex;
196 friend class TTreeCloner;
199 enum ELockStatusBits {
200 kFindBranch = BIT(0),
205 kGetEntryWithIndex = BIT(5),
207 kGetFriendAlias = BIT(7),
211 kRemoveFriend = BIT(11),
212 kSetBranchStatus = BIT(12)
217 static constexpr Long64_t kMaxEntries = TVirtualTreePlayer::kMaxEntries;
220 enum ESetBranchAddressStatus {
223 kMissingCompiledCollectionProxy = -3,
227 kMatchConversion = 1,
228 kMatchConversionCollection = 2,
236 kForceRead = BIT(11),
241 kOnlyFlushAtCluster = BIT(14),
246 kEntriesReshuffled = BIT(19)
251 kSplitCollectionOfPointers = 100
254 class TClusterIterator
259 Long64_t fStartEntry;
261 Long64_t fEstimatedSize;
263 Long64_t GetEstimatedClusterSize();
267 TClusterIterator(TTree *tree, Long64_t firstEntry);
287 Long64_t GetStartEntry() {
292 Long64_t GetNextEntry() {
296 Long64_t operator()() {
return Next(); }
300 TTree(
const char* name,
const char* title, Int_t splitlevel = 99, TDirectory* dir = gDirectory);
303 TTree(
const TTree& tt) =
delete;
304 TTree& operator=(
const TTree& tt) =
delete;
306 virtual Int_t AddBranchToCache(
const char *bname, Bool_t subbranches = kFALSE);
307 virtual Int_t AddBranchToCache(TBranch *branch, Bool_t subbranches = kFALSE);
308 virtual Int_t DropBranchFromCache(
const char *bname, Bool_t subbranches = kFALSE);
309 virtual Int_t DropBranchFromCache(TBranch *branch, Bool_t subbranches = kFALSE);
310 void AddClone(TTree*);
311 virtual TFriendElement *AddFriend(
const char* treename,
const char* filename =
"");
312 virtual TFriendElement *AddFriend(
const char* treename, TFile* file);
313 virtual TFriendElement *AddFriend(TTree* tree,
const char* alias =
"", Bool_t warn = kFALSE);
316 virtual void AddTotBytes(Int_t tot) {
if (fIMTFlush) { fIMTTotBytes += tot; }
else { fTotBytes += tot; } }
317 virtual void AddZipBytes(Int_t zip) {
if (fIMTFlush) { fIMTZipBytes += zip; }
else { fZipBytes += zip; } }
319 #ifdef R__TRACK_BASKET_ALLOC_TIME
320 void AddAllocationTime(ULong64_t time) { fAllocationTime += time; }
322 void AddAllocationCount(UInt_t count) { fAllocationCount += count; }
323 virtual Long64_t AutoSave(Option_t* option =
"");
338 template <
class T> TBranch *Branch(
const char* name, T* obj, Int_t bufsize = 32000, Int_t splitlevel = 99)
340 return BranchImpRef(name, TClass::GetClass<T>(), TDataType::GetType(
typeid(T)), obj, bufsize, splitlevel);
355 template <
class T> TBranch *Branch(
const char* name, T** addobj, Int_t bufsize = 32000, Int_t splitlevel = 99)
357 return BranchImp(name, TClass::GetClass<T>(), addobj, bufsize, splitlevel);
360 virtual Int_t Branch(TCollection* list, Int_t bufsize = 32000, Int_t splitlevel = 99,
const char* name =
"");
361 virtual Int_t Branch(TList* list, Int_t bufsize = 32000, Int_t splitlevel = 99);
362 virtual Int_t Branch(
const char* folder, Int_t bufsize = 32000, Int_t splitlevel = 99);
363 virtual TBranch *Branch(
const char* name,
void* address,
const char* leaflist, Int_t bufsize = 32000);
364 TBranch *Branch(
const char* name,
char* address,
const char* leaflist, Int_t bufsize = 32000)
367 return Branch(name,(
void*)address,leaflist,bufsize);
369 TBranch *Branch(
const char* name, Long_t address,
const char* leaflist, Int_t bufsize = 32000)
372 return Branch(name,(
void*)address,leaflist,bufsize);
374 TBranch *Branch(
const char* name,
int address,
const char* leaflist, Int_t bufsize = 32000)
377 return Branch(name,(
void*)(Long_t)address,leaflist,bufsize);
379 virtual TBranch *Branch(
const char* name,
const char* classname,
void* addobj, Int_t bufsize = 32000, Int_t splitlevel = 99);
380 template <
class T> TBranch *Branch(
const char* name,
const char* classname, T* obj, Int_t bufsize = 32000, Int_t splitlevel = 99)
383 return BranchImpRef(name, classname, TClass::GetClass<T>(), obj, bufsize, splitlevel);
385 template <
class T> TBranch *Branch(
const char* name,
const char* classname, T** addobj, Int_t bufsize = 32000, Int_t splitlevel = 99)
388 return BranchImp(name, classname, TClass::GetClass<T>(), addobj, bufsize, splitlevel);
390 template <
typename T, std::
size_t N> TBranch *Branch(
const char* name, std::array<T, N> *obj, Int_t bufsize = 32000, Int_t splitlevel = 99)
392 TClass *cl = TClass::GetClass<T>();
394 TClass *arrCl = TClass::GetClass<std::array<T, N>>();
395 Error(
"Branch",
"std::array of objects not yet supported as top level branch object (the class is %s)",
396 arrCl ? arrCl->GetName() : cl->GetName());
399 return BranchImpArr(name, TDataType::GetType(
typeid(T)), N, obj, bufsize, splitlevel);
401 virtual TBranch *Bronch(
const char* name,
const char* classname,
void* addobj, Int_t bufsize = 32000, Int_t splitlevel = 99);
402 virtual TBranch *BranchOld(
const char* name,
const char* classname,
void* addobj, Int_t bufsize = 32000, Int_t splitlevel = 1);
403 virtual TBranch *BranchRef();
404 virtual void Browse(TBrowser*);
405 virtual Int_t BuildIndex(
const char* majorname,
const char* minorname =
"0");
406 TStreamerInfo *BuildStreamerInfo(TClass* cl,
void* pointer = 0, Bool_t canOptimize = kTRUE);
407 virtual TFile *ChangeFile(TFile* file);
408 virtual TTree *CloneTree(Long64_t nentries = -1, Option_t* option =
"");
409 virtual void CopyAddresses(TTree*,Bool_t undo = kFALSE);
410 virtual Long64_t CopyEntries(TTree* tree, Long64_t nentries = -1, Option_t *option =
"");
411 virtual TTree *CopyTree(
const char* selection, Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
412 virtual TBasket *CreateBasket(TBranch*);
413 virtual void DirectoryAutoAdd(TDirectory *);
414 Int_t Debug()
const {
return fDebug; }
415 virtual void Delete(Option_t* option =
"");
416 virtual void Draw(Option_t* opt) { Draw(opt,
"",
"", kMaxEntries, 0); }
417 virtual Long64_t Draw(
const char* varexp,
const TCut& selection, Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
418 virtual Long64_t Draw(
const char* varexp,
const char* selection, Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
419 virtual void DropBaskets();
420 virtual void DropBuffers(Int_t nbytes);
421 virtual Int_t Fill();
422 virtual TBranch *FindBranch(
const char* name);
423 virtual TLeaf *FindLeaf(
const char* name);
424 virtual Int_t Fit(
const char* funcname,
const char* varexp,
const char* selection =
"", Option_t* option =
"", Option_t* goption =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
425 virtual Int_t FlushBaskets(Bool_t create_cluster =
true)
const;
426 virtual const char *GetAlias(
const char* aliasName)
const;
427 UInt_t GetAllocationCount()
const {
return fAllocationCount; }
428 #ifdef R__TRACK_BASKET_ALLOC_TIME
429 ULong64_t GetAllocationTime()
const {
return fAllocationTime; }
431 virtual Long64_t GetAutoFlush()
const {
return fAutoFlush;}
432 virtual Long64_t GetAutoSave()
const {
return fAutoSave;}
433 virtual TBranch *GetBranch(
const char* name);
434 virtual TBranchRef *GetBranchRef()
const {
return fBranchRef; };
435 virtual Bool_t GetBranchStatus(
const char* branchname)
const;
436 static Int_t GetBranchStyle();
437 virtual Long64_t GetCacheSize()
const {
return fCacheSize; }
438 virtual TClusterIterator GetClusterIterator(Long64_t firstentry);
439 virtual Long64_t GetChainEntryNumber(Long64_t entry)
const {
return entry; }
440 virtual Long64_t GetChainOffset()
const {
return fChainOffset; }
441 virtual Bool_t GetClusterPrefetch()
const {
return fCacheDoClusterPrefetch; }
442 TFile *GetCurrentFile()
const;
443 Int_t GetDefaultEntryOffsetLen()
const {
return fDefaultEntryOffsetLen;}
444 Long64_t GetDebugMax()
const {
return fDebugMax; }
445 Long64_t GetDebugMin()
const {
return fDebugMin; }
446 TDirectory *GetDirectory()
const {
return fDirectory; }
447 virtual Long64_t GetEntries()
const {
return fEntries; }
448 virtual Long64_t GetEntries(
const char *selection);
449 virtual Long64_t GetEntriesFast()
const {
return fEntries; }
450 virtual Long64_t GetEntriesFriend()
const;
451 virtual Long64_t GetEstimate()
const {
return fEstimate; }
452 virtual Int_t GetEntry(Long64_t entry = 0, Int_t getall = 0);
453 Int_t GetEvent(Long64_t entry = 0, Int_t getall = 0) {
return GetEntry(entry, getall); }
454 virtual Int_t GetEntryWithIndex(Int_t major, Int_t minor = 0);
455 virtual Long64_t GetEntryNumberWithBestIndex(Long64_t major, Long64_t minor = 0)
const;
456 virtual Long64_t GetEntryNumberWithIndex(Long64_t major, Long64_t minor = 0)
const;
457 TEventList *GetEventList()
const {
return fEventList; }
458 virtual TEntryList *GetEntryList();
459 virtual Long64_t GetEntryNumber(Long64_t entry)
const;
460 virtual Int_t GetFileNumber()
const {
return fFileNumber; }
461 virtual TTree *GetFriend(
const char*)
const;
462 virtual const char *GetFriendAlias(TTree*)
const;
463 TH1 *GetHistogram() {
return GetPlayer()->GetHistogram(); }
464 virtual Bool_t GetImplicitMT() {
return fIMTEnabled; }
465 virtual Int_t *GetIndex() {
return &fIndex.fArray[0]; }
466 virtual Double_t *GetIndexValues() {
return &fIndexValues.fArray[0]; }
467 ROOT::TIOFeatures GetIOFeatures()
const;
468 virtual TIterator *GetIteratorOnAllLeaves(Bool_t dir = kIterForward);
469 virtual TLeaf *GetLeaf(
const char* branchname,
const char* leafname);
470 virtual TLeaf *GetLeaf(
const char* name);
471 virtual TList *GetListOfClones() {
return fClones; }
472 virtual TObjArray *GetListOfBranches() {
return &fBranches; }
473 virtual TObjArray *GetListOfLeaves() {
return &fLeaves; }
474 virtual TList *GetListOfFriends()
const {
return fFriends; }
475 virtual TList *GetListOfAliases()
const {
return fAliases; }
479 Int_t GetMakeClass()
const {
return fMakeClass; }
481 virtual Long64_t GetMaxEntryLoop()
const {
return fMaxEntryLoop; }
482 virtual Double_t GetMaximum(
const char* columname);
483 static Long64_t GetMaxTreeSize();
484 virtual Long64_t GetMaxVirtualSize()
const {
return fMaxVirtualSize; }
485 virtual Double_t GetMinimum(
const char* columname);
486 virtual Int_t GetNbranches() {
return fBranches.GetEntriesFast(); }
487 TObject *GetNotify()
const {
return fNotify; }
488 TVirtualTreePlayer *GetPlayer();
489 virtual Int_t GetPacketSize()
const {
return fPacketSize; }
490 virtual TVirtualPerfStats *GetPerfStats()
const {
return fPerfStats; }
491 TTreeCache *GetReadCache(TFile *file)
const;
492 TTreeCache *GetReadCache(TFile *file, Bool_t create);
493 virtual Long64_t GetReadEntry()
const {
return fReadEntry; }
494 virtual Long64_t GetReadEvent()
const {
return fReadEntry; }
495 virtual Int_t GetScanField()
const {
return fScanField; }
496 TTreeFormula *GetSelect() {
return GetPlayer()->GetSelect(); }
497 virtual Long64_t GetSelectedRows() {
return GetPlayer()->GetSelectedRows(); }
498 virtual Int_t GetTimerInterval()
const {
return fTimerInterval; }
499 TBuffer* GetTransientBuffer(Int_t size);
500 virtual Long64_t GetTotBytes()
const {
return fTotBytes; }
501 virtual TTree *GetTree()
const {
return const_cast<TTree*
>(
this); }
502 virtual TVirtualIndex *GetTreeIndex()
const {
return fTreeIndex; }
503 virtual Int_t GetTreeNumber()
const {
return 0; }
504 Float_t GetTargetMemoryRatio()
const {
return fTargetMemoryRatio; }
505 virtual Int_t GetUpdate()
const {
return fUpdate; }
506 virtual TList *GetUserInfo();
508 TTreeFormula *GetVar(Int_t i) {
return GetPlayer()->GetVar(i); }
510 TTreeFormula *GetVar1() {
return GetPlayer()->GetVar1(); }
512 TTreeFormula *GetVar2() {
return GetPlayer()->GetVar2(); }
514 TTreeFormula *GetVar3() {
return GetPlayer()->GetVar3(); }
516 TTreeFormula *GetVar4() {
return GetPlayer()->GetVar4(); }
518 virtual Double_t *GetVal(Int_t i) {
return GetPlayer()->GetVal(i); }
520 virtual Double_t *GetV1() {
return GetPlayer()->GetV1(); }
522 virtual Double_t *GetV2() {
return GetPlayer()->GetV2(); }
524 virtual Double_t *GetV3() {
return GetPlayer()->GetV3(); }
526 virtual Double_t *GetV4() {
return GetPlayer()->GetV4(); }
527 virtual Double_t *GetW() {
return GetPlayer()->GetW(); }
528 virtual Double_t GetWeight()
const {
return fWeight; }
529 virtual Long64_t GetZipBytes()
const {
return fZipBytes; }
530 virtual void IncrementTotalBuffers(Int_t nbytes) { fTotalBuffers += nbytes; }
531 Bool_t IsFolder()
const {
return kTRUE; }
532 virtual Int_t LoadBaskets(Long64_t maxmemory = 2000000000);
533 virtual Long64_t LoadTree(Long64_t entry);
534 virtual Long64_t LoadTreeFriend(Long64_t entry, TTree* T);
535 virtual Int_t MakeClass(
const char* classname = 0, Option_t* option =
"");
536 virtual Int_t MakeCode(
const char* filename = 0);
537 virtual Int_t MakeProxy(
const char* classname,
const char* macrofilename = 0,
const char* cutfilename = 0,
const char* option = 0, Int_t maxUnrolling = 3);
538 virtual Int_t MakeSelector(
const char* selector = 0, Option_t* option =
"");
539 Bool_t MemoryFull(Int_t nbytes);
540 virtual Long64_t Merge(TCollection* list, Option_t* option =
"");
541 virtual Long64_t Merge(TCollection* list, TFileMergeInfo *info);
542 static TTree *MergeTrees(TList* list, Option_t* option =
"");
543 virtual Bool_t Notify();
544 virtual void OptimizeBaskets(ULong64_t maxMemory=10000000, Float_t minComp=1.1, Option_t *option=
"");
545 TPrincipal *Principal(
const char* varexp =
"",
const char* selection =
"", Option_t* option =
"np", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
546 virtual void Print(Option_t* option =
"")
const;
547 virtual void PrintCacheStats(Option_t* option =
"")
const;
548 virtual Long64_t Process(
const char* filename, Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
549 virtual Long64_t Process(TSelector* selector, Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
550 virtual Long64_t Project(
const char* hname,
const char* varexp,
const char* selection =
"", Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
551 virtual TSQLResult *Query(
const char* varexp =
"",
const char* selection =
"", Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
552 virtual Long64_t ReadFile(
const char* filename,
const char* branchDescriptor =
"",
char delimiter =
' ');
553 virtual Long64_t ReadStream(std::istream& inputStream,
const char* branchDescriptor =
"",
char delimiter =
' ');
554 virtual void Refresh();
555 virtual void RecursiveRemove(TObject *obj);
556 virtual void RemoveFriend(TTree*);
557 virtual void Reset(Option_t* option =
"");
558 virtual void ResetAfterMerge(TFileMergeInfo *);
559 virtual void ResetBranchAddress(TBranch *);
560 virtual void ResetBranchAddresses();
561 virtual Long64_t Scan(
const char* varexp =
"",
const char* selection =
"", Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
562 virtual Bool_t SetAlias(
const char* aliasName,
const char* aliasFormula);
563 virtual void SetAutoSave(Long64_t autos = -300000000);
564 virtual void SetAutoFlush(Long64_t autof = -30000000);
565 virtual void SetBasketSize(
const char* bname, Int_t buffsize = 16000);
566 virtual Int_t SetBranchAddress(
const char *bname,
void *add, TBranch **ptr = 0);
567 virtual Int_t SetBranchAddress(
const char *bname,
void *add, TClass *realClass, EDataType datatype, Bool_t isptr);
568 virtual Int_t SetBranchAddress(
const char *bname,
void *add, TBranch **ptr, TClass *realClass, EDataType datatype, Bool_t isptr);
569 template <
class T> Int_t SetBranchAddress(
const char *bname, T **add, TBranch **ptr = 0) {
570 TClass *cl = TClass::GetClass<T>();
571 EDataType type = kOther_t;
572 if (cl==0) type = TDataType::GetType(
typeid(T));
573 return SetBranchAddress(bname,add,ptr,cl,type,
true);
575 #ifndef R__NO_CLASS_TEMPLATE_SPECIALIZATION
578 template <
class T> Int_t SetBranchAddress(
const char *bname, T *add, TBranch **ptr = 0) {
579 TClass *cl = TClass::GetClass<T>();
580 EDataType type = kOther_t;
581 if (cl==0) type = TDataType::GetType(
typeid(T));
582 return SetBranchAddress(bname,add,ptr,cl,type,
false);
585 virtual void SetBranchStatus(
const char* bname, Bool_t status = 1, UInt_t* found = 0);
586 static void SetBranchStyle(Int_t style = 1);
587 virtual Int_t SetCacheSize(Long64_t cachesize = -1);
588 virtual Int_t SetCacheEntryRange(Long64_t first, Long64_t last);
589 virtual void SetCacheLearnEntries(Int_t n=10);
590 virtual void SetChainOffset(Long64_t offset = 0) { fChainOffset=offset; }
591 virtual void SetCircular(Long64_t maxEntries);
592 virtual void SetClusterPrefetch(Bool_t enabled) { fCacheDoClusterPrefetch = enabled; }
593 virtual void SetDebug(Int_t level = 1, Long64_t min = 0, Long64_t max = 9999999);
594 virtual void SetDefaultEntryOffsetLen(Int_t newdefault, Bool_t updateExisting = kFALSE);
595 virtual void SetDirectory(TDirectory* dir);
596 virtual Long64_t SetEntries(Long64_t n = -1);
597 virtual void SetEstimate(Long64_t nentries = 1000000);
598 ROOT::TIOFeatures SetIOFeatures(
const ROOT::TIOFeatures &);
599 virtual void SetFileNumber(Int_t number = 0);
600 virtual void SetEventList(TEventList* list);
601 virtual void SetEntryList(TEntryList* list, Option_t *opt=
"");
602 virtual void SetImplicitMT(Bool_t enabled) { fIMTEnabled = enabled; }
603 virtual void SetMakeClass(Int_t make);
604 virtual void SetMaxEntryLoop(Long64_t maxev = kMaxEntries) { fMaxEntryLoop = maxev; }
605 static void SetMaxTreeSize(Long64_t maxsize = 100000000000LL);
606 virtual void SetMaxVirtualSize(Long64_t size = 0) { fMaxVirtualSize = size; }
607 virtual void SetName(
const char* name);
619 virtual void SetNotify(TObject* obj) { fNotify = obj; }
621 virtual void SetObject(
const char* name,
const char* title);
622 virtual void SetParallelUnzip(Bool_t opt=kTRUE, Float_t RelSize=-1);
623 virtual void SetPerfStats(TVirtualPerfStats* perf);
624 virtual void SetScanField(Int_t n = 50) { fScanField = n; }
625 void SetTargetMemoryRatio(Float_t ratio) { fTargetMemoryRatio = ratio; }
626 virtual void SetTimerInterval(Int_t msec = 333) { fTimerInterval=msec; }
627 virtual void SetTreeIndex(TVirtualIndex* index);
628 virtual void SetWeight(Double_t w = 1, Option_t* option =
"");
629 virtual void SetUpdate(Int_t freq = 0) { fUpdate = freq; }
630 virtual void Show(Long64_t entry = -1, Int_t lenmax = 20);
631 virtual void StartViewer();
632 virtual Int_t StopCacheLearningPhase();
633 virtual Int_t UnbinnedFit(
const char* funcname,
const char* varexp,
const char* selection =
"", Option_t* option =
"", Long64_t nentries = kMaxEntries, Long64_t firstentry = 0);
634 void UseCurrentStyle();
635 virtual Int_t Write(
const char *name=0, Int_t option=0, Int_t bufsize=0);
636 virtual Int_t Write(
const char *name=0, Int_t option=0, Int_t bufsize=0)
const;
649 class TTreeFriendLeafIter :
public TIterator {
653 TIterator *fLeafIter;
654 TIterator *fTreeIter;
657 TTreeFriendLeafIter() : fTree(0), fLeafIter(0), fTreeIter(0),
661 TTreeFriendLeafIter(
const TTree* t, Bool_t dir = kIterForward);
662 TTreeFriendLeafIter(
const TTreeFriendLeafIter &iter);
663 ~TTreeFriendLeafIter() { SafeDelete(fLeafIter); SafeDelete(fTreeIter); }
664 TIterator &operator=(
const TIterator &rhs);
665 TTreeFriendLeafIter &operator=(
const TTreeFriendLeafIter &rhs);
667 const TCollection *GetCollection()
const {
return 0; }
668 Option_t *GetOption()
const;
670 void Reset() { SafeDelete(fLeafIter); SafeDelete(fTreeIter); }
671 Bool_t operator !=(
const TIterator&)
const {
675 Bool_t operator !=(
const TTreeFriendLeafIter&)
const {
679 TObject *operator*()
const {
683 ClassDef(TTreeFriendLeafIter,0)