468 case kchar:
return 0;
473 case kBits:
return 0;
509 fMethodBit(tfl.fMethodBit),
510 fPrevious(tfl.fPrevious)
534 fTree->fFriendLockStatus &= ~(fMethodBit &
kBitMask);
561 entryInRange = firstEntry;
564 entryInRange = firstEntry - pedestal;
572 if (autoflush <= 0) {
575 fStartEntry = pedestal + entryInRange - entryInRange%autoflush;
600 auto autoFlush = fTree->GetAutoFlush();
601 if (autoFlush > 0)
return autoFlush;
602 if (fEstimatedSize > 0)
return fEstimatedSize;
604 Long64_t zipBytes = fTree->GetZipBytes();
606 fEstimatedSize = fTree->GetEntries() - 1;
607 if (fEstimatedSize <= 0)
611 Long64_t cacheSize = fTree->GetCacheSize();
612 if (cacheSize == 0) {
623 if (cacheSize <= 0) {
624 cacheSize = 30000000;
626 clusterEstimate = fTree->GetEntries() * cacheSize / zipBytes;
628 fEstimatedSize = clusterEstimate ? clusterEstimate : 1;
630 return fEstimatedSize;
639 fStartEntry = fNextEntry;
640 if (fTree->fNClusterRange || fTree->GetAutoFlush() > 0) {
641 if (fClusterRange == fTree->fNClusterRange) {
644 fNextEntry += GetEstimatedClusterSize();
646 if (fStartEntry > fTree->fClusterRangeEnd[fClusterRange]) {
649 if (fClusterRange == fTree->fNClusterRange) {
652 fNextEntry += GetEstimatedClusterSize();
654 Long64_t clusterSize = fTree->fClusterSize[fClusterRange];
655 if (clusterSize == 0) {
656 clusterSize = GetEstimatedClusterSize();
658 fNextEntry += clusterSize;
659 if (fNextEntry > fTree->fClusterRangeEnd[fClusterRange]) {
663 fNextEntry = fTree->fClusterRangeEnd[fClusterRange] + 1;
669 fNextEntry = fStartEntry + GetEstimatedClusterSize();
671 if (fNextEntry > fTree->GetEntries()) {
672 fNextEntry = fTree->GetEntries();
683 fNextEntry = fStartEntry;
684 if (fTree->fNClusterRange || fTree->GetAutoFlush() > 0) {
685 if (fClusterRange == 0 || fTree->fNClusterRange == 0) {
688 fStartEntry -= GetEstimatedClusterSize();
693 if (fClusterRange == 0) {
697 Long64_t clusterSize = fTree->fClusterSize[fClusterRange];
698 if (clusterSize == 0) {
699 clusterSize = GetEstimatedClusterSize();
701 fStartEntry -= clusterSize;
706 fStartEntry = fNextEntry - GetEstimatedClusterSize();
708 if (fStartEntry < 0) {
818, fDefaultEntryOffsetLen(1000)
824, fAutoSave( -300000000)
825, fAutoFlush(-30000000)
856, fFriendLockStatus(0)
858, fCacheDoAutoInit(
kTRUE)
859, fCacheDoClusterPrefetch(
kFALSE)
862, fNEntriesSinceSorting(0)
895 if (strlen(title) > 2) {
896 if (title[0] ==
'/') {
897 Branch(title+1,32000,splitlevel);
912#ifdef R__TRACK_BASKET_ALLOC_TIME
913 Info(
"TTree::~TTree",
"For tree %s, allocation time is %lluus.",
GetName(), fAllocationTime.load());
1033 Error(
"AddBranchToCache",
"Could not load a tree");
1042 Error(
"AddBranchToCache",
"No tree is available. Branch was not added to the cache");
1048 Error(
"AddBranchToCache",
"No file is available. Branch was not added to the cache");
1053 Error(
"AddBranchToCache",
"No cache is available, branch not added");
1056 return tc->
AddBranch(bname,subbranches);
1072 Error(
"AddBranchToCache",
"Could not load a tree");
1080 Error(
"AddBranchToCache",
"Error adding branch");
1085 Error(
"AddBranchToCache",
"No tree is available. Branch was not added to the cache");
1091 Error(
"AddBranchToCache",
"No file is available. Branch was not added to the cache");
1096 Error(
"AddBranchToCache",
"No cache is available, branch not added");
1116 Error(
"DropBranchFromCache",
"Could not load a tree");
1125 Error(
"DropBranchFromCache",
"No tree is available. Branch was not dropped from the cache");
1131 Error(
"DropBranchFromCache",
"No file is available. Branch was not dropped from the cache");
1136 Error(
"DropBranchFromCache",
"No cache is available, branch not dropped");
1155 Error(
"DropBranchFromCache",
"Could not load a tree");
1163 Error(
"DropBranchFromCache",
"Error dropping branch");
1168 Error(
"DropBranchFromCache",
"No tree is available. Branch was not dropped from the cache");
1174 Error(
"DropBranchFromCache",
"No file is available. Branch was not dropped from the cache");
1179 Error(
"DropBranchFromCache",
"No cache is available, branch not dropped");
1214 const auto friendHasValidIndex = [&] {
1219 if ((isMainReshuffled || isFriendReshuffled) && !friendHasValidIndex) {
1220 const auto reshuffledTreeName = isMainReshuffled ? mainTree.
GetName() : friendTree.
GetName();
1221 const auto msg =
"Tree '%s' has the kEntriesReshuffled bit set, and cannot be used as friend nor can be added as "
1222 "a friend unless the main tree has a TTreeIndex on the friend tree '%s'. You can also unset the "
1223 "bit manually if you know what you are doing.";
1224 Error(
"AddFriend", msg, reshuffledTreeName, friendTree.
GetName());
1309 bool canAddFriend =
true;
1313 Warning(
"AddFriend",
"FriendElement %s in file %s has less entries %lld than its parent Tree: %lld", treename,
1317 Error(
"AddFriend",
"Cannot find tree '%s' in file '%s', friend not added", treename, filename);
1318 canAddFriend =
false;
1343 bool canAddFriend =
true;
1347 Warning(
"AddFriend",
"FriendElement %s in file %s has less entries %lld than its parent tree: %lld", treename,
1351 Error(
"AddFriend",
"Cannot find tree '%s' in file '%s', friend not added", treename,
file->GetName());
1352 canAddFriend =
false;
1378 Warning(
"AddFriend",
"FriendElement '%s' in file '%s' has less entries %lld than its parent tree: %lld",
1477 if (opt.
Contains(
"flushbaskets")) {
1478 if (
gDebug > 0)
Info(
"AutoSave",
"calling FlushBaskets \n");
1490 if (nbytes && key) {
1497 if (
file)
file->WriteStreamerInfo();
1511 const char* writeStlWithoutProxyMsg =
"The class requested (%s) for the branch \"%s\""
1512 " is an instance of an stl collection and does not have a compiled CollectionProxy."
1513 " Please generate the dictionary for this collection (%s) to avoid to write corrupted data.";
1527 Error(
"Branch", writeStlWithoutProxyMsg,
1531 return Branch(branchname, classname, (
void*) addobj, bufsize, splitlevel);
1534 void** addr = (
void**) addobj;
1538 if (ptrClass && claim) {
1545 Error(
"Branch",
"The class requested (%s) for \"%s\" is different from the type of the pointer passed (%s)",
1548 }
else if (actualClass && (claim != actualClass) && !actualClass->
InheritsFrom(claim)) {
1553 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s",
1559 Error(
"Branch", writeStlWithoutProxyMsg,
1563 return Branch(branchname, classname, (
void*) addobj, bufsize, splitlevel);
1573 Error(
"Branch",
"The pointer specified for %s is not of a class known to ROOT", branchname);
1577 void** addr = (
void**) addobj;
1578 if (addr && *addr) {
1581 Warning(
"Branch",
"The actual TClass corresponding to the object provided for the definition of the branch \"%s\" is missing.\n\tThe object will be truncated down to its %s part",
1582 branchname, ptrClass->
GetName());
1583 actualClass = ptrClass;
1584 }
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
1585 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s", actualClass->
GetName(), branchname, ptrClass->
GetName());
1589 actualClass = ptrClass;
1592 Error(
"Branch", writeStlWithoutProxyMsg,
1596 return Branch(branchname, actualClass->
GetName(), (
void*) addobj, bufsize, splitlevel);
1608 Error(
"Branch", writeStlWithoutProxyMsg,
1611 }
else if (claim == 0) {
1612 Error(
"Branch",
"The pointer specified for %s is not of a class known to ROOT and %s is not a known class", branchname, classname);
1619 Error(
"Branch",
"Reference interface requires a valid object (for branch: %s)!", branchname);
1623 if (ptrClass && claim) {
1630 Error(
"Branch",
"The class requested (%s) for \"%s\" is different from the type of the object passed (%s)",
1633 }
else if (actualClass && (claim != actualClass) && !actualClass->
InheritsFrom(claim)) {
1638 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s",
1644 Warning(
"Branch",
"The actual TClass corresponding to the object provided for the definition of the branch \"%s\" is missing.\n\tThe object will be truncated down to its %s part",
1645 branchname, ptrClass->
GetName());
1646 actualClass = ptrClass;
1647 }
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
1648 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s", actualClass->
GetName(), branchname, ptrClass->
GetName());
1652 Error(
"Branch", writeStlWithoutProxyMsg,
1667 Error(
"Branch",
"The pointer specified for %s is not of a class or type known to ROOT", branchname);
1670 return Branch(branchname,addobj,varname.
Data(),bufsize);
1676 Error(
"Branch",
"Reference interface requires a valid object (for branch: %s)!", branchname);
1681 Warning(
"Branch",
"The actual TClass corresponding to the object provided for the definition of the branch \"%s\" is missing.\n\tThe object will be truncated down to its %s part",
1682 branchname, ptrClass->
GetName());
1683 actualClass = ptrClass;
1684 }
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
1685 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s", actualClass->
GetName(), branchname, ptrClass->
GetName());
1689 Error(
"Branch", writeStlWithoutProxyMsg,
1704 "The inner type of the std::array passed specified for %s is not of a class or type known to ROOT",
1709 return Branch(branchname, addobj, varname.
Data(), bufsize);
1810 Error(
"Branch",
"Cannot call this constructor for a TClonesArray");
1816 while ((obj = next())) {
1824 Branch(col, bufsize, splitlevel - 1, branchname);
1826 if (nch && (
name[nch-1] ==
'_')) {
1835 if (splitlevel > 99) {
1861 char* curname =
new char[1000];
1863 while ((obj = next())) {
1866 Branch(curname, bufsize, splitlevel - 1);
1869 for (
Int_t i = 0; i < 1000; ++i) {
1870 if (curname[i] == 0) {
1873 if (curname[i] ==
'/') {
1880 strlcat(curname, occur,1000);
1989 return Bronch(
name, classname, addobj, bufsize, splitlevel);
1991 if (splitlevel < 0) {
1994 return BranchOld(
name, classname, addobj, bufsize, splitlevel);
2043 Error(
"BranchOld",
"Cannot find class: '%s'", classname);
2048 Fatal(
"BranchOld",
"The requested class ('%s') does not inherit from TObject.\n"
2049 "\tfgBranchStyle is set to zero requesting by default to use BranchOld.\n"
2050 "\tIf this is intentional use Bronch instead of Branch or BranchOld.", classname);
2052 Fatal(
"BranchOld",
"The requested class ('%s') does not inherit from TObject.\n"
2053 "\tYou can not use BranchOld to store objects of this type.",classname);
2064 const char* rdname = 0;
2065 const char* dname = 0;
2067 char** apointer = (
char**) addobj;
2079 if (
name[lenName-1] ==
'.') {
2118 if (!strcmp(dname,
"fBits")) {
2121 if (!strcmp(dname,
"fUniqueID")) {
2131 branchname = rdname;
2135 branchname.
Form(
"%s%s",
name, &rdname[1]);
2137 branchname.
Form(
"%s%s",
name, &rdname[0]);
2143 char* pointer = ((
char*) obj) + offset;
2152 char* cpointer = (
char*) pointer;
2153 char** ppointer = (
char**) cpointer;
2155 if (splitlevel != 2) {
2157 branch1 =
new TBranchClones(branch,branchname, pointer, bufsize);
2162 blist->
Add(branch1);
2170 blist->
Add(branch1);
2187 blist->
Add(branch1);
2208 if (!strcmp(rdi->
GetName(), index)) {
2211 if (!strcmp(rdi->
GetName(), aindex)) {
2223 leaflist.
Form(
"%s[%s]/%c", &rdname[0], index, vcode);
2225 Error(
"BranchOld",
"Cannot create branch for rdname: %s code: %d", branchname.
Data(), code);
2232 leaflist.
Form(
"%s/%s", dname,
"C");
2245 branch1 =
new TBranch(branch, bname, *((
void**) pointer), leaflist, bufsize);
2249 blist->
Add(branch1);
2256 leaflist.
Form(
"%s/%c", rdname, vcode);
2258 Error(
"BranchOld",
"Cannot create branch for rdname: %s code: %d", branchname.
Data(), code);
2261 branch1 =
new TBranch(branch, branchname, pointer, leaflist, bufsize);
2263 blist->
Add(branch1);
2272 Warning(
"BranchOld",
"Cannot process member: '%s'", rdname);
2381 Error(
"Bronch",
"Cannot find class:%s", classname);
2392 objptr = (
char*)addr;
2394 objptr = *((
char**) addr);
2400 Error(
"Bronch",
"Pointer to TClonesArray is null");
2404 Error(
"Bronch",
"TClonesArray with no class defined in branch: %s",
name);
2408 Error(
"Bronch",
"TClonesArray with no dictionary defined in branch: %s",
name);
2412 if (splitlevel > 0) {
2413 if (hasCustomStreamer)
2414 Warning(
"Bronch",
"Using split mode on a class: %s with a custom Streamer", clones->
GetClass()->
GetName());
2429 if (!inklass && (collProxy->
GetType() == 0)) {
2430 Error(
"Bronch",
"%s with no class defined in branch: %s", classname,
name);
2437 Error(
"Bronch",
"Container with no dictionary defined in branch: %s",
name);
2441 Warning(
"Bronch",
"Using split mode on a class: %s with a custom Streamer", inklass->
GetName());
2452 branch =
new TBranchSTL(
this,
name, collProxy, bufsize, splitlevel );
2466 Error(
"Bronch",
"Cannot find dictionary for class: %s", classname);
2472 hasCustomStreamer =
kTRUE;
2475 if (splitlevel < 0 || ((splitlevel == 0) && hasCustomStreamer && cl->
IsTObject())) {
2506 objptr = (
char*) cl->
New();
2514 if ((splitlevel > 0) && !cl->
CanSplit()) {
2515 if (splitlevel != 99) {
2516 Warning(
"Bronch",
"%s cannot be split, resetting splitlevel to 0", cl->
GetName());
2530 Error(
"Bronch",
"Cannot build the StreamerInfo for class: %s", cl->
GetName());
2539 if (splitlevel > 0) {
2550 branch->
Unroll(
name, cl, sinfo, objptr, bufsize, splitlevel);
2697 constexpr auto kBufSize = 2000;
2698 char* fname =
new char[kBufSize];
2701 for (
Int_t i = 0; i < 10; ++i) {
2709 strlcpy(fname,
file->GetName(), kBufSize);
2712 char* cunder = strrchr(fname,
'_');
2715 const char* cdot = strrchr(
file->GetName(),
'.');
2717 strlcat(fname, cdot, kBufSize);
2722 strlcat(fname, fcount, kBufSize);
2725 char* cdot = strrchr(fname,
'.');
2728 strlcat(fname, strrchr(
file->GetName(),
'.'), kBufSize);
2732 strlcat(fname, fcount, kBufSize);
2739 Warning(
"ChangeFile",
"file %s already exist, trying with %d underscores", fname, nus+1);
2741 Int_t compress =
file->GetCompressionSettings();
2744 Error(
"Fill",
"Failed to open new file %s, continuing as a memory tree.",fname);
2746 Printf(
"Fill: Switching to new file: %s", fname);
2752 while ((obj =
file->GetList()->First())) {
2769 while ((branch = (
TBranch*)nextb())) {
2778 if (newfile) newfile->
Append(obj);
2818 TClass* expectedClass = 0;
2825 if (expectedClass && datatype ==
kOther_t && ptrClass == 0) {
2826 if (isBranchElement) {
2831 Error(
"SetBranchAddress",
"Unable to determine the type given for the address for \"%s\". "
2832 "The class expected (%s) refers to an stl collection and do not have a compiled CollectionProxy. "
2833 "Please generate the dictionary for this class (%s)",
2840 Error(
"SetBranchAddress",
"Unable to determine the type given for the address for \"%s\". "
2841 "The class expected (%s) does not have a dictionary and needs to be emulated for I/O purposes but is being passed a compiled object."
2842 "Please generate the dictionary for this class (%s)",
2845 Error(
"SetBranchAddress",
"Unable to determine the type given for the address for \"%s\". "
2846 "This is probably due to a missing dictionary, the original data class for this branch is %s.", branch->
GetName(), expectedClass->
GetName());
2850 if (expectedClass && ptrClass && (branch->
GetMother() == branch)) {
2853 Error(
"SetBranchAddress",
"The address for \"%s\" should be the address of a pointer!", branch->
GetName());
2873 if( expectedClass && ptrClass &&
2874 expectedClass != ptrClass &&
2882 Info(
"SetBranchAddress",
"Matching STL collection (at least according to the SchemaRuleSet when "
2883 "reading a %s into a %s",expectedClass->
GetName(),ptrClass->
GetName());
2890 Error(
"SetBranchAddress",
"The pointer type given \"%s\" does not correspond to the type needed \"%s\" by the branch: %s", ptrClass->
GetName(), bEl->
GetClassName(), branch->
GetName());
2901 }
else if (expectedClass && ptrClass && !expectedClass->
InheritsFrom(ptrClass)) {
2923 Error(
"SetBranchAddress",
"The pointer type given (%s) does not correspond to the class needed (%s) by the branch: %s", ptrClass->
GetName(), expectedClass->
GetName(), branch->
GetName());
2924 if (isBranchElement) {
2933 Error(
"SetBranchAddress",
"The pointer type given \"%s\" (%d) does not correspond to the type needed \"%s\" (%d) by the branch: %s",
2940 if (expectedClass) {
2941 Error(
"SetBranchAddress",
"The pointer type given \"%s\" (%d) does not correspond to the type needed \"%s\" by the branch: %s",
2943 if (isBranchElement) {
2959 if (etype == expectedType) {
2974 if (etype == expectedType) {
2986 if (len <= ptrClass->
Size()) {
2990 Error(
"SetBranchAddress",
"The pointer type given \"%s\" does not correspond to the type needed \"%s\" (%d) by the branch: %s",
2996 Error(
"SetBranchAddress", writeStlWithoutProxyMsg,
2998 if (isBranchElement) {
3004 if (isBranchElement) {
3005 if (expectedClass) {
3114 for (
Int_t i = 0; i < nb; ++i) {
3124 if (thistree !=
this) {
3149 for (
Int_t lndx = 0; lndx < nleaves; ++lndx) {
3155 if (branch && (newcomp > -1)) {
3164 for (
Long64_t i = 0; i < nb; ++i) {
3175 for (
Int_t j = 0; j < nb1; ++j) {
3189 for (
Int_t k = 0; k < nb2; ++k) {
3219 if ( newtree->
CopyEntries(
this, -1, option ) < 0 ) {
3221 Error(
"CloneTTree",
"TTree has not been cloned\n");
3244 for (
Int_t i = 0; i < nbranches; ++i) {
3251 tree->ResetBranchAddress(br);
3280 Warning(
"CopyAddresses",
"Could not find branch named '%s' in tree named '%s'", branch->
GetName(),
tree->GetName());
3288 std::set<TLeaf*> updatedLeafCount;
3289 for (
Int_t i = 0; i < ntleaves; ++i) {
3305 tree->ResetBranchAddress(tbranch);
3308 bool needAddressReset =
false;
3316 needAddressReset =
true;
3318 needAddressReset = (updatedLeafCount.find(leaf->
GetLeafCount()) != updatedLeafCount.end());
3347 Warning(
"CopyAddresses",
"Could not find branch named '%s' in tree named '%s'", branch->
GetName(),
tree->GetName());
3356 (
tree->IsA()->InheritsFrom(
"TNtuple") ||
tree->IsA()->InheritsFrom(
"TNtupleD") )
3358 tree->ResetBranchAddresses();
3364 enum EOnIndexError { kDrop, kKeep, kBuild };
3366 static Bool_t R__HandleIndex(EOnIndexError onIndexError,
TTree *newtree,
TTree *oldtree)
3374 switch (onIndexError) {
3398 switch (onIndexError) {
3422 }
else if ( onIndexError == kDrop ) {
3477 EOnIndexError onIndexError;
3479 onIndexError = kKeep;
3480 }
else if (opt.
Contains(
"buildindex")) {
3481 onIndexError = kBuild;
3482 }
else if (opt.
Contains(
"dropindex")) {
3483 onIndexError = kDrop;
3485 onIndexError = kBuild;
3488 Int_t cacheSize = -1;
3491 Ssiz_t cacheSizeEnd = opt.
Index(
" ",cacheSizeLoc+10) - (cacheSizeLoc+10);
3492 TSubString cacheSizeStr( opt(cacheSizeLoc+10,cacheSizeEnd) );
3495 Warning(
"CopyEntries",
"The cachesize option can not be parsed: %s. The default size will be used.",cacheSizeStr.
String().
Data());
3498 const char *munit =
nullptr;
3501 Warning(
"CopyEntries",
"The cachesize option is too large: %s (%g%s max). The default size will be used.",cacheSizeStr.
String().
Data(),
m,munit);
3504 if (
gDebug > 0 && cacheSize != -1)
Info(
"CopyEntries",
"Using Cache size: %d\n",cacheSize);
3510 }
else if (
nentries > treeEntries) {
3514 if (fastClone && (nentries < 0 || nentries == tree->
GetEntriesFast())) {
3518 if (
tree->LoadTree(i) < 0) {
3522 withIndex = R__HandleIndex( onIndexError,
this,
tree );
3547 for (
Long64_t ii = 0; ii < tentries; ii++) {
3548 if (localtree->
GetEntry(ii) <= 0) {
3558 if (
tree->GetDirectory() &&
tree->GetDirectory()->GetFile()) {
3559 Warning(
"CopyEntries",
"Skipped file %s\n",
tree->GetDirectory()->GetFile()->GetName());
3561 Warning(
"CopyEntries",
"Skipped file number %d\n",
tree->GetTreeNumber());
3575 }
else if (
nentries > treeEntries) {
3578 Int_t treenumber = -1;
3580 if (
tree->LoadTree(i) < 0) {
3583 if (treenumber !=
tree->GetTreeNumber()) {
3585 withIndex = R__HandleIndex( onIndexError,
this,
tree );
3587 treenumber =
tree->GetTreeNumber();
3589 if (
tree->GetEntry(i) <= 0) {
3592 nbytes += this->
Fill();
3669 if (
file && !strcmp(option,
"all")) {
3670 if (!
file->IsWritable()) {
3671 Error(
"Delete",
"File : %s is not writable, cannot delete Tree:%s",
file->GetName(),
GetName());
3688 Int_t nbytes,objlen,keylen;
3689 while ((leaf = (
TLeaf*)next())) {
3692 for (
Int_t i=0;i<nbaskets;i++) {
3696 if (!branchFile)
continue;
3698 if (nbytes <= 0)
continue;
3699 branchFile->
MakeFree(pos,pos+nbytes-1);
3713 if (dirsav) dirsav->
cd();
3714 if (
gDebug)
Info(
"TTree::Delete",
"Deleting Tree: %s: %d baskets deleted. Total space freed = %d bytes\n",
GetName(),nbask,ntot);
4411 for (
Int_t i = 0; i < nb; ++i) {
4425 for (
Int_t i = 0; i < nleaves; ++i) {
4429 for (
Int_t j = 0; j < nbaskets - 1; ++j) {
4513 for (
Int_t i = 0; i < nbranches; ++i) {
4521 nwrite = branch->
FillImpl(
nullptr);
4523 nwrite = branch->
FillImpl(useIMT ? &imtHelper :
nullptr);
4527 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d, entry=%lld\n"
4528 " This error is symptomatic of a Tree created as a memory-resident Tree\n"
4529 " Instead of doing:\n"
4530 " TTree *T = new TTree(...)\n"
4531 " TFile *f = new TFile(...)\n"
4533 " TFile *f = new TFile(...)\n"
4534 " TTree *T = new TTree(...)\n\n",
4537 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d, entry=%lld",
GetName(), branch->
GetName(), nwrite,
4569 bool autoFlush =
false;
4570 bool autoSave =
false;
4588 if (autoFlush || autoSave) {
4599 Info(
"TTree::Fill",
"OptimizeBaskets called at entry %lld, fZipBytes=%lld, fFlushedBytes=%lld\n",
4611 if (zipBytes != 0) {
4613 }
else if (totBytes != 0) {
4648 Info(
"TTree::Fill",
"FlushBaskets() called at entry %lld, fZipBytes=%lld, fFlushedBytes=%lld\n",
fEntries,
4656 Info(
"TTree::Fill",
"AutoSave called at entry %lld, fZipBytes=%lld, fSavedBytes=%lld\n",
fEntries,
4669 return nerror == 0 ? nbytes : -1;
4677 if (list==0 || branchname == 0 || branchname[0] ==
'\0')
return 0;
4681 UInt_t brlen = strlen(branchname);
4683 for(
Int_t index = 0; index < nbranches; ++index) {
4688 if (len &&
name[len-1]==
']') {
4689 const char *dim = strchr(
name,
'[');
4694 if (brlen == len && strncmp(branchname,
name,len)==0) {
4698 if ((brlen >= len) && (branchname[len] ==
'.')
4699 && strncmp(
name, branchname, len) == 0) {
4706 if (next)
return next;
4708 const char *dot = strchr((
char*)branchname,
'.');
4710 if (len==(
size_t)(dot-branchname) &&
4711 strncmp(branchname,
name,dot-branchname)==0 ) {
4739 if (branch)
return branch;
4743 if (branch)
return branch;
4747 while ((branch = (
TBranch*) next())) {
4750 return nestedbranch;
4767 const char *subbranch = strstr(branchname, fe->
GetName());
4768 if (subbranch != branchname) {
4772 subbranch += strlen(fe->
GetName());
4773 if (*subbranch !=
'.') {
4779 std::ostringstream
name;
4806 char* subsearchname = (
char*) strstr(searchname,
GetName());
4807 if (subsearchname != searchname) {
4810 if (subsearchname) {
4811 subsearchname += strlen(
GetName());
4812 if (*subsearchname !=
'.') {
4816 if (subsearchname[0]==0) {
4827 const bool searchnameHasDot = strchr(searchname,
'.') !=
nullptr;
4832 while ((leaf = (
TLeaf*) next())) {
4835 if (dim >= 0) leafname.
Remove(dim);
4837 if (leafname == searchname) {
4840 if (subsearchname && leafname == subsearchname) {
4846 dim = leaftitle.
First(
'[');
4847 if (dim >= 0) leaftitle.
Remove(dim);
4849 if (leaftitle == searchname) {
4852 if (subsearchname && leaftitle == subsearchname) {
4855 if (!searchnameHasDot)
4860 dim = longname.
First(
'[');
4861 if (dim>=0) longname.
Remove(dim);
4862 if (longname == searchname) {
4865 if (subsearchname && longname == subsearchname) {
4869 dim = longtitle.
First(
'[');
4870 if (dim>=0) longtitle.
Remove(dim);
4871 if (longtitle == searchname) {
4874 if (subsearchname && longtitle == subsearchname) {
4882 if (strstr(searchname,
".") && !strcmp(searchname, branch->
GetName())) {
4885 if (subsearchname && strstr(subsearchname,
".") && !strcmp(subsearchname, branch->
GetName())) {
4903 subsearchname = (
char*) strstr(searchname, fe->
GetName());
4904 if (subsearchname != searchname) {
4907 if (subsearchname) {
4908 subsearchname += strlen(fe->
GetName());
4909 if (*subsearchname !=
'.') {
4915 if (subsearchname) {
4916 leafname.
Form(
"%s.%s",t->
GetName(),subsearchname);
4918 leafname = searchname;
4960 return fPlayer->
Fit(funcname, varexp, selection, option, goption,
nentries, firstentry);
4966struct BoolRAIIToggle {
4969 BoolRAIIToggle(
Bool_t &val) : m_val(val) { m_val =
true; }
4970 ~BoolRAIIToggle() { m_val =
false; }
5009 if (retval == -1)
return retval;
5044 std::atomic<Int_t> nerrpar(0);
5045 std::atomic<Int_t> nbpar(0);
5046 std::atomic<Int_t> pos(0);
5048 auto mapFunction = [&]() {
5054 Int_t j = pos.fetch_add(1);
5060 std::stringstream ss;
5061 ss << std::this_thread::get_id();
5062 Info(
"FlushBaskets",
"[IMT] Thread %s", ss.str().c_str());
5063 Info(
"FlushBaskets",
"[IMT] Running task for branch #%d: %s", j, branch->GetName());
5066 Int_t nbtask = branch->FlushBaskets();
5068 if (nbtask < 0) { nerrpar++; }
5069 else { nbpar += nbtask; }
5073 pool.
Foreach(mapFunction, nb);
5079 return nerrpar ? -1 : nbpar.load();
5082 for (
Int_t j = 0; j < nb; j++) {
5125 const char* alias = t->
GetAlias(aliasName);
5129 const char* subAliasName = strstr(aliasName, fe->
GetName());
5130 if (subAliasName && (subAliasName[strlen(fe->
GetName())] ==
'.')) {
5150 for (
Int_t i = 0; i < nb; i++) {
5154 if (!strcmp(
b->GetName(),
name)) {
5157 if (!strcmp(
b->GetFullName(),
name)) {
5161 result = R__GetBranch(*(
b->GetListOfBranches()),
name);
5173 if (
name == 0)
return 0;
5189 for (
Int_t i = 0; i < nleaves; i++) {
5226 char* subname = (
char*) strstr(
name, fe->
GetName());
5227 if (subname !=
name) {
5232 if (*subname !=
'.') {
5281 if (!(stcs =
gSystem->
Getenv(
"ROOT_TTREECACHE_SIZE")) || !*stcs) {
5287 if (cacheFactor < 0.0) {
5298 if (cacheSize >= (INT_MAX / 4)) {
5299 cacheSize = INT_MAX / 4;
5302 if (cacheSize < 0) {
5306 if (cacheSize == 0 && withDefault) {
5505 if (entry < 0 || entry >=
fEntries)
return 0;
5517 auto seqprocessing = [&]() {
5519 for (i=0;i<nbranches;i++) {
5521 nb = branch->
GetEntry(entry, getall);
5534 nb = branch->GetEntry(entry, getall);
5538 if (nb < 0)
return nb;
5544 std::atomic<Int_t> pos(0);
5545 std::atomic<Int_t> nbpar(0);
5547 auto mapFunction = [&]() {
5553 Int_t j = pos.fetch_add(1);
5559 std::stringstream ss;
5560 ss << std::this_thread::get_id();
5561 Info(
"GetEntry",
"[IMT] Thread %s", ss.str().c_str());
5562 Info(
"GetEntry",
"[IMT] Running task for branch #%d: %s", j, branch->GetName());
5565 std::chrono::time_point<std::chrono::system_clock> start, end;
5567 start = std::chrono::system_clock::now();
5568 nbtask = branch->GetEntry(entry, getall);
5569 end = std::chrono::system_clock::now();
5571 Long64_t tasktime = (
Long64_t)std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
5574 if (nbtask < 0) errnb = nbtask;
5575 else nbpar += nbtask;
5601 if (nb < 0)
return nb;
5618 if (nb < 0)
return nb;
5653 if (checkLeafCount) {
5654 for (
Int_t i = 0; i < nbranches; i++) {
5658 auto countBranch = leafCount->GetBranch();
5668 if (!checkLeafCount) {
5671 for (
Int_t i = 0; i < nbranches; i++) {
5683 [](std::pair<Long64_t,TBranch*>
a, std::pair<Long64_t,TBranch*>
b) {
5684 return a.first > b.first;
5703 [](std::pair<Long64_t,TBranch*>
a, std::pair<Long64_t,TBranch*>
b) {
5704 return a.first > b.first;
5809 for (i = 0; i < nbranches; ++i) {
5812 if (nb < 0)
return nb;
5824 if (serial <0)
return -nbytes;
5826 if (nb < 0)
return nb;
5851 if (strcmp(friendname,fe->
GetName())==0
5965 leaf = branch->
GetLeaf(leafname);
5972 while ((leaf = (
TLeaf*)nextl())) {
5975 if (strcmp(leaf->
GetName(),leafname))
5978 UInt_t nbch = strlen(branchname);
5980 const char* brname = br->
GetName();
5982 if (strncmp(brname,branchname,nbch)) {
5984 const char *mothername = mother->
GetName();
5985 UInt_t motherlen = strlen(mothername);
5986 if (nbch > motherlen && strncmp(mothername,branchname,motherlen)==0 && (mothername[motherlen-1]==
'.' || branchname[motherlen]==
'.')) {
5988 if (strncmp(brname,branchname+motherlen+1,nbch-motherlen-1)) {
6004 if ((strlen(brname) > nbch) && (brname[nbch] !=
'.') && (brname[nbch] !=
'[')) {
6018 if (leaf)
return leaf;
6029 char *subname = (
char*)strstr(leafname,fe->
GetName());
6030 if (subname != leafname)
continue;
6033 if (*subname !=
'.')
continue;
6035 strippedArg += subname;
6036 leaf = t->
GetLeaf(branchname,subname);
6037 if (leaf)
return leaf;
6054 if (leafname == 0)
return 0;
6079 std::string path(
name);
6080 const auto sep = path.find_last_of(
"/");
6081 if (
sep != std::string::npos)
6107 if (entryNumber < 0)
break;
6147 if (entryNumber < 0)
break;
6178 if (pe && pe->
GetTree() !=
this)
6191 if (create && !pe) {
6195 if (pe && pe->
GetTree() !=
this) pe = 0;
6264 if (autoflush > 0 && autosave > 0) {
6276 for (
Int_t i = 0; i < nb; ++i) {
6283 for(
Int_t i = 0, j = 0; j < oldsize; ++j) {
6314 Int_t nimported = 0;
6315 while ((leaf=(
TLeaf*)next())) {
6370 if (friendTree == 0) {
6375 friendHasEntry =
kTRUE;
6382 friendHasEntry =
kTRUE;
6385 if (oldNumber != newNumber) {
6511 Warning(
"MakeCode",
"MakeCode is obsolete. Use MakeClass or MakeSelector instead");
6637Int_t TTree::MakeProxy(
const char* proxyClassname,
const char* macrofilename,
const char* cutfilename,
const char* option,
Int_t maxUnrolling)
6641 return fPlayer->
MakeProxy(proxyClassname,macrofilename,cutfilename,option,maxUnrolling);
6694 if(opt.
EqualTo(
"=legacy", TString::ECaseCompare::kIgnoreCase)) {
6727 while ((obj=next())) {
6734 if (!newtree)
continue;
6740 tree->GetListOfClones()->Remove(newtree);
6741 tree->ResetBranchAddresses();
6750 tree->ResetBranchAddresses();
6775 if (
tree==
this)
continue;
6777 Error(
"Add",
"Attempt to add object of class: %s to a %s",
tree->ClassName(),
ClassName());
6789 tree->ResetBranchAddresses();
6806 const char *options = info ? info->
fOptions.
Data() :
"";
6833 if (
tree==
this)
continue;
6835 Error(
"Add",
"Attempt to add object of class: %s to a %s",
tree->ClassName(),
ClassName());
6847 tree->ResetBranchAddresses();
6862 if (src == dst)
return;
6884 while ((leaf = (
TLeaf*) next())) {
6916 if (nleaves == 0 || treeSize == 0) {
6920 Double_t aveSize = treeSize/nleaves;
6924 Int_t i, oldMemsize,newMemsize,oldBaskets,newBaskets;
6925 i = oldMemsize = newMemsize = oldBaskets = newBaskets = 0;
6930 for (
Int_t pass =0;pass<2;pass++) {
6935 for (i=0;i<nleaves;i++) {
6939 Double_t idealFactor = totBytes/aveSize;
6943 sizeOfOneEntry = aveSize;
6948 oldMemsize += oldBsize;
6949 oldBaskets += 1+
Int_t(totBytes/oldBsize);
6952 newBaskets += 1+
Int_t(totBytes/oldBsize);
6955 Double_t bsize = oldBsize*idealFactor*memFactor;
6956 if (bsize < 0) bsize = bmax;
6957 if (bsize > bmax) bsize = bmax;
6966 newBsize = newBsize + (clusterSize *
sizeof(
Int_t) * 2);
6975 newBsize = newBsize - newBsize%512 + 512;
6977 if (newBsize < sizeOfOneEntry) newBsize = sizeOfOneEntry;
6978 if (newBsize < bmin) newBsize = bmin;
6979 if (newBsize > 10000000) newBsize = bmax;
6981 if (pDebug)
Info(
"OptimizeBaskets",
"Changing buffer size from %6d to %6d bytes for %s\n",oldBsize,newBsize,branch->
GetName());
6984 newMemsize += newBsize;
6988 newBaskets += 1+
Int_t(totBytes/newBsize);
6989 if (pass == 0)
continue;
6993 if (comp > 1 && comp < minComp) {
6994 if (pDebug)
Info(
"OptimizeBaskets",
"Disabling compression for branch : %s\n",branch->
GetName());
7000 if (memFactor > 100) memFactor = 100;
7001 Double_t bmin_new = bmin*memFactor;
7002 Double_t bmax_new = bmax*memFactor;
7003 static const UInt_t hardmax = 1*1024*1024*1024;
7010 static const UInt_t hardmin = 8;
7011 bmin = (bmin_new > hardmax) ? hardmax : ( bmin_new < hardmin ? hardmin : (
UInt_t)bmin_new );
7012 bmax = (bmax_new > hardmax) ? bmin : (
UInt_t)bmax_new;
7015 Info(
"OptimizeBaskets",
"oldMemsize = %d, newMemsize = %d\n",oldMemsize, newMemsize);
7016 Info(
"OptimizeBaskets",
"oldBaskets = %d, newBaskets = %d\n",oldBaskets, newBaskets);
7095 Printf(
"******************************************************************************");
7098 Printf(
"* : : Tree compression factor = %6.2f *", cx);
7099 Printf(
"******************************************************************************");
7102 if (option ==
nullptr)
7105 if (strncmp(option,
"clusters",strlen(
"clusters"))==0) {
7106 Printf(
"%-16s %-16s %-16s %5s",
7107 "Cluster Range #",
"Entry Start",
"Last Entry",
"Size");
7112 Printf(
"%-16d %-16lld %-16lld %5lld",
7117 Printf(
"%-16d %-16lld %-16lld %5lld",
7126 if (strstr(option,
"toponly")) {
7129 for (
l=0;
l<nl;
l++) {
7132 if (strchr(br->
GetName(),
'.')) {
7140 for (
l=0;
l<nl;
l++) {
7141 if (count[
l] < 0)
continue;
7149 if (strlen(option) && strchr(option,
'*')) reg = option;
7153 while ((br= (
TBranch*)next())) {
7165 if (!
fFriends || !strstr(option,
"all"))
return;
7171 if (t) t->
Print(option);
7191 if (tc) tc->
Print(option);
7317 var.
Form(
"%s>>%s", varexp, hname);
7320 opt.
Form(
"%sgoff", option);
7385 Error(
"ReadFile",
"Cannot open file: %s",filename);
7388 const char* ext = strrchr(filename,
'.');
7389 if(ext != NULL && ((strcmp(ext,
".csv") == 0) || (strcmp(ext,
".CSV") == 0)) && delimiter ==
' ') {
7392 return ReadStream(in, branchDescriptor, delimiter);
7401 Long_t inPos = inputStream.tellg();
7402 char newline =
'\n';
7406 if(!inputStream.good()) {
7407 Error(
"ReadStream",
"Error reading stream: no newline found.");
7410 if(
c == newline)
break;
7416 inputStream.clear();
7417 inputStream.seekg(inPos);
7429 std::stringstream ss;
7430 std::istream *inTemp;
7431 Long_t inPos = inputStream.tellg();
7432 if (!inputStream.good()) {
7433 Error(
"ReadStream",
"Error reading stream");
7437 ss << std::cin.rdbuf();
7442 inTemp = &inputStream;
7444 std::istream& in = *inTemp;
7449 if (nbranches == 0) {
7450 char *bdname =
new char[4000];
7451 char *bd =
new char[100000];
7453 if (branchDescriptor) nch = strlen(branchDescriptor);
7457 in.getline(bd, 100000, newline);
7461 Error(
"ReadStream",
"Error reading stream");
7465 while( isspace(*cursor) && *cursor !=
'\n' && *cursor !=
'\0') {
7468 if (*cursor !=
'#' && *cursor !=
'\n' && *cursor !=
'\0') {
7475 strlcpy(bd,branchDescriptor,100000);
7480 void *address = &bd[90000];
7484 if(delimiter !=
' ') {
7486 if (strchr(bdcur,bdelim)==0 && strchr(bdcur,
':') != 0) {
7492 char *colon = strchr(bdcur,bdelim);
7493 if (colon) *colon = 0;
7494 strlcpy(bdname,bdcur,4000);
7495 char *
slash = strchr(bdname,
'/');
7501 desc.
Form(
"%s/%s",bdname,olddesc.Data());
7503 char *bracket = strchr(bdname,
'[');
7507 branch =
new TBranch(
this,bdname,address,desc.
Data(),32000);
7510 Warning(
"ReadStream",
"Illegal branch definition: %s",bdcur);
7525 Info(
"ReadStream",
"Will use branches:");
7526 for (
int i = 0 ; i < nbranches; ++i) {
7532 Info(
"ReadStream",
"Dumping read tokens, format:");
7533 Info(
"ReadStream",
"LLLLL:BBB:gfbe:GFBE:T");
7534 Info(
"ReadStream",
" L: line number");
7535 Info(
"ReadStream",
" B: branch number");
7536 Info(
"ReadStream",
" gfbe: good / fail / bad / eof of token");
7537 Info(
"ReadStream",
" GFBE: good / fail / bad / eof of file");
7538 Info(
"ReadStream",
" T: Token being read");
7545 const char sDelimBuf[2] = { delimiter, 0 };
7546 const char* sDelim = sDelimBuf;
7547 if (delimiter ==
' ') {
7552 if (newline ==
'\r' && in.peek() ==
'\n') {
7556 std::getline(in,
line, newline);
7563 Info(
"ReadStream",
"Skipping empty line number %lld", nlines);
7567 if (sLine[0] ==
'#') {
7569 Info(
"ReadStream",
"Skipping comment line number %lld: '%s'",
7570 nlines,
line.c_str());
7575 Info(
"ReadStream",
"Parsing line number %lld: '%s'",
7576 nlines,
line.c_str());
7583 std::stringstream sToken;
7587 Int_t remainingLeafLen = 0;
7588 while (goodLine && iBranch < nbranches
7589 && sLine.
Tokenize(tok, pos, sDelim)) {
7591 if (tok.
IsNull() && delimiter ==
' ') {
7597 if (!remainingLeafLen) {
7602 if (!remainingLeafLen) {
7603 remainingLeafLen = leaf->
GetLen();
7607 remainingLeafLen = 1;
7617 if (remainingLeafLen) {
7625 sToken.seekp(0, std::ios_base::beg);
7626 sToken.str(leafData.
Data());
7627 sToken.seekg(0, std::ios_base::beg);
7630 Info(
"ReadStream",
"%5lld:%3d:%d%d%d%d:%d%d%d%d:%s",
7632 (
int)sToken.good(), (
int)sToken.fail(),
7633 (
int)sToken.bad(), (
int)sToken.eof(),
7634 (
int)in.good(), (
int)in.fail(),
7635 (
int)in.bad(), (
int)in.eof(),
7636 sToken.str().c_str());
7643 "Buffer error while reading data for branch %s on line %lld",
7645 }
else if (!sToken.eof()) {
7646 if (sToken.fail()) {
7648 "Couldn't read formatted data in \"%s\" for branch %s on line %lld; ignoring line",
7652 std::string remainder;
7653 std::getline(sToken, remainder, newline);
7654 if (!remainder.empty()) {
7656 "Ignoring trailing \"%s\" while reading data for branch %s on line %lld",
7657 remainder.c_str(), branch->
GetName(), nlines);
7663 if (iBranch < nbranches) {
7665 "Read too few columns (%d < %d) in line %lld; ignoring line",
7666 iBranch, nbranches, nlines);
7668 }
else if (pos !=
kNPOS) {
7670 if (pos < sLine.
Length()) {
7672 "Ignoring trailing \"%s\" while reading line %lld",
7673 sLine.
Data() + pos - 1 ,
7748 for (
Int_t i = 0; i < nleaves; i++) {
7777 if (friend_t == oldFriend) {
7805 for (
Int_t i = 0; i < nb; ++i) {
7807 branch->
Reset(option);
7835 for (
Int_t i = 0; i < nb; ++i) {
7864 for (
Int_t i = 0; i < nbranches; ++i) {
7923 if (!aliasName || !aliasFormula) {
7926 if (!aliasName[0] || !aliasFormula[0]) {
8106 for (
Int_t i = 0; i < nleaves; i++) {
8110 if (strcmp(bname, branch->
GetName()) && (
s.Index(re) ==
kNPOS)) {
8117 Error(
"SetBasketSize",
"unknown branch -> '%s'", bname);
8133 Error(
"SetBranchAddress",
"unknown branch -> %s", bname);
8163 Error(
"SetBranchAddress",
"unknown branch -> %s", bname);
8197 const char *bname = branch->
GetName();
8198 while ((clone = (
TTree*) next())) {
8200 if (cloneBr && (cloneBr->
GetAddress() == oldAddr)) {
8285 if (0 == strcmp(bname,
"")) {
8286 Error(
"SetBranchStatus",
"Input regexp is an empty string: no match against branch names will be attempted.");
8290 TBranch *branch, *bcount, *bson;
8291 TLeaf *leaf, *leafcount;
8300 for (i=0;i<nleaves;i++) {
8304 if (strcmp(bname,
"*")) {
8307 if (strcmp(bname,branch->
GetName())
8308 && longname != bname
8309 &&
s.Index(re) ==
kNPOS)
continue;
8321 if (nb==0 && strchr(bname,
'*')==0) {
8331 UInt_t foundInFriend = 0;
8342 char *subbranch = (
char*)strstr(bname,fe->
GetName());
8343 if (subbranch!=bname) subbranch = 0;
8345 subbranch += strlen(fe->
GetName());
8346 if ( *subbranch !=
'.' ) subbranch = 0;
8357 if (!nb && !foundInFriend) {
8360 if (strchr(bname,
'*') != 0)
8361 Error(
"SetBranchStatus",
"No branch name is matching wildcard -> %s", bname);
8363 Error(
"SetBranchStatus",
"unknown branch -> %s", bname);
8365 if (strchr(bname,
'*') != 0)
8366 Warning(
"SetBranchStatus",
"No branch name is matching wildcard -> %s", bname);
8368 Warning(
"SetBranchStatus",
"unknown branch -> %s", bname);
8373 if (found) *found = nb + foundInFriend;
8377 for (i = 0; i < nleaves; i++) {
8389 for (j=0;j<nbranches;j++) {
8391 if (!bson)
continue;
8459 if (cacheSize < 0) {
8463 if (cacheSize == 0) {
8465 }
else if (cacheSize < 0) {
8480 if (!autocache && cacheSize>0) {
8481 Warning(
"SetCacheSizeAux",
"A TTreeCache could not be created because the TTree has no file");
8516 if (cacheSize == 0) {
8519 file->SetCacheRead(0,
this);
8538 Error(
"SetCacheSizeAux",
"Not setting up an automatically sized TTreeCache because of missing cache previously set");
8546 if (cacheSize == 0 || pf) {
8573 Error(
"SetCacheEntryRange",
"Could not load a tree");
8582 Error(
"SetCacheEntryRange",
"No tree is available. Could not set cache entry range");
8588 Error(
"SetCacheEntryRange",
"No file is available. Could not set cache entry range");
8593 Error(
"SetCacheEntryRange",
"No cache is available. Could not set entry range");
8632 if (maxEntries <= 0) {
8647 for (
Int_t i = 0; i < nb; i++) {
8680 if (newdefault < 10) {
8684 if (updateExisting) {
8687 while ( (
b = (
TBranch*)next() ) ) {
8688 b->SetEntryOffsetLen( newdefault,
kTRUE );
8758 TBranch*
b(
nullptr), *bMin(
nullptr), *bMax(
nullptr);
8764 if (!bMin || n2 < nMin) {
8768 if (!bMax || n2 > nMax) {
8773 if (bMin && nMin != nMax) {
8774 Warning(
"SetEntries",
"Tree branches have different numbers of entries, eg %s has %lld entries while %s has %lld entries.",
8775 bMin->GetName(), nMin, bMax->
GetName(), nMax);
8827 char enlistname[100];
8834 for (
Int_t i=0; i<nsel; i++){
8875 UChar_t newFeatures = ~curFeatures & featuresRequested;
8876 curFeatures |= newFeatures;
8894 Warning(
"SetFileNumber",
"file number must be positive. Set to 0");
8920 for (
Int_t i = 0; i < nb; ++i) {
9020 if (pf && !( opt ^ (
nullptr !=
dynamic_cast<TTreeCacheUnzip*
>(pf)))) {
9028 unzip->SetUnzipBufferSize(
Long64_t(cacheSize * RelSize) );
9102 Error(
"Show()",
"Cannot read entry %lld (entry does not exist)", entry);
9104 }
else if (ret == -1) {
9105 Error(
"Show()",
"Cannot read entry %lld (I/O error)", entry);
9110 Error(
"Show()",
"Cannot read entry %lld (I/O error)", entry);
9112 }
else if (ret == 0) {
9113 Error(
"Show()",
"Cannot read entry %lld (no data read)", entry);
9121 for (
Int_t i = 0; i < nleaves; i++) {
9150 printf(
" %-15s = ", leaf->
GetName());
9153 if (
l == (len - 1)) {
9158 if ((
l % ltype) == 0) {
9190 Error(
"StopCacheLearningPhase",
"Could not load a tree");
9199 Error(
"StopCacheLearningPhase",
"No tree is available. Could not stop cache learning phase");
9205 Error(
"StopCacheLearningPhase",
"No file is available. Could not stop cache learning phase");
9210 Error(
"StopCacheLearningPhase",
"No cache is available. Could not stop learning phase");
9223 for (
Int_t i = 0; i < nb; ++i) {
9229 for (
Int_t j=writeBasket,
n=0;j>=0 &&
n<nBaskets;--j) {
9261 if (
b.IsReading()) {
9272 Version_t R__v =
b.ReadVersion(&R__s, &R__c);
9286 Warning(
"Streamer",
"Old style index in this tree is deleted. Rebuild the index via TTree::BuildIndex");
9312 if (zipBytes != 0) {
9314 }
else if (totBytes != 0) {
9333 TNamed::Streamer(
b);
9334 TAttLine::Streamer(
b);
9335 TAttFill::Streamer(
b);
9336 TAttMarker::Streamer(
b);
9352 if (R__v > 2)
fIndex.Streamer(
b);
9355 OldInfoList.Streamer(
b);
9361 b.CheckByteCount(R__s, R__c, TTree::IsA());
9488 return ((
const TTree*)
this)->Write(
name, option, bufsize);
9518, fDirection(iter.fDirection)
9550 if (!
fTree)
return 0;
9557 if (!list)
return 0;
9566 if (!list)
return next;
9574 if (!nextTree)
return Next();
#define R__unlikely(expr)
unsigned long long ULong64_t
const Int_t kDoNotProcess
void Error(const char *location, const char *msgfmt,...)
static unsigned int total
R__EXTERN TInterpreter * gCling
R__EXTERN TVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
R__EXTERN TStyle * gStyle
typedef void((*Func_t)())
R__EXTERN TSystem * gSystem
constexpr Int_t kNEntriesResort
static TBranch * R__FindBranchHelper(TObjArray *list, const char *branchname)
Search in the array for a branch matching the branch name, with the branch possibly expressed as a 'f...
static char DataTypeToChar(EDataType datatype)
void TFriendElement__SetTree(TTree *tree, TList *frlist)
Set the fTree member for all friend elements.
bool CheckReshuffling(TTree &mainTree, TTree &friendTree)
static void TBranch__SetTree(TTree *tree, TObjArray &branches)
Set the fTree member for all branches and sub branches.
constexpr Float_t kNEntriesResortInv
#define R__LOCKGUARD(mutex)
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
TIOFeatures provides the end-user with the ability to change the IO behavior of data written via a TT...
UChar_t GetFeatures() const
bool Set(EIOFeatures bits)
Set a specific IO feature.
This class provides a simple interface to execute the same task multiple times in parallel,...
void Foreach(F func, unsigned nTimes, unsigned nChunks=0)
Execute func (with no arguments) nTimes in parallel.
void Set(Int_t n)
Set size of this array to n doubles.
void Set(Int_t n)
Set size of this array to n ints.
Fill Area Attributes class.
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetLineStyle() const
Return the line style.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Size_t GetMarkerSize() const
Return the marker size.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Each class (see TClass) has a linked list of its base class(es).
ROOT::ESTLType IsSTLContainer()
Return which type (if any) of STL container the data member is.
Manages buffers for branches of a Tree.
virtual Int_t DropBuffers()
Drop buffers of this basket if it is not the current basket.
Int_t GetBufferSize() const
A Branch for the case of an array of clone objects.
A Branch for the case of an object.
virtual void ResetAddress()
Set branch address to zero and free all allocated memory.
virtual void SetBranchFolder()
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any.
virtual Bool_t IsObjectOwner() const
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
virtual void SetAddress(void *addobj)
Point this branch at an object.
Int_t Unroll(const char *name, TClass *cltop, TClass *cl, char *ptr, Int_t basketsize, Int_t splitlevel, Int_t btype)
Split class cl into sub-branches of this branch.
virtual void SetTargetClass(const char *name)
Set the name of the class of the in-memory object into which the data will loaded.
A Branch for the case of an object.
A branch containing and managing a TRefTable for TRef autoloading.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch after a Merge operation (drop data but keep customizations) TRefTable is cleared.
virtual void Reset(Option_t *option="")
virtual void Clear(Option_t *option="")
Clear entries in the TRefTable.
virtual void Print(Option_t *option="") const
Print the TRefTable branch.
A Branch handling STL collection of pointers (vectors, lists, queues, sets and multisets) while stori...
A TTree is a list of TBranches.
virtual TLeaf * GetLeaf(const char *name) const
Return pointer to the 1st Leaf named name in thisBranch.
virtual void SetupAddresses()
If the branch address is not set, we set all addresses starting with the top level parent branch.
virtual void ResetAddress()
Reset the address of the branch.
virtual Long64_t GetBasketSeek(Int_t basket) const
Return address of basket in the file.
virtual char * GetAddress() const
void SetCompressionSettings(Int_t settings=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault)
Set compression settings.
virtual TString GetFullName() const
Return the 'full' name of the branch.
Int_t GetWriteBasket() const
virtual void DropBaskets(Option_t *option="")
Loop on all branch baskets.
TObjArray * GetListOfBranches()
virtual void SetTree(TTree *tree)
virtual void SetEntryOffsetLen(Int_t len, Bool_t updateSubBranches=kFALSE)
Update the default value for the branch's fEntryOffsetLen if and only if it was already non zero (and...
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
static void ResetCount()
Static function resetting fgCount.
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
Int_t FlushBaskets()
Flush to disk all the baskets of this branch and any of subbranches.
virtual void SetAddress(void *add)
Set address of this branch.
TObjArray * GetListOfBaskets()
Long64_t GetEntries() const
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
Int_t GetReadBasket() const
virtual void Print(Option_t *option="") const
Print TBranch parameters.
Int_t GetMaxBaskets() const
virtual TFile * GetFile(Int_t mode=0)
Return pointer to the file where branch buffers reside, returns 0 in case branch buffers reside in th...
virtual void KeepCircular(Long64_t maxEntries)
keep a maximum of fMaxEntries in memory
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch.
virtual Bool_t GetMakeClass() const
Return whether this branch is in a mode where the object are decomposed or not (Also known as MakeCla...
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
virtual Int_t LoadBaskets()
Baskets associated to this branch are forced to be in memory.
void SetIOFeatures(TIOFeatures &features)
Long64_t GetTotBytes(Option_t *option="") const
Return total number of bytes in the branch (excluding current buffer) if option ="*" includes all sub...
virtual Bool_t SetMakeClass(Bool_t decomposeObj=kTRUE)
Set the branch in a mode where the object are decomposed (Also known as MakeClass mode).
virtual void SetFile(TFile *file=0)
Set file where this branch writes/reads its buffers.
virtual void SetOffset(Int_t offset=0)
virtual Int_t GetExpectedType(TClass *&clptr, EDataType &type)
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
virtual Int_t GetBasketSize() const
Long64_t GetZipBytes(Option_t *option="") const
Return total number of zip bytes in the branch if option ="*" includes all sub-branches of this branc...
virtual void SetBasketSize(Int_t buffsize)
Set the basket size The function makes sure that the basket size is greater than fEntryOffsetlen.
virtual void Refresh(TBranch *b)
Refresh this branch using new information in b This function is called by TTree::Refresh.
TObjArray * GetListOfLeaves()
virtual void Reset(Option_t *option="")
Reset a Branch.
TBranch * GetMother() const
Get our top-level parent branch in the tree.
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill Basket buffer.
Int_t GetEntryOffsetLen() const
Using a TBrowser one can browse all ROOT objects.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
Buffer base class used for serializing objects.
void Expand(Int_t newsize, Bool_t copy=kTRUE)
Expand (or shrink) the I/O buffer to newsize bytes.
TClass instances represent classes, structs and namespaces in the ROOT type system.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
Bool_t HasDataMemberInfo() const
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
const std::type_info * GetTypeInfo() const
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
TList * GetListOfRealData() const
Bool_t CanIgnoreTObjectStreamer()
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
Version_t GetClassVersion() const
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
TClass * GetActualClass(const void *object) const
Return a pointer the the real class of the object.
@ kHasCustomStreamerMember
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
An array of clone (identical) objects.
void BypassStreamer(Bool_t bypass=kTRUE)
When the kBypassStreamer bit is set, the automatically generated Streamer can call directly TClass::W...
TClass * GetClass() const
Collection abstract base class.
virtual TObject ** GetObjectRef(const TObject *obj) const =0
virtual TIterator * MakeIterator(Bool_t dir=kIterForward) const =0
virtual const char * GetName() const
Return name of this collection.
void SetName(const char *name)
void Browse(TBrowser *b)
Browse this collection (called by TBrowser).
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
A specialized string object used for TTree selections.
All ROOT classes may have RTTI (run time type identification) support added.
Bool_t IsPersistent() const
Long_t GetOffset() const
Get offset from "this".
Bool_t IsBasic() const
Return true if data member is a basic type, e.g. char, int, long...
Bool_t IsaPointer() const
Return true if data member is a pointer.
TDataType * GetDataType() const
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
const char * GetArrayIndex() const
If the data member is pointer and has a valid array size in its comments GetArrayIndex returns a stri...
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
Basic data type descriptor (datatype information is obtained from CINT).
TString GetTypeName()
Get basic type of typedef, e,g.
void Append(TObject *obj, Bool_t replace=kFALSE) override
Append object to this directory.
Small helper to keep current directory context.
Describe directory structure in memory.
virtual TList * GetList() const
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
virtual Int_t WriteTObject(const TObject *obj, const char *name=nullptr, Option_t *="", Int_t=0)
See TDirectoryFile::WriteTObject for details.
virtual TFile * GetFile() const
virtual Int_t ReadKeys(Bool_t=kTRUE)
virtual Bool_t IsWritable() const
virtual TKey * GetKey(const char *, Short_t=9999) const
virtual Int_t ReadTObject(TObject *, const char *)
virtual void SaveSelf(Bool_t=kFALSE)
virtual TList * GetListOfKeys() const
void GetObject(const char *namecycle, T *&ptr)
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
virtual Bool_t cd(const char *path=nullptr)
Change current directory to "this" directory.
Streamer around an arbitrary STL like container, which implements basic container functionality.
A List of entry numbers in a TTree or TChain.
virtual void SetReapplyCut(Bool_t apply=kFALSE)
virtual void SetTree(const TTree *tree)
If a list for a tree with such name and filename exists, sets it as the current sublist If not,...
virtual TDirectory * GetDirectory() const
virtual void SetDirectory(TDirectory *dir)
Add reference to directory dir. dir can be 0.
virtual Bool_t Enter(Long64_t entry, TTree *tree=0)
Add entry #entry to the list.
virtual Long64_t GetEntry(Int_t index)
Return the number of the entry #index of this TEntryList in the TTree or TChain See also Next().
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
A TEventList object is a list of selected events (entries) in a TTree.
virtual Long64_t GetEntry(Int_t index) const
Return value of entry at index in the list.
virtual Int_t GetN() const
virtual Bool_t GetReapplyCut() const
A cache when reading files over the network.
virtual void WaitFinishPrefetch()
virtual Int_t GetBufferSize() const
TIOFeatures * fIOFeatures
TDirectory * fOutputDirectory
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Int_t GetCompressionSettings() const
virtual Long64_t GetEND() const
virtual void Flush()
Synchronize a file's in-memory and on-disk states.
virtual void MakeFree(Long64_t first, Long64_t last)
Mark unused bytes on the file.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
virtual void SetCacheRead(TFileCacheRead *cache, TObject *tree=0, ECacheAction action=kDisconnect)
Set a pointer to the read cache.
Int_t GetRecordHeader(char *buf, Long64_t first, Int_t maxbytes, Int_t &nbytes, Int_t &objlen, Int_t &keylen)
Read the logical record header starting at a certain postion.
A TFolder object is a collection of objects and folders.
TCollection * GetListOfFolders() const
virtual Int_t Occurence(const TObject *obj) const
Return occurence number of object in the list of objects of this folder.
A TFriendElement TF describes a TTree object TF in a file.
virtual const char * GetTreeName() const
virtual TTree * GetTree()
Return pointer to friend TTree.
virtual TFile * GetFile()
Return pointer to TFile containing this friend TTree.
TTree * fParentTree
! pointer to the parent TTree
virtual Int_t DeleteGlobal(void *obj)=0
Iterator abstract base class.
virtual TObject * Next()=0
virtual Option_t * GetOption() const
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual void Delete(Option_t *option="")
Delete an object from the file.
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
virtual Double_t GetValue(Int_t i=0) const
virtual void * GetValuePointer() const
virtual Int_t GetLenType() const
virtual void ReadValue(std::istream &, Char_t=' ')
virtual Int_t GetMaximum() const
virtual Int_t GetLen() const
Return the number of effective elements of this leaf, for the current entry.
virtual TLeaf * GetLeafCount() const
If this leaf stores a variable-sized array or a multi-dimensional array whose last dimension has vari...
virtual Bool_t IncludeRange(TLeaf *)
virtual void SetAddress(void *add=0)
TBranch * GetBranch() const
@ kNewValue
Set if we own the value buffer and so must delete it ourselves.
@ kIndirectAddress
Data member is a pointer to an array of basic types.
virtual TString GetFullName() const
Return the full name (including the parent's branch names) of the leaf.
virtual Int_t GetOffset() const
virtual void PrintValue(Int_t i=0) const
virtual void Add(TObject *obj)
virtual TObject * Remove(TObject *obj)
Remove object from the list.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual TObjLink * FirstLink() const
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
virtual void RecursiveRemove(TObject *obj)
Remove object from this collection and recursively remove the object from all other objects (and coll...
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual const char * GetName() const
Returns name of object.
Int_t GetEntriesFast() const
Int_t GetEntriesUnsafe() const
Return the number of objects in array (i.e.
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
virtual void Compress()
Remove empty slots from array.
Int_t GetEntries() const
Return the number of objects in array (i.e.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
TObject * UncheckedAt(Int_t i) const
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
TIterator * MakeIterator(Bool_t dir=kIterForward) const
Returns an array iterator.
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
TObject * At(Int_t idx) const
Wrapper around a TObject so it can be stored in a TList.
TObject * GetObject() const
Mother of all ROOT objects.
virtual Bool_t Notify()
This method must be overridden to handle object notification.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
R__ALWAYS_INLINE Bool_t IsZombie() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual const char * GetTitle() const
Returns title of object.
@ kCanDelete
if object in a list can be deleted
@ kMustCleanup
if object destructor must call RecursiveRemove()
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Principal Components Analysis (PCA)
The TRealData class manages the effective list of all data members for a given class.
TDataMember * GetDataMember() const
virtual const char * GetName() const
Returns name of object.
Long_t GetThisOffset() const
A TRefTable maintains the association between a referenced object and the parent object supporting th...
static void SetRefTable(TRefTable *table)
Static function setting the current TRefTable.
static TRefTable * GetRefTable()
Static function returning the current TRefTable.
Regular expression class.
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
static void * ReAlloc(void *vp, size_t size)
Reallocate (i.e.
Describe Streamer information for one class version.
void ForceWriteInfo(TFile *file, Bool_t force=kFALSE)
Recursively mark streamer infos for writing to a file.
void ToLower()
Change string to lower-case.
static const Ssiz_t kNPOS
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
Double_t Atof() const
Return floating-point value contained in string.
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
Bool_t EqualTo(const char *cs, ECaseCompare cmp=kExact) const
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
void SetHistFillColor(Color_t color=1)
Color_t GetHistLineColor() const
void SetHistLineStyle(Style_t styl=0)
Style_t GetHistFillStyle() const
Color_t GetHistFillColor() const
void SetHistLineColor(Color_t color=1)
Style_t GetHistLineStyle() const
void SetHistFillStyle(Style_t styl=0)
Width_t GetHistLineWidth() const
void SetHistLineWidth(Width_t width=1)
A zero length substring is legal.
virtual const char * Getenv(const char *env)
Get environment variable.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
A TTreeCache which exploits parallelized decompression of its own content.
static Bool_t IsParallelUnzip()
Static function that tells wether the multithreading unzipping is activated.
A cache to speed-up the reading of ROOT datasets.
virtual Int_t AddBranch(TBranch *b, Bool_t subgbranches=kFALSE)
Add a branch to the list of branches to be stored in the cache this function is called by the user vi...
virtual Int_t SetBufferSize(Int_t buffersize)
Change the underlying buffer size of the cache.
static void SetLearnEntries(Int_t n=10)
Static function to set the number of entries to be used in learning mode The default value for n is 1...
virtual void SetEntryRange(Long64_t emin, Long64_t emax)
Set the minimum and maximum entry number to be processed this information helps to optimize the numbe...
Bool_t IsAutoCreated() const
void SetAutoCreated(Bool_t val)
virtual Int_t DropBranch(TBranch *b, Bool_t subbranches=kFALSE)
Remove a branch to the list of branches to be stored in the cache this function is called by TBranch:...
virtual void StopLearningPhase()
This is the counterpart of StartLearningPhase() and can be used to stop the learning phase.
virtual void Print(Option_t *option="") const
Print cache statistics.
Class implementing or helping the various TTree cloning method.
Bool_t Exec()
Execute the cloning.
const char * GetWarning() const
void SetCacheSize(Int_t size)
Set the TFile cache size to be used.
Iterator on all the leaves in a TTree and its friend.
TObject * Next()
Go the next friend element.
TTree * fTree
tree being iterated
Option_t * GetOption() const
Returns the object option stored in the list.
TIterator & operator=(const TIterator &rhs)
Overridden assignment operator. Does NOT copy the 'cursor' location!
TIterator * fLeafIter
current leaf sub-iterator.
TIterator * fTreeIter
current tree sub-iterator.
Bool_t fDirection
iteration direction
Helper class to iterate over cluster of baskets.
Long64_t GetEstimatedClusterSize()
Estimate the cluster size.
Long64_t Previous()
Move on to the previous cluster and return the starting entry of this previous cluster.
Long64_t Next()
Move on to the next cluster and return the starting entry of this next cluster.
TClusterIterator(TTree *tree, Long64_t firstEntry)
Regular constructor.
Helper class to prevent infinite recursion in the usage of TTree Friends.
TFriendLock & operator=(const TFriendLock &)
Assignment operator.
TFriendLock(const TFriendLock &)
Copy constructor.
~TFriendLock()
Restore the state of tree the same as before we set the lock.
A TTree represents a columnar dataset.
virtual Int_t Fill()
Fill all branches.
virtual TFriendElement * AddFriend(const char *treename, const char *filename="")
Add a TFriendElement to the list of friends.
TBranchRef * fBranchRef
Branch supporting the TRefTable (if any)
virtual Int_t AddBranchToCache(const char *bname, Bool_t subbranches=kFALSE)
Add branch with name bname to the Tree cache.
virtual TBranch * FindBranch(const char *name)
Return the branch that correspond to the path 'branchname', which can include the name of the tree or...
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
static Int_t GetBranchStyle()
Static function returning the current branch style.
TList * fFriends
pointer to list of friend elements
UInt_t fFriendLockStatus
! Record which method is locking the friend recursion
virtual TLeaf * GetLeafImpl(const char *branchname, const char *leafname)
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of fri...
Long64_t fTotBytes
Total number of bytes in all branches before compression.
Int_t fMaxClusterRange
! Memory allocated for the cluster range.
virtual void Show(Long64_t entry=-1, Int_t lenmax=20)
Print values of all active leaves for entry.
TEventList * fEventList
! Pointer to event selection list (if one)
virtual Long64_t GetAutoSave() const
virtual Int_t StopCacheLearningPhase()
Stop the cache learning phase.
std::vector< std::pair< Long64_t, TBranch * > > fSortedBranches
! Branches to be processed in parallel when IMT is on, sorted by average task time
virtual void SetCircular(Long64_t maxEntries)
Enable/Disable circularity for this tree.
Long64_t fSavedBytes
Number of autosaved bytes.
virtual TClusterIterator GetClusterIterator(Long64_t firstentry)
Return an iterator over the cluster of baskets starting at firstentry.
virtual void ResetBranchAddress(TBranch *)
Tell all of our branches to set their addresses to zero.
char GetNewlineValue(std::istream &inputStream)
Determine which newline this file is using.
virtual Int_t CheckBranchAddressType(TBranch *branch, TClass *ptrClass, EDataType datatype, Bool_t ptr)
Check whether or not the address described by the last 3 parameters matches the content of the branch...
TIOFeatures fIOFeatures
IO features to define for newly-written baskets and branches.
virtual Long64_t GetEntryNumberWithIndex(Long64_t major, Long64_t minor=0) const
Return entry number corresponding to major and minor number.
Long64_t fDebugMin
! First entry number to debug
virtual Long64_t SetEntries(Long64_t n=-1)
Change number of entries in the tree.
virtual TObjArray * GetListOfLeaves()
Bool_t fCacheDoClusterPrefetch
! true if cache is prefetching whole clusters
virtual TBranch * BranchOld(const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=1)
Create a new TTree BranchObject.
virtual TBranch * BranchRef()
Build the optional branch supporting the TRefTable.
TFile * GetCurrentFile() const
Return pointer to the current file.
TList * fAliases
List of aliases for expressions based on the tree branches.
virtual TTree * CopyTree(const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Copy a tree with selection.
virtual Int_t FlushBaskets(Bool_t create_cluster=true) const
Write to disk all the basket that have not yet been individually written and create an event cluster ...
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)
Fit a projected item(s) from a tree.
Int_t SetCacheSizeAux(Bool_t autocache=kTRUE, Long64_t cacheSize=0)
Set the size of the file cache and create it if possible.
Long64_t * fClusterRangeEnd
[fNClusterRange] Last entry of a cluster range.
std::atomic< Long64_t > fIMTZipBytes
! Zip bytes for the IMT flush baskets.
void UseCurrentStyle()
Replace current attributes by current style.
TVirtualTreePlayer * GetPlayer()
Load the TTreePlayer (if not already done).
virtual Long64_t ReadStream(std::istream &inputStream, const char *branchDescriptor="", char delimiter=' ')
Create or simply read branches from an input stream.
virtual void SetDebug(Int_t level=1, Long64_t min=0, Long64_t max=9999999)
Set the debug level and the debug range.
Int_t fScanField
Number of runs before prompting in Scan.
virtual ~TTree()
Destructor.
virtual TTree * GetFriend(const char *) const
Return a pointer to the TTree friend whose name or alias is 'friendname.
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly.
virtual Double_t GetMaximum(const char *columname)
Return maximum of column with name columname.
virtual Long64_t GetEntryNumberWithBestIndex(Long64_t major, Long64_t minor=0) const
Return entry number corresponding to major and minor number.
static void SetMaxTreeSize(Long64_t maxsize=100000000000LL)
Set the maximum size in bytes of a Tree file (static function).
virtual TBranch * BronchExec(const char *name, const char *classname, void *addobj, Bool_t isptrptr, Int_t bufsize, Int_t splitlevel)
Helper function implementing TTree::Bronch and TTree::Branch(const char *name, T &obj);.
virtual Int_t UnbinnedFit(const char *funcname, const char *varexp, const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Unbinned fit of one or more variable(s) from a tree.
Int_t fNClusterRange
Number of Cluster range in addition to the one defined by 'AutoFlush'.
virtual void PrintCacheStats(Option_t *option="") const
Print statistics about the TreeCache for this tree.
virtual Int_t BuildIndex(const char *majorname, const char *minorname="0")
Build a Tree Index (default is TTreeIndex).
TVirtualTreePlayer * fPlayer
! Pointer to current Tree player
virtual void SetMakeClass(Int_t make)
Set all the branches in this TTree to be in decomposed object mode (also known as MakeClass mode).
TObjArray fBranches
List of Branches.
TDirectory * GetDirectory() const
TTreeCache * GetReadCache(TFile *file) const
Find and return the TTreeCache registered with the file and which may contain branches for us.
Bool_t fCacheUserSet
! true if the cache setting was explicitly given by user
Long64_t fEntries
Number of entries.
virtual TFile * ChangeFile(TFile *file)
Called by TTree::Fill() when file has reached its maximum fgMaxTreeSize.
virtual Bool_t GetBranchStatus(const char *branchname) const
Return status of branch with name branchname.
virtual TEntryList * GetEntryList()
Returns the entry list assigned to this tree.
virtual void SetWeight(Double_t w=1, Option_t *option="")
Set tree weight.
void InitializeBranchLists(bool checkLeafCount)
Divides the top-level branches into two vectors: (i) branches to be processed sequentially and (ii) b...
Long64_t * fClusterSize
[fNClusterRange] Number of entries in each cluster for a given range.
Long64_t fFlushedBytes
Number of auto-flushed bytes.
virtual void SetPerfStats(TVirtualPerfStats *perf)
Set perf stats.
std::atomic< Long64_t > fIMTTotBytes
! Total bytes for the IMT flush baskets
virtual void SetCacheLearnEntries(Int_t n=10)
Interface to TTreeCache to set the number of entries for the learning phase.
TEntryList * fEntryList
! Pointer to event selection list (if one)
virtual TVirtualIndex * GetTreeIndex() const
virtual Long64_t Merge(TCollection *list, Option_t *option="")
Merge the trees in the TList into this tree.
virtual void SetMaxVirtualSize(Long64_t size=0)
virtual void DropBaskets()
Remove some baskets from memory.
virtual void SetAutoSave(Long64_t autos=-300000000)
This function may be called at the start of a program to change the default value for fAutoSave (and ...
Long64_t fMaxEntryLoop
Maximum number of entries to process.
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
virtual Long64_t CopyEntries(TTree *tree, Long64_t nentries=-1, Option_t *option="")
Copy nentries from given tree to this tree.
void SortBranchesByTime()
Sorts top-level branches by the last average task time recorded per branch.
virtual TBranchRef * GetBranchRef() const
virtual Long64_t Process(const char *filename, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Process this tree executing the TSelector code in the specified filename.
virtual TBranch * BranchImpRef(const char *branchname, const char *classname, TClass *ptrClass, void *addobj, Int_t bufsize, Int_t splitlevel)
Same as TTree::Branch but automatic detection of the class name.
virtual void SetEventList(TEventList *list)
This function transfroms the given TEventList into a TEntryList The new TEntryList is owned by the TT...
void MoveReadCache(TFile *src, TDirectory *dir)
Move a cache from a file to the current file in dir.
Long64_t fAutoFlush
Auto-flush tree when fAutoFlush entries written or -fAutoFlush (compressed) bytes produced.
Int_t fUpdate
Update frequency for EntryLoop.
virtual void ResetAfterMerge(TFileMergeInfo *)
Resets the state of this TTree after a merge (keep the customization but forget the data).
virtual void CopyAddresses(TTree *, Bool_t undo=kFALSE)
Set branch addresses of passed tree equal to ours.
@ kSplitCollectionOfPointers
virtual Long64_t GetEntries() const
virtual void SetEstimate(Long64_t nentries=1000000)
Set number of entries to estimate variable limits.
virtual TIterator * GetIteratorOnAllLeaves(Bool_t dir=kIterForward)
Creates a new iterator that will go through all the leaves on the tree itself and its friend.
Int_t fTimerInterval
Timer interval in milliseconds.
Int_t fDebug
! Debug level
virtual Long64_t AutoSave(Option_t *option="")
AutoSave tree header every fAutoSave bytes.
virtual Long64_t GetEntryNumber(Long64_t entry) const
Return entry number corresponding to entry.
virtual TTree * CloneTree(Long64_t nentries=-1, Option_t *option="")
Create a clone of this tree and copy nentries.
Int_t fFileNumber
! current file number (if file extensions)
virtual TLeaf * GetLeaf(const char *branchname, const char *leafname)
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of fri...
virtual Long64_t GetZipBytes() const
TObjArray fLeaves
Direct pointers to individual branch leaves.
virtual void Reset(Option_t *option="")
Reset baskets, buffers and entries count in all branches and leaves.
virtual void Print(Option_t *option="") const
Print a summary of the tree contents.
virtual void KeepCircular()
Keep a maximum of fMaxEntries in memory.
virtual void DirectoryAutoAdd(TDirectory *)
Called by TKey and TObject::Clone to automatically add us to a directory when we are read from a file...
Long64_t GetCacheAutoSize(Bool_t withDefault=kFALSE) const
Used for automatic sizing of the cache.
virtual Bool_t SetAlias(const char *aliasName, const char *aliasFormula)
Set a tree variable alias.
Long64_t fMaxVirtualSize
Maximum total size of buffers kept in memory.
virtual Long64_t GetTotBytes() const
virtual void SetObject(const char *name, const char *title)
Change the name and title of this tree.
TVirtualPerfStats * fPerfStats
! pointer to the current perf stats object
Double_t fWeight
Tree weight (see TTree::SetWeight)
std::vector< TBranch * > fSeqBranches
! Branches to be processed sequentially when IMT is on
Long64_t fDebugMax
! Last entry number to debug
Int_t fDefaultEntryOffsetLen
Initial Length of fEntryOffset table in the basket buffers.
TTree()
Default constructor and I/O constructor.
Long64_t fAutoSave
Autosave tree when fAutoSave entries written or -fAutoSave (compressed) bytes produced.
TBranch * Branch(const char *name, T *obj, Int_t bufsize=32000, Int_t splitlevel=99)
Add a new branch, and infer the data type from the type of obj being passed.
virtual void SetDefaultEntryOffsetLen(Int_t newdefault, Bool_t updateExisting=kFALSE)
Update the default value for the branch's fEntryOffsetLen.
std::atomic< UInt_t > fAllocationCount
indicates basket should be resized to exact memory usage, but causes significant
virtual Int_t GetEntryWithIndex(Int_t major, Int_t minor=0)
Read entry corresponding to major and minor number.
static TTree * MergeTrees(TList *list, Option_t *option="")
Static function merging the trees in the TList into a new tree.
virtual Long64_t GetReadEntry() const
virtual TObjArray * GetListOfBranches()
virtual void SetParallelUnzip(Bool_t opt=kTRUE, Float_t RelSize=-1)
Enable or disable parallel unzipping of Tree buffers.
Long64_t fZipBytes
Total number of bytes in all branches after compression.
virtual void RecursiveRemove(TObject *obj)
Make sure that obj (which is being deleted or will soon be) is no longer referenced by this TTree.
virtual TTree * GetTree() const
TBuffer * fTransientBuffer
! Pointer to the current transient buffer.
Bool_t fIMTEnabled
! true if implicit multi-threading is enabled for this tree
virtual void SetEntryList(TEntryList *list, Option_t *opt="")
Set an EntryList.
virtual Int_t DropBranchFromCache(const char *bname, Bool_t subbranches=kFALSE)
Remove the branch with name 'bname' from the Tree cache.
virtual void AddZipBytes(Int_t zip)
virtual Long64_t LoadTree(Long64_t entry)
Set current entry.
virtual Long64_t ReadFile(const char *filename, const char *branchDescriptor="", char delimiter=' ')
Create or simply read branches from filename.
virtual const char * GetAlias(const char *aliasName) const
Returns the expanded value of the alias. Search in the friends if any.
ROOT::TIOFeatures SetIOFeatures(const ROOT::TIOFeatures &)
Provide the end-user with the ability to enable/disable various experimental IO features for this TTr...
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
virtual TBasket * CreateBasket(TBranch *)
Create a basket for this tree and given branch.
TList * fUserInfo
pointer to a list of user objects associated to this Tree
virtual Double_t GetMinimum(const char *columname)
Return minimum of column with name columname.
virtual void RemoveFriend(TTree *)
Remove a friend from the list of friends.
virtual Long64_t GetEntriesFast() const
virtual TList * GetUserInfo()
Return a pointer to the list containing user objects associated to this tree.
Long64_t fChainOffset
! Offset of 1st entry of this Tree in a TChain
@ kOnlyFlushAtCluster
If set, the branch's buffers will grow until an event cluster boundary is hit, guaranteeing a basket ...
@ kEntriesReshuffled
If set, signals that this TTree is the output of the processing of another TTree, and the entries are...
virtual Long64_t GetEntriesFriend() const
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of fri...
virtual TSQLResult * Query(const char *varexp="", const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Loop over entries and return a TSQLResult object containing entries following selection.
virtual TBranch * Bronch(const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=99)
Create a new TTree BranchElement.
virtual void SetBasketSize(const char *bname, Int_t buffsize=16000)
Set a branch's basket size.
static void SetBranchStyle(Int_t style=1)
Set the current branch style.
void ImportClusterRanges(TTree *fromtree)
Appends the cluster range information stored in 'fromtree' to this tree, including the value of fAuto...
Long64_t fEstimate
Number of entries to estimate histogram limits.
Int_t FlushBasketsImpl() const
Internal implementation of the FlushBaskets algorithm.
virtual Long64_t LoadTreeFriend(Long64_t entry, TTree *T)
Load entry on behalf of our master tree, we may use an index.
TVirtualIndex * fTreeIndex
Pointer to the tree Index (if any)
virtual void Browse(TBrowser *)
Browse content of the TTree.
virtual Int_t GetTreeNumber() const
TObject * fNotify
! Object to be notified when loading a Tree
virtual TBranch * BranchImp(const char *branchname, const char *classname, TClass *ptrClass, void *addobj, Int_t bufsize, Int_t splitlevel)
Same as TTree::Branch() with added check that addobj matches className.
Long64_t fCacheSize
! Maximum size of file buffers
TList * fClones
! List of cloned trees which share our addresses
std::atomic< Long64_t > fTotalBuffers
! Total number of bytes in branch buffers
Bool_t fCacheDoAutoInit
! true if cache auto creation or resize check is needed
virtual Int_t MakeSelector(const char *selector=0, Option_t *option="")
Generate skeleton selector class for this tree.
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
virtual Int_t MakeClass(const char *classname=0, Option_t *option="")
Generate a skeleton analysis class for this tree.
virtual void SetTreeIndex(TVirtualIndex *index)
The current TreeIndex is replaced by the new index.
virtual void OptimizeBaskets(ULong64_t maxMemory=10000000, Float_t minComp=1.1, Option_t *option="")
This function may be called after having filled some entries in a Tree.
virtual Long64_t Project(const char *hname, const char *varexp, const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Make a projection of a tree using selections.
virtual Int_t SetCacheEntryRange(Long64_t first, Long64_t last)
interface to TTreeCache to set the cache entry range
static Long64_t GetMaxTreeSize()
Static function which returns the tree file size limit in bytes.
Int_t SetBranchAddressImp(TBranch *branch, void *addr, TBranch **ptr)
Change branch address, dealing with clone trees properly.
Long64_t fMaxEntries
Maximum number of entries in case of circular buffers.
virtual void DropBuffers(Int_t nbytes)
Drop branch buffers to accommodate nbytes below MaxVirtualsize.
virtual void SetName(const char *name)
Change the name of this tree.
virtual void Delete(Option_t *option="")
Delete this tree from memory or/and disk.
virtual TList * GetListOfFriends() const
virtual void Refresh()
Refresh contents of this tree and its branches from the current status on disk.
virtual void SetAutoFlush(Long64_t autof=-30000000)
This function may be called at the start of a program to change the default value for fAutoFlush.
static Long64_t fgMaxTreeSize
Maximum size of a file containing a Tree.
Long64_t fReadEntry
! Number of the entry being processed
TArrayD fIndexValues
Sorted index values.
void MarkEventCluster()
Mark the previous event as being at the end of the event cluster.
virtual Int_t MakeCode(const char *filename=0)
Generate a skeleton function for this tree.
UInt_t fNEntriesSinceSorting
! Number of entries processed since the last re-sorting of branches
virtual Int_t MakeProxy(const char *classname, const char *macrofilename=0, const char *cutfilename=0, const char *option=0, Int_t maxUnrolling=3)
Generate a skeleton analysis class for this Tree using TBranchProxy.
virtual void SetFileNumber(Int_t number=0)
Set fFileNumber to number.
virtual TLeaf * FindLeaf(const char *name)
Find leaf..
virtual void StartViewer()
Start the TTreeViewer on this tree.
Int_t GetMakeClass() const
TDirectory * fDirectory
! Pointer to directory holding this tree
@ kNeedEnableDecomposedObj
@ kMatchConversionCollection
@ kMissingCompiledCollectionProxy
static Int_t fgBranchStyle
Old/New branch style.
virtual void ResetBranchAddresses()
Tell all of our branches to drop their current objects and allocate new ones.
Int_t fNfill
! Local for EntryLoop
TArrayI fIndex
Index of sorted values.
virtual Int_t SetCacheSize(Long64_t cachesize=-1)
Set maximum size of the file cache .
void AddClone(TTree *)
Add a cloned tree to our list of trees to be notified whenever we change our branch addresses or when...
virtual void SetBranchStatus(const char *bname, Bool_t status=1, UInt_t *found=0)
Set branch status to Process or DoNotProcess.
TBuffer * GetTransientBuffer(Int_t size)
Returns the transient buffer currently used by this TTree for reading/writing baskets.
ROOT::TIOFeatures GetIOFeatures() const
Returns the current set of IO settings.
virtual const char * GetFriendAlias(TTree *) const
If the 'tree' is a friend, this method returns its alias name.
virtual Bool_t Notify()
Function called when loading a new class library.
Bool_t MemoryFull(Int_t nbytes)
Check if adding nbytes to memory we are still below MaxVirtualsize.
Int_t fPacketSize
! Number of entries in one packet for parallel root
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=0, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
virtual TBranch * BranchImpArr(const char *branchname, EDataType datatype, std::size_t N, void *addobj, Int_t bufsize, Int_t splitlevel)
virtual Long64_t Scan(const char *varexp="", const char *selection="", Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Loop over tree entries and print entries passing selection.
Bool_t fIMTFlush
! True if we are doing a multithreaded flush.
virtual void AddTotBytes(Int_t tot)
Int_t fMakeClass
! not zero when processing code generated by MakeClass
virtual Int_t LoadBaskets(Long64_t maxmemory=2000000000)
Read in memory all baskets from all branches up to the limit of maxmemory bytes.
static constexpr Long64_t kMaxEntries
TPrincipal * Principal(const char *varexp="", const char *selection="", Option_t *option="np", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Interface to the Principal Components Analysis class.
virtual Long64_t GetAutoFlush() const
virtual EDataType GetType() const =0
virtual TClass * GetValueClass() const =0
virtual Bool_t HasPointers() const =0
Abstract interface for Tree Index.
virtual void Append(const TVirtualIndex *, Bool_t delaySort=kFALSE)=0
virtual const char * GetMajorName() const =0
virtual Long64_t GetEntryNumberWithIndex(Long64_t major, Long64_t minor) const =0
virtual Long64_t GetEntryNumberFriend(const TTree *)=0
virtual const char * GetMinorName() const =0
virtual void SetTree(const TTree *T)=0
virtual Long64_t GetN() const =0
virtual Long64_t GetEntryNumberWithBestIndex(Long64_t major, Long64_t minor) const =0
virtual Bool_t IsValidFor(const TTree *parent)=0
Provides the interface for the PROOF internal performance measurement and event tracing.
Abstract base class defining the interface for the plugins that implement Draw, Scan,...
virtual Int_t MakeProxy(const char *classname, const char *macrofilename=0, const char *cutfilename=0, const char *option=0, Int_t maxUnrolling=3)=0
virtual Long64_t Scan(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
virtual void UpdateFormulaLeaves()=0
virtual Long64_t DrawSelect(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
virtual Int_t MakeCode(const char *filename)=0
virtual Int_t UnbinnedFit(const char *formula, const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
virtual Long64_t GetEntries(const char *)=0
virtual TSQLResult * Query(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
virtual TPrincipal * Principal(const char *varexp="", const char *selection="", Option_t *option="np", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)=0
virtual void StartViewer(Int_t ww, Int_t wh)=0
virtual Int_t MakeReader(const char *classname, Option_t *option)=0
virtual TVirtualIndex * BuildIndex(const TTree *T, const char *majorname, const char *minorname)=0
virtual TTree * CopyTree(const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)=0
virtual Long64_t Process(const char *filename, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)=0
virtual void SetEstimate(Long64_t n)=0
static TVirtualTreePlayer * TreePlayer(TTree *obj)
Static function returning a pointer to a Tree player.
virtual Int_t MakeClass(const char *classname, const char *option)=0
virtual Int_t Fit(const char *formula, const char *varexp, const char *selection, Option_t *option, Option_t *goption, Long64_t nentries, Long64_t firstentry)=0
constexpr std::array< decltype(std::declval< F >()(std::declval< int >())), N > make(F f)
Bool_t IsImplicitMTEnabled()
Returns true if the implicit multi-threading in ROOT is enabled.
void ToHumanReadableSize(value_type bytes, Bool_t si, Double_t *coeff, const char **units)
Return the size expressed in 'human readable' format.
EFromHumanReadableSize FromHumanReadableSize(std::string_view str, T &value)
Convert strings like the following into byte counts 5MB, 5 MB, 5M, 3.7GB, 123b, 456kB,...
static constexpr double s
Short_t Max(Short_t a, Short_t b)
Short_t Min(Short_t a, Short_t b)
Long64_t BinarySearch(Long64_t n, const T *array, T value)
@ kUseGlobal
Use the global compression algorithm.
@ kInherit
Some objects use this value to denote that the compression algorithm should be inherited from the par...
@ kUseCompiledDefault
Use the compile-time default setting.