349 #include "TClassEdit.h"
410 #include "ROOT/TThreadExecutor.hxx"
447 case kchar:
return 0;
452 case kBits:
return 0;
474 fMethodBit = methodbit;
476 fPrevious = fTree->fFriendLockStatus & fMethodBit;
477 fTree->fFriendLockStatus |= fMethodBit;
488 fMethodBit(tfl.fMethodBit),
489 fPrevious(tfl.fPrevious)
513 fTree->fFriendLockStatus &= ~(fMethodBit &
kBitMask);
528 if ( fTree->GetAutoFlush() <= 0 ) {
530 fStartEntry = firstEntry;
531 }
else if (fTree->fNClusterRange) {
537 fClusterRange =
TMath::BinarySearch(fTree->fNClusterRange, fTree->fClusterRangeEnd, firstEntry - 1) + 1;
541 if (fClusterRange == 0) {
543 entryInRange = firstEntry;
545 pedestal = fTree->fClusterRangeEnd[fClusterRange-1] + 1;
546 entryInRange = firstEntry - pedestal;
549 if (fClusterRange == fTree->fNClusterRange) {
550 autoflush = fTree->fAutoFlush;
552 autoflush = fTree->fClusterSize[fClusterRange];
554 if (autoflush == 0) {
555 autoflush = GetEstimatedClusterSize();
557 fStartEntry = pedestal + entryInRange - entryInRange%autoflush;
559 fStartEntry = firstEntry - firstEntry%fTree->GetAutoFlush();
561 fNextEntry = fStartEntry;
571 Long64_t zipBytes = fTree->GetZipBytes();
573 return fTree->GetEntries() - 1;
576 Long64_t cacheSize = fTree->GetCacheSize();
577 if (cacheSize == 0) {
579 TFile *file = fTree->GetCurrentFile();
588 clusterEstimate = fTree->GetEntries() * cacheSize / zipBytes;
589 if (clusterEstimate == 0)
592 return clusterEstimate;
602 fStartEntry = fNextEntry;
603 if ( fTree->GetAutoFlush() <= 0 ) {
605 Long64_t clusterEstimate = GetEstimatedClusterSize();
606 fNextEntry = fStartEntry + clusterEstimate;
608 if (fClusterRange == fTree->fNClusterRange) {
611 fNextEntry += fTree->GetAutoFlush();
613 if (fStartEntry > fTree->fClusterRangeEnd[fClusterRange]) {
616 if (fClusterRange == fTree->fNClusterRange) {
619 fNextEntry += fTree->GetAutoFlush();
621 Long64_t clusterSize = fTree->fClusterSize[fClusterRange];
622 if (clusterSize == 0) {
623 clusterSize = GetEstimatedClusterSize();
625 fNextEntry += clusterSize;
626 if (fNextEntry > fTree->fClusterRangeEnd[fClusterRange]) {
630 fNextEntry = fTree->fClusterRangeEnd[fClusterRange] + 1;
635 if (fNextEntry > fTree->GetEntries()) {
636 fNextEntry = fTree->GetEntries();
820 if (strlen(title) > 2) {
821 if (title[0] ==
'/') {
822 Branch(title+1,32000,splitlevel);
948 Error(
"AddBranchToCache",
"Could not load a tree");
957 Error(
"AddBranchToCache",
"No tree is available. Branch was not added to the cache");
963 Error(
"AddBranchToCache",
"No file is available. Branch was not added to the cache");
968 Error(
"AddBranchToCache",
"No cache is available, branch not added");
987 Error(
"AddBranchToCache",
"Could not load a tree");
995 Error(
"AddBranchToCache",
"Error adding branch");
1000 Error(
"AddBranchToCache",
"No tree is available. Branch was not added to the cache");
1006 Error(
"AddBranchToCache",
"No file is available. Branch was not added to the cache");
1011 Error(
"AddBranchToCache",
"No cache is available, branch not added");
1031 Error(
"DropBranchFromCache",
"Could not load a tree");
1040 Error(
"DropBranchFromCache",
"No tree is available. Branch was not dropped from the cache");
1046 Error(
"DropBranchFromCache",
"No file is available. Branch was not dropped from the cache");
1051 Error(
"DropBranchFromCache",
"No cache is available, branch not dropped");
1070 Error(
"DropBranchFromCache",
"Could not load a tree");
1078 Error(
"DropBranchFromCache",
"Error dropping branch");
1083 Error(
"DropBranchFromCache",
"No tree is available. Branch was not dropped from the cache");
1089 Error(
"DropBranchFromCache",
"No file is available. Branch was not dropped from the cache");
1094 Error(
"DropBranchFromCache",
"No cache is available, branch not dropped");
1203 Warning(
"AddFriend",
"FriendElement %s in file %s has less entries %lld than its parent Tree: %lld", treename, filename, t->
GetEntries(),
fEntries);
1206 Warning(
"AddFriend",
"Cannot add FriendElement %s in file %s", treename, filename);
1231 Warning(
"AddFriend",
"FriendElement %s in file %s has less entries %lld than its parent tree: %lld", treename, file->
GetName(), t->
GetEntries(),
fEntries);
1234 Warning(
"AddFriend",
"unknown tree '%s' in file '%s'", treename, file->
GetName());
1258 Warning(
"AddFriend",
"FriendElement '%s' in file '%s' has less entries %lld than its parent tree: %lld",
1353 if (opt.
Contains(
"flushbaskets")) {
1354 if (
gDebug > 0)
Info(
"AutoSave",
"calling FlushBaskets \n");
1366 if (nbytes && key) {
1387 const char* writeStlWithoutProxyMsg =
"The class requested (%s) for the branch \"%s\""
1388 " is an instance of an stl collection and does not have a compiled CollectionProxy."
1389 " Please generate the dictionary for this collection (%s) to avoid to write corrupted data.";
1403 Error(
"Branch", writeStlWithoutProxyMsg,
1407 return Branch(branchname, classname, (
void*) addobj, bufsize, splitlevel);
1410 void** addr = (
void**) addobj;
1414 if (ptrClass && claim) {
1421 Error(
"Branch",
"The class requested (%s) for \"%s\" is different from the type of the pointer passed (%s)",
1424 }
else if (actualClass && (claim != actualClass) && !actualClass->
InheritsFrom(claim)) {
1429 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s",
1435 Error(
"Branch", writeStlWithoutProxyMsg,
1439 return Branch(branchname, classname, (
void*) addobj, bufsize, splitlevel);
1449 Error(
"Branch",
"The pointer specified for %s is not of a class known to ROOT", branchname);
1453 void** addr = (
void**) addobj;
1454 if (addr && *addr) {
1457 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",
1458 branchname, ptrClass->
GetName());
1459 actualClass = ptrClass;
1460 }
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
1461 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());
1465 actualClass = ptrClass;
1468 Error(
"Branch", writeStlWithoutProxyMsg,
1472 return Branch(branchname, actualClass->
GetName(), (
void*) addobj, bufsize, splitlevel);
1484 Error(
"Branch", writeStlWithoutProxyMsg,
1487 }
else if (claim == 0) {
1488 Error(
"Branch",
"The pointer specified for %s is not of a class known to ROOT and %s is not a known class", branchname, classname);
1495 Error(
"Branch",
"Reference interface requires a valid object (for branch: %s)!", branchname);
1499 if (ptrClass && claim) {
1506 Error(
"Branch",
"The class requested (%s) for \"%s\" is different from the type of the object passed (%s)",
1509 }
else if (actualClass && (claim != actualClass) && !actualClass->
InheritsFrom(claim)) {
1514 Error(
"Branch",
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s",
1520 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",
1521 branchname, ptrClass->
GetName());
1522 actualClass = ptrClass;
1523 }
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
1524 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());
1528 Error(
"Branch", writeStlWithoutProxyMsg,
1543 Error(
"Branch",
"The pointer specified for %s is not of a class or type known to ROOT", branchname);
1546 return Branch(branchname,addobj,varname.
Data(),bufsize);
1552 Error(
"Branch",
"Reference interface requires a valid object (for branch: %s)!", branchname);
1557 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",
1558 branchname, ptrClass->
GetName());
1559 actualClass = ptrClass;
1560 }
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
1561 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());
1565 Error(
"Branch", writeStlWithoutProxyMsg,
1668 Error(
"Branch",
"Cannot call this constructor for a TClonesArray");
1671 Int_t nch = strlen(name);
1674 while ((obj = next())) {
1682 Branch(col, bufsize, splitlevel - 1, branchname);
1684 if (nch && (name[nch-1] ==
'_')) {
1693 if (splitlevel > 99) {
1719 char* curname =
new char[1000];
1721 while ((obj = next())) {
1722 snprintf(curname,1000,
"%s/%s", foldername, obj->GetName());
1724 Branch(curname, bufsize, splitlevel - 1);
1727 for (
Int_t i = 0; i < 1000; ++i) {
1728 if (curname[i] == 0) {
1731 if (curname[i] ==
'/') {
1738 strlcat(curname, occur,1000);
1806 TBranch* branch =
new TBranch(
this, name, address, leaflist, bufsize);
1842 return Bronch(name, classname, addobj, bufsize, splitlevel);
1844 if (splitlevel < 0) {
1847 return BranchOld(name, classname, addobj, bufsize, splitlevel);
1896 Error(
"BranchOld",
"Cannot find class: '%s'", classname);
1901 Fatal(
"BranchOld",
"The requested class ('%s') does not inherit from TObject.\n"
1902 "\tfgBranchStyle is set to zero requesting by default to use BranchOld.\n"
1903 "\tIf this is intentional use Bronch instead of Branch or BranchOld.", classname);
1905 Fatal(
"BranchOld",
"The requested class ('%s') does not inherit from TObject.\n"
1906 "\tYou can not use BranchOld to store objects of this type.",classname);
1917 const char* rdname = 0;
1918 const char* dname = 0;
1920 char** apointer = (
char**) addobj;
1930 Int_t lenName = strlen(name);
1932 if (name[lenName-1] ==
'.') {
1971 if (!strcmp(dname,
"fBits")) {
1974 if (!strcmp(dname,
"fUniqueID")) {
1984 branchname = rdname;
1988 branchname.
Form(
"%s%s", name, &rdname[1]);
1990 branchname.
Form(
"%s%s", name, &rdname[0]);
1996 char* pointer = ((
char*) obj) + offset;
2005 char* cpointer = (
char*) pointer;
2006 char** ppointer = (
char**) cpointer;
2008 if (splitlevel != 2) {
2010 branch1 =
new TBranchClones(branch,branchname, pointer, bufsize);
2015 blist->
Add(branch1);
2023 blist->
Add(branch1);
2040 blist->
Add(branch1);
2054 aindex.Remove(rdot+1);
2055 aindex.Append(index);
2061 if (!strcmp(rdi->
GetName(), index)) {
2064 if (!strcmp(rdi->
GetName(), aindex)) {
2076 leaflist.
Form(
"%s[%s]/%c", &rdname[0], index, vcode);
2078 Error(
"BranchOld",
"Cannot create branch for rdname: %s code: %d", branchname.
Data(), code);
2085 leaflist.
Form(
"%s/%s", dname,
"C");
2098 branch1 =
new TBranch(branch, bname, *((
void**) pointer), leaflist, bufsize);
2102 blist->
Add(branch1);
2109 leaflist.
Form(
"%s/%c", rdname, vcode);
2111 Error(
"BranchOld",
"Cannot create branch for rdname: %s code: %d", branchname.
Data(), code);
2114 branch1 =
new TBranch(branch, branchname, pointer, leaflist, bufsize);
2116 blist->
Add(branch1);
2125 Warning(
"BranchOld",
"Cannot process member: '%s'", rdname);
2234 Error(
"Bronch",
"Cannot find class:%s", classname);
2245 objptr = (
char*)addr;
2247 objptr = *((
char**) addr);
2253 Error(
"Bronch",
"Pointer to TClonesArray is null");
2257 Error(
"Bronch",
"TClonesArray with no class defined in branch: %s", name);
2261 Error(
"Bronch",
"TClonesArray with no dictionary defined in branch: %s", name);
2265 if (splitlevel > 0) {
2266 if (hasCustomStreamer)
2267 Warning(
"Bronch",
"Using split mode on a class: %s with a custom Streamer", clones->
GetClass()->
GetName());
2282 if (!inklass && (collProxy->
GetType() == 0)) {
2283 Error(
"Bronch",
"%s with no class defined in branch: %s", classname, name);
2288 if ((stl != ROOT::kSTLmap) && (stl != ROOT::kSTLmultimap)) {
2290 Error(
"Bronch",
"Container with no dictionary defined in branch: %s", name);
2294 Warning(
"Bronch",
"Using split mode on a class: %s with a custom Streamer", inklass->
GetName());
2305 branch =
new TBranchSTL(
this, name, collProxy, bufsize, splitlevel );
2307 branch =
new TBranchElement(
this, name, collProxy, bufsize, splitlevel);
2319 Error(
"Bronch",
"Cannot find dictionary for class: %s", classname);
2325 hasCustomStreamer =
kTRUE;
2328 if (splitlevel < 0 || ((splitlevel == 0) && hasCustomStreamer && cl->
IsTObject())) {
2359 objptr = (
char*) cl->
New();
2367 if ((splitlevel > 0) && !cl->
CanSplit()) {
2368 if (splitlevel != 99) {
2369 Warning(
"Bronch",
"%s cannot be split, resetting splitlevel to 0", cl->
GetName());
2383 Error(
"Bronch",
"Cannot build the StreamerInfo for class: %s", cl->
GetName());
2394 char* dot = (
char*) strchr(name,
'.');
2395 Int_t nch = strlen(name);
2397 if (nch && (name[nch-1] ==
'.')) {
2406 if (splitlevel > 0) {
2432 char* pointer = (
char*) (objptr + element->GetOffset());
2439 TClass* clbase = element->GetClassPointer();
2456 bname.
Form(
"%s%s", name, element->GetFullName());
2473 bname.
Form(
"%s.%s", name, element->GetFullName());
2479 bname.
Form(
"%s", element->GetFullName());
2483 element->GetClass()->GetCollectionProxy() &&
2484 element->GetClass()->GetCollectionProxy()->HasPointers() )
2486 TBranchSTL* brSTL =
new TBranchSTL( branch, bname, element->GetClass()->GetCollectionProxy(), bufsize, splitlevel-1, sinfo,
id );
2639 char* fname =
new char[2000];
2642 for (
Int_t i = 0; i < 10; ++i) {
2650 strlcpy(fname, file->
GetName(),2000);
2653 char* cunder = strrchr(fname,
'_');
2656 const char* cdot = strrchr(file->
GetName(),
'.');
2658 strlcat(fname, cdot,2000);
2663 strlcat(fname, fcount,2000);
2666 char* cdot = strrchr(fname,
'.');
2669 strlcat(fname, strrchr(file->
GetName(),
'.'),2000);
2673 strlcat(fname, fcount,2000);
2680 Warning(
"ChangeFile",
"file %s already exist, trying with %d underscores", fname, nus+1);
2685 Error(
"Fill",
"Failed to open new file %s, continuing as a memory tree.",fname);
2687 Printf(
"Fill: Switching to new file: %s", fname);
2710 while ((branch = (
TBranch*)nextb())) {
2719 if (newfile) newfile->
Append(obj);
2755 TClass* expectedClass = 0;
2761 if (expectedClass && datatype ==
kOther_t && ptrClass == 0) {
2767 Error(
"SetBranchAddress",
"Unable to determine the type given for the address for \"%s\". "
2768 "The class expected (%s) refers to an stl collection and do not have a compiled CollectionProxy. "
2769 "Please generate the dictionary for this class (%s)",
2776 Error(
"SetBranchAddress",
"Unable to determine the type given for the address for \"%s\". "
2777 "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."
2778 "Please generate the dictionary for this class (%s)",
2781 Error(
"SetBranchAddress",
"Unable to determine the type given for the address for \"%s\". "
2782 "This is probably due to a missing dictionary, the original data class for this branch is %s.", branch->
GetName(), expectedClass->
GetName());
2786 if (expectedClass && ptrClass && (branch->
GetMother() == branch)) {
2789 Error(
"SetBranchAddress",
"The address for \"%s\" should be the address of a pointer!", branch->
GetName());
2809 if( expectedClass && ptrClass &&
2810 expectedClass != ptrClass &&
2818 Info(
"SetBranchAddress",
"Matching STL collection (at least according to the SchemaRuleSet when "
2819 "reading a %s into a %s",expectedClass->
GetName(),ptrClass->
GetName());
2826 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());
2837 }
else if (expectedClass && ptrClass && !expectedClass->
InheritsFrom(ptrClass)) {
2859 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());
2869 Error(
"SetBranchAddress",
"The pointer type given \"%s\" (%d) does not correspond to the type needed \"%s\" (%d) by the branch: %s",
2876 if (expectedClass) {
2877 Error(
"SetBranchAddress",
"The pointer type given \"%s\" (%d) does not correspond to the type needed \"%s\" by the branch: %s",
2891 if (rdm->GetThisOffset() == 0) {
2895 if (etype == expectedType) {
2906 if (dm->GetOffset() == 0) {
2910 if (etype == expectedType) {
2922 if (len <= ptrClass->
Size()) {
2926 Error(
"SetBranchAddress",
"The pointer type given \"%s\" does not correspond to the type needed \"%s\" (%d) by the branch: %s",
2932 Error(
"SetBranchAddress", writeStlWithoutProxyMsg,
3042 for (
Int_t i = 0; i < nb; ++i) {
3052 if (thistree !=
this) {
3077 for (
Int_t lndx = 0; lndx < nleaves; ++lndx) {
3083 if (branch && (newcomp > -1)) {
3091 for (
Long64_t i = 0; i < nb; ++i) {
3102 for (
Int_t j = 0; j < nb1; ++j) {
3116 for (
Int_t k = 0; k < nb2; ++k) {
3144 if (nentries != 0) {
3145 if (fastClone && (nentries < 0)) {
3146 if ( newtree->
CopyEntries(
this, -1, option ) < 0 ) {
3148 Error(
"CloneTTree",
"TTree has not been cloned\n");
3171 for (
Int_t i = 0; i < nbranches; ++i) {
3207 Warning(
"CopyAddresses",
"Could not find branch named '%s' in tree named '%s'", branch->
GetName(), tree->
GetName());
3215 for (
Int_t i = 0; i < ntleaves; ++i) {
3253 Warning(
"CopyAddresses",
"Could not find branch named '%s' in tree named '%s'", branch->
GetName(), tree->
GetName());
3280 switch (onIndexError) {
3304 switch (onIndexError) {
3328 }
else if ( onIndexError == kDrop ) {
3385 onIndexError = kKeep;
3386 }
else if (opt.
Contains(
"buildindex")) {
3387 onIndexError = kBuild;
3388 }
else if (opt.
Contains(
"dropindex")) {
3389 onIndexError = kDrop;
3391 onIndexError = kBuild;
3394 Int_t cacheSize = -1;
3397 Ssiz_t cacheSizeEnd = opt.
Index(
" ",cacheSizeLoc+10) - (cacheSizeLoc+10);
3398 TSubString cacheSizeStr( opt(cacheSizeLoc+10,cacheSizeEnd) );
3401 Warning(
"CopyEntries",
"The cachesize option can not be parsed: %s. The default size will be used.",cacheSizeStr.
String().
Data());
3404 const char *munit =
nullptr;
3407 Warning(
"CopyEntries",
"The cachesize option is too large: %s (%g%s max). The default size will be used.",cacheSizeStr.
String().
Data(),
m,munit);
3410 if (
gDebug > 0 && cacheSize != -1)
Info(
"CopyEntries",
"Using Cache size: %d\n",cacheSize);
3415 nentries = treeEntries;
3416 }
else if (nentries > treeEntries) {
3417 nentries = treeEntries;
3420 if (fastClone && (nentries < 0 || nentries == tree->
GetEntriesFast())) {
3428 withIndex = R__HandleIndex( onIndexError,
this, tree );
3439 if (cloner.IsValid()) {
3441 if (cacheSize != -1) cloner.SetCacheSize(cacheSize);
3445 Warning(
"CopyEntries",
"%s",cloner.GetWarning());
3450 if (cloner.NeedConversion()) {
3453 for (
Long64_t ii = 0; ii < tentries; ii++) {
3454 if (localtree->
GetEntry(ii) <= 0) {
3463 Warning(
"CopyEntries",
"%s",cloner.GetWarning());
3480 nentries = treeEntries;
3481 }
else if (nentries > treeEntries) {
3482 nentries = treeEntries;
3484 Int_t treenumber = -1;
3491 withIndex = R__HandleIndex( onIndexError,
this, tree );
3498 nbytes += this->
Fill();
3575 if (file && !strcmp(option,
"all")) {
3577 Error(
"Delete",
"File : %s is not writable, cannot delete Tree:%s", file->
GetName(),
GetName());
3594 Int_t nbytes,objlen,keylen;
3595 while ((leaf = (
TLeaf*)next())) {
3598 for (
Int_t i=0;i<nbaskets;i++) {
3602 if (!branchFile)
continue;
3604 if (nbytes <= 0)
continue;
3605 branchFile->
MakeFree(pos,pos+nbytes-1);
3619 if (dirsav) dirsav->
cd();
3620 if (
gDebug)
Info(
"TTree::Delete",
"Deleting Tree: %s: %d baskets deleted. Total space freed = %d bytes\n",
GetName(),nbask,ntot);
3654 while((b = (
TBranch*) next())) {
4305 for (
Int_t i = 0; i < nb; ++i) {
4319 for (
Int_t i = 0; i < nleaves; ++i) {
4323 for (
Int_t j = 0; j < nbaskets - 1; ++j) {
4406 for (
Int_t i = 0; i < nb; ++i) {
4415 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d, entry=%lld\n"
4416 " This error is symptomatic of a Tree created as a memory-resident Tree\n"
4417 " Instead of doing:\n"
4418 " TTree *T = new TTree(...)\n"
4419 " TFile *f = new TFile(...)\n"
4421 " TFile *f = new TFile(...)\n"
4422 " TTree *T = new TTree(...)",
4450 if (
gDebug > 0)
Info(
"TTree::Fill",
" - A: %d %lld %lld %lld %lld %lld %lld \n",
4459 if ((fAutoFlush<0 && zipBytes > -
fAutoFlush) ||
4460 (fAutoSave <0 && zipBytes > -
fAutoSave ) ||
4477 if (zipBytes != 0) {
4479 }
else if (totBytes != 0) {
4541 if (list==0 || branchname == 0 || branchname[0] ==
'\0')
return 0;
4545 UInt_t brlen = strlen(branchname);
4547 for(
Int_t index = 0; index < nbranches; ++index) {
4551 UInt_t len = strlen(name);
4552 if (len && name[len-1]==
']') {
4553 const char *dim = strchr(name,
'[');
4558 if (brlen == len && strncmp(branchname,name,len)==0) {
4562 if ((brlen >= len) && (branchname[len] ==
'.')
4563 && strncmp(name, branchname, len) == 0) {
4570 if (next)
return next;
4572 const char *dot = strchr((
char*)branchname,
'.');
4574 if (len==(
size_t)(dot-branchname) &&
4575 strncmp(branchname,name,dot-branchname)==0 ) {
4603 if (branch)
return branch;
4607 if (branch)
return branch;
4611 while ((branch = (
TBranch*) next())) {
4614 return nestedbranch;
4631 const char *subbranch = strstr(branchname, fe->
GetName());
4632 if (subbranch != branchname) {
4636 subbranch += strlen(fe->
GetName());
4637 if (*subbranch !=
'.') {
4643 std::ostringstream
name;
4645 name << t->
GetName() <<
"." << subbranch;
4670 char* subsearchname = (
char*) strstr(searchname,
GetName());
4671 if (subsearchname != searchname) {
4674 if (subsearchname) {
4675 subsearchname += strlen(
GetName());
4676 if (*subsearchname !=
'.') {
4680 if (subsearchname[0]==0) {
4694 while ((leaf = (
TLeaf*) next())) {
4697 if (dim >= 0) leafname.
Remove(dim);
4699 if (leafname == searchname) {
4702 if (subsearchname && leafname == subsearchname) {
4708 dim = leaftitle.
First(
'[');
4709 if (dim >= 0) leaftitle.
Remove(dim);
4711 if (leaftitle == searchname) {
4714 if (subsearchname && leaftitle == subsearchname) {
4720 dim = longname.
First(
'[');
4721 if (dim>=0) longname.
Remove(dim);
4722 if (longname == searchname) {
4725 if (subsearchname && longname == subsearchname) {
4729 dim = longtitle.
First(
'[');
4730 if (dim>=0) longtitle.
Remove(dim);
4731 if (longtitle == searchname) {
4734 if (subsearchname && longtitle == subsearchname) {
4742 if (strstr(searchname,
".") && !strcmp(searchname, branch->
GetName())) {
4745 if (subsearchname && strstr(subsearchname,
".") && !strcmp(subsearchname, branch->
GetName())) {
4763 subsearchname = (
char*) strstr(searchname, fe->
GetName());
4764 if (subsearchname != searchname) {
4767 if (subsearchname) {
4768 subsearchname += strlen(fe->
GetName());
4769 if (*subsearchname !=
'.') {
4775 if (subsearchname) {
4776 leafname.
Form(
"%s.%s",t->
GetName(),subsearchname);
4778 leafname = searchname;
4820 return fPlayer->
Fit(funcname, varexp, selection, option, goption, nentries, firstentry);
4826 struct BoolRAIIToggle {
4829 BoolRAIIToggle(
Bool_t &val) : m_val(val) { m_val =
true; }
4830 ~BoolRAIIToggle() { m_val =
false; }
4878 std::atomic<Int_t> nerrpar(0);
4879 std::atomic<Int_t> nbpar(0);
4880 std::atomic<Int_t> pos(0);
4882 auto mapFunction = [&]() {
4888 Int_t j = pos.fetch_add(1);
4894 std::stringstream ss;
4895 ss << std::this_thread::get_id();
4896 Info(
"FlushBaskets",
"[IMT] Thread %s", ss.str().c_str());
4897 Info(
"FlushBaskets",
"[IMT] Running task for branch #%d: %s", j, branch->GetName());
4900 Int_t nbtask = branch->FlushBaskets();
4902 if (nbtask < 0) { nerrpar++; }
4903 else { nbpar += nbtask; }
4906 ROOT::TThreadExecutor pool;
4907 pool.Foreach(mapFunction, nb);
4913 return nerrpar ? -1 : nbpar.load();
4916 for (
Int_t j = 0; j < nb; j++) {
4959 const char* alias = t->
GetAlias(aliasName);
4963 const char* subAliasName = strstr(aliasName, fe->
GetName());
4964 if (subAliasName && (subAliasName[strlen(fe->
GetName())] ==
'.')) {
4980 if (name == 0)
return 0;
4990 for (
Int_t i = 0; i < nb; i++) {
4997 for (
Int_t j = 0; j < nb1; j++) {
5004 for (
Int_t k = 0; k < nb2; k++) {
5016 for (
Int_t i = 0; i < nleaves; i++) {
5050 char* subname = (
char*) strstr(name, fe->
GetName());
5051 if (subname != name) {
5056 if (*subname !=
'.') {
5105 if (!(stcs =
gSystem->
Getenv(
"ROOT_TTREECACHE_SIZE")) || !*stcs) {
5111 if (cacheFactor < 0.0) {
5119 else if (fAutoFlush == 0) cacheSize = 0;
5122 if (cacheSize >= (INT_MAX / 4)) {
5123 cacheSize = INT_MAX / 4;
5126 if (cacheSize < 0) {
5130 if (cacheSize == 0 && withDefault) {
5132 else if (fAutoFlush == 0) cacheSize = 0;
5327 if (entry < 0 || entry >=
fEntries)
return 0;
5338 auto seqprocessing = [&]() {
5340 for (i=0;i<nbranches;i++) {
5342 nb = branch->
GetEntry(entry, getall);
5354 nb = branch->GetEntry(entry, getall);
5358 if (nb < 0)
return nb;
5364 std::atomic<Int_t> pos(0);
5365 std::atomic<Int_t> nbpar(0);
5367 auto mapFunction = [&]() {
5373 Int_t j = pos.fetch_add(1);
5379 std::stringstream ss;
5380 ss << std::this_thread::get_id();
5381 Info(
"GetEntry",
"[IMT] Thread %s", ss.str().c_str());
5382 Info(
"GetEntry",
"[IMT] Running task for branch #%d: %s", j, branch->GetName());
5385 std::chrono::time_point<std::chrono::system_clock> start, end;
5387 start = std::chrono::system_clock::now();
5388 nbtask = branch->GetEntry(entry, getall);
5389 end = std::chrono::system_clock::now();
5391 Long64_t tasktime = (
Long64_t)std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
5394 if (nbtask < 0) errnb = nbtask;
5395 else nbpar += nbtask;
5398 ROOT::TThreadExecutor pool;
5399 pool.Foreach(mapFunction, nbranches - fSeqBranches.size());
5421 if (nb < 0)
return nb;
5438 if (nb < 0)
return nb;
5464 if (checkLeafCount) {
5465 for (
Int_t i = 0; i < nbranches; i++) {
5469 auto countBranch = leafCount->GetBranch();
5483 for (
Int_t i = 0; i < nbranches; i++) {
5495 [](std::pair<Long64_t,TBranch*>
a, std::pair<Long64_t,TBranch*>
b) {
5496 return a.first >
b.first;
5515 [](std::pair<Long64_t,TBranch*>
a, std::pair<Long64_t,TBranch*>
b) {
5516 return a.first >
b.first;
5620 for (i = 0; i < nbranches; ++i) {
5623 if (nb < 0)
return nb;
5635 if (serial <0)
return -nbytes;
5637 if (nb < 0)
return nb;
5662 if (strcmp(friendname,fe->
GetName())==0
5706 if ((tree ==
this) || (tree ==
GetTree())) {
5769 leaf = branch->
GetLeaf(leafname);
5776 while ((leaf = (
TLeaf*)nextl())) {
5777 if (strcmp(leaf->
GetName(),leafname))
continue;
5779 UInt_t nbch = strlen(branchname);
5781 const char* brname = br->
GetName();
5783 if (strncmp(brname,branchname,nbch)) {
5785 const char *mothername = mother->
GetName();
5786 UInt_t motherlen = strlen(mothername);
5787 if (nbch > motherlen && strncmp(mothername,branchname,motherlen)==0 && (mothername[motherlen-1]==
'.' || branchname[motherlen]==
'.')) {
5789 if (strncmp(brname,branchname+motherlen+1,nbch-motherlen-1)) {
5805 if ((strlen(brname) > nbch) && (brname[nbch] !=
'.') && (brname[nbch] !=
'[')) {
5819 if (leaf)
return leaf;
5830 char *subname = (
char*)strstr(leafname,fe->
GetName());
5831 if (subname != leafname)
continue;
5834 if (*subname !=
'.')
continue;
5836 strippedArg += subname;
5837 leaf = t->
GetLeaf(branchname,subname);
5838 if (leaf)
return leaf;
5855 if (leafname == 0)
return 0;
5874 if (aname == 0)
return 0;
5881 char*
slash = (
char*) strrchr(aname,
'/');
5886 nbch = slash - aname;
5913 if (entryNumber < 0)
break;
5952 if (entryNumber < 0)
break;
5984 if (pe && pe->
GetTree() !=
this) pe = 0;
5985 if (create && !pe) {
5988 if (pe && pe->
GetTree() !=
this) pe = 0;
6053 if (autoflush > 0 && autosave > 0) {
6065 for (
Int_t i = 0; i < nb; ++i) {
6072 for(
Int_t i = 0, j = 0; j < oldsize; ++j) {
6103 Int_t nimported = 0;
6104 while ((leaf=(
TLeaf*)next())) {
6154 if (friendTree == 0) {
6159 friendHasEntry =
kTRUE;
6166 friendHasEntry =
kTRUE;
6169 if (oldNumber != newNumber) {
6295 Warning(
"MakeCode",
"MakeCode is obsolete. Use MakeClass or MakeSelector instead");
6421 Int_t TTree::MakeProxy(
const char* proxyClassname,
const char* macrofilename,
const char* cutfilename,
const char* option,
Int_t maxUnrolling)
6425 return fPlayer->
MakeProxy(proxyClassname,macrofilename,cutfilename,option,maxUnrolling);
6478 if(opt.
EqualTo(
"=legacy", TString::ECaseCompare::kIgnoreCase)) {
6511 while ((obj=next())) {
6515 if (nentries == 0)
continue;
6518 if (!newtree)
continue;
6558 while ((tree = (
TTree*)next())) {
6559 if (tree==
this)
continue;
6567 if (nentries == 0)
continue;
6590 const char *options = info ? info->
fOptions.
Data() :
"";
6611 while ((tree = (
TTree*)next())) {
6612 if (tree==
this)
continue;
6641 if (src == dst)
return;
6663 while ((leaf = (
TLeaf*) next())) {
6695 if (nleaves == 0 || treeSize == 0) {
6699 Double_t aveSize = treeSize/nleaves;
6703 Int_t i, oldMemsize,newMemsize,oldBaskets,newBaskets;
6704 i = oldMemsize = newMemsize = oldBaskets = newBaskets = 0;
6709 for (
Int_t pass =0;pass<2;pass++) {
6714 for (i=0;i<nleaves;i++) {
6718 Double_t idealFactor = totBytes/aveSize;
6722 sizeOfOneEntry = aveSize;
6727 oldMemsize += oldBsize;
6728 oldBaskets += 1+
Int_t(totBytes/oldBsize);
6731 newBaskets += 1+
Int_t(totBytes/oldBsize);
6735 if (bsize < 0) bsize = bmax;
6736 if (bsize > bmax) bsize = bmax;
6747 newBsize = newBsize - newBsize%512 + 512;
6749 if (newBsize < sizeOfOneEntry) newBsize = sizeOfOneEntry;
6750 if (newBsize < bmin) newBsize = bmin;
6751 if (newBsize > 10000000) newBsize = bmax;
6753 if (pDebug)
Info(
"OptimizeBaskets",
"Changing buffer size from %6d to %6d bytes for %s\n",oldBsize,newBsize,branch->
GetName());
6756 newMemsize += newBsize;
6760 newBaskets += 1+
Int_t(totBytes/newBsize);
6761 if (pass == 0)
continue;
6765 if (comp > 1 && comp < minComp) {
6766 if (pDebug)
Info(
"OptimizeBaskets",
"Disabling compression for branch : %s\n",branch->
GetName());
6772 if (memFactor > 100) memFactor = 100;
6773 Double_t bmin_new = bmin*memFactor;
6774 Double_t bmax_new = bmax*memFactor;
6775 static const UInt_t hardmax = 1*1024*1024*1024;
6782 static const UInt_t hardmin = 8;
6783 bmin = (bmin_new > hardmax) ? hardmax : ( bmin_new < hardmin ? hardmin : (
UInt_t)bmin_new );
6784 bmax = (bmax_new > hardmax) ? bmin : (
UInt_t)bmax_new;
6787 Info(
"OptimizeBaskets",
"oldMemsize = %d, newMemsize = %d\n",oldMemsize, newMemsize);
6788 Info(
"OptimizeBaskets",
"oldBaskets = %d, newBaskets = %d\n",oldBaskets, newBaskets);
6823 return fPlayer->
Principal(varexp, selection, option, nentries, firstentry);
6867 Printf(
"******************************************************************************");
6869 Printf(
"*Entries : %8lld : Total = %15lld bytes File Size = %10lld *",
fEntries, total, file);
6870 Printf(
"* : : Tree compression factor = %6.2f *", cx);
6871 Printf(
"******************************************************************************");
6873 if (strncmp(option,
"clusterRange",strlen(
"clusters"))==0) {
6874 Printf(
"%-16s %-16s %-16s %5s",
6875 "Cluster Range #",
"Entry Start",
"Last Entry",
"Size");
6880 Printf(
"%-16d %-16lld %-16lld %5lld",
6885 Printf(
"%-16d %-16lld %-16lld %5lld",
6894 if (strstr(option,
"toponly")) {
6897 for (l=0;l<nl;l++) {
6898 leaf = (
TLeaf *)const_cast<TTree*>(
this)->GetListOfLeaves()->At(l);
6900 if (strchr(br->
GetName(),
'.')) {
6908 for (l=0;l<nl;l++) {
6909 if (count[l] < 0)
continue;
6910 leaf = (
TLeaf *)const_cast<TTree*>(
this)->GetListOfLeaves()->At(l);
6917 if (strlen(option) && strchr(option,
'*')) reg = option;
6921 while ((br= (
TBranch*)next())) {
6933 if (!
fFriends || !strstr(option,
"all"))
return;
6939 if (t) t->
Print(option);
6959 if (tc) tc->
Print(option);
7083 var.
Form(
"%s>>%s", varexp, hname);
7086 opt.
Form(
"%sgoff", option);
7088 Long64_t nsel =
Draw(var, selection, opt, nentries, firstentry);
7099 return fPlayer->
Query(varexp, selection, option, nentries, firstentry);
7151 Error(
"ReadFile",
"Cannot open file: %s",filename);
7154 const char* ext = strrchr(filename,
'.');
7155 if(ext !=
NULL && ((strcmp(ext,
".csv") == 0) || (strcmp(ext,
".CSV") == 0)) && delimiter ==
' ') {
7158 return ReadStream(in, branchDescriptor, delimiter);
7167 Long_t inPos = inputStream.tellg();
7168 char newline =
'\n';
7172 if(!inputStream.good()) {
7173 Error(
"ReadStream",
"Error reading stream: no newline found.");
7176 if(c == newline)
break;
7182 inputStream.clear();
7183 inputStream.seekg(inPos);
7195 std::stringstream ss;
7196 std::istream *inTemp;
7197 Long_t inPos = inputStream.tellg();
7198 if (!inputStream.good()) {
7199 Error(
"ReadStream",
"Error reading stream");
7203 ss << std::cin.rdbuf();
7208 inTemp = &inputStream;
7210 std::istream& in = *inTemp;
7215 if (nbranches == 0) {
7216 char *bdname =
new char[4000];
7217 char *bd =
new char[100000];
7219 if (branchDescriptor) nch = strlen(branchDescriptor);
7223 in.getline(bd, 100000, newline);
7227 Error(
"ReadStream",
"Error reading stream");
7231 while( isspace(*cursor) && *cursor !=
'\n' && *cursor !=
'\0') {
7234 if (*cursor !=
'#' && *cursor !=
'\n' && *cursor !=
'\0') {
7241 strlcpy(bd,branchDescriptor,100000);
7246 void *address = &bd[90000];
7250 if(delimiter !=
' ') {
7252 if (strchr(bdcur,bdelim)==0 && strchr(bdcur,
':') != 0) {
7258 char *colon = strchr(bdcur,bdelim);
7259 if (colon) *colon = 0;
7260 strlcpy(bdname,bdcur,4000);
7261 char *
slash = strchr(bdname,
'/');
7267 desc.
Form(
"%s/%s",bdname,olddesc.Data());
7269 char *bracket = strchr(bdname,
'[');
7273 branch =
new TBranch(
this,bdname,address,desc.
Data(),32000);
7276 Warning(
"ReadStream",
"Illegal branch definition: %s",bdcur);
7291 Info(
"ReadStream",
"Will use branches:");
7292 for (
int i = 0 ; i < nbranches; ++i) {
7298 Info(
"ReadStream",
"Dumping read tokens, format:");
7299 Info(
"ReadStream",
"LLLLL:BBB:gfbe:GFBE:T");
7300 Info(
"ReadStream",
" L: line number");
7301 Info(
"ReadStream",
" B: branch number");
7302 Info(
"ReadStream",
" gfbe: good / fail / bad / eof of token");
7303 Info(
"ReadStream",
" GFBE: good / fail / bad / eof of file");
7304 Info(
"ReadStream",
" T: Token being read");
7311 const char sDelimBuf[2] = { delimiter, 0 };
7312 const char* sDelim = sDelimBuf;
7313 if (delimiter ==
' ') {
7318 if (newline ==
'\r' && in.peek() ==
'\n') {
7322 std::getline(in, line, newline);
7329 Info(
"ReadStream",
"Skipping empty line number %lld", nlines);
7333 if (sLine[0] ==
'#') {
7335 Info(
"ReadStream",
"Skipping comment line number %lld: '%s'",
7336 nlines, line.c_str());
7341 Info(
"ReadStream",
"Parsing line number %lld: '%s'",
7342 nlines, line.c_str());
7349 std::stringstream sToken;
7353 Int_t remainingLeafLen = 0;
7354 while (goodLine && iBranch < nbranches
7355 && sLine.
Tokenize(tok, pos, sDelim)) {
7357 if (tok.
IsNull() && delimiter ==
' ') {
7363 if (!remainingLeafLen) {
7368 if (!remainingLeafLen) {
7369 remainingLeafLen = leaf->
GetLen();
7373 remainingLeafLen = 1;
7383 if (remainingLeafLen) {
7391 sToken.seekp(0, std::ios_base::beg);
7392 sToken.str(leafData.
Data());
7393 sToken.seekg(0, std::ios_base::beg);
7396 Info(
"ReadStream",
"%5lld:%3d:%d%d%d%d:%d%d%d%d:%s",
7398 (
int)sToken.good(), (int)sToken.fail(),
7399 (int)sToken.bad(), (int)sToken.eof(),
7400 (int)in.good(), (int)in.fail(),
7401 (int)in.bad(), (int)in.eof(),
7402 sToken.str().c_str());
7409 "Buffer error while reading data for branch %s on line %lld",
7411 }
else if (!sToken.eof()) {
7412 if (sToken.fail()) {
7414 "Couldn't read formatted data in \"%s\" for branch %s on line %lld; ignoring line",
7418 std::string remainder;
7419 std::getline(sToken, remainder, newline);
7420 if (!remainder.empty()) {
7422 "Ignoring trailing \"%s\" while reading data for branch %s on line %lld",
7423 remainder.c_str(), branch->
GetName(), nlines);
7429 if (iBranch < nbranches) {
7431 "Read too few columns (%d < %d) in line %lld; ignoring line",
7432 iBranch, nbranches, nlines);
7434 }
else if (pos !=
kNPOS) {
7436 if (pos < sLine.
Length()) {
7438 "Ignoring trailing \"%s\" while reading line %lld",
7439 sLine.
Data() + pos - 1 ,
7514 for (
Int_t i = 0; i < nleaves; i++) {
7543 if (friend_t == oldFriend) {
7571 for (
Int_t i = 0; i < nb; ++i) {
7573 branch->
Reset(option);
7601 for (
Int_t i = 0; i < nb; ++i) {
7630 for (
Int_t i = 0; i < nbranches; ++i) {
7649 return fPlayer->
Scan(varexp, selection, option, nentries, firstentry);
7689 if (!aliasName || !aliasFormula) {
7692 if (!aliasName[0] || !aliasFormula[0]) {
7848 for (
Int_t i = 0; i < nleaves; i++) {
7859 Error(
"SetBasketSize",
"unknown branch -> '%s'", bname);
7875 Error(
"SetBranchAddress",
"unknown branch -> %s", bname);
7905 Error(
"SetBranchAddress",
"unknown branch -> %s", bname);
7936 const char *bname = branch->
GetName();
7937 while ((clone = (
TTree*) next())) {
7939 if (cloneBr && (cloneBr->
GetAddress() == oldAddr)) {
8024 TBranch *branch, *bcount, *bson;
8025 TLeaf *leaf, *leafcount;
8034 for (i=0;i<nleaves;i++) {
8038 if (strcmp(bname,
"*")) {
8041 if (strcmp(bname,branch->
GetName())
8042 && longname != bname
8055 if (nb==0 && strchr(bname,
'*')==0) {
8065 UInt_t foundInFriend = 0;
8076 char *subbranch = (
char*)strstr(bname,fe->
GetName());
8077 if (subbranch!=bname) subbranch = 0;
8079 subbranch += strlen(fe->
GetName());
8080 if ( *subbranch !=
'.' ) subbranch = 0;
8091 if (!nb && !foundInFriend) {
8094 if (strchr(bname,
'*') != 0)
8095 Error(
"SetBranchStatus",
"No branch name is matching wildcard -> %s", bname);
8097 Error(
"SetBranchStatus",
"unknown branch -> %s", bname);
8099 if (strchr(bname,
'*') != 0)
8100 Warning(
"SetBranchStatus",
"No branch name is matching wildcard -> %s", bname);
8102 Warning(
"SetBranchStatus",
"unknown branch -> %s", bname);
8107 if (found) *found = nb + foundInFriend;
8111 for (i = 0; i < nleaves; i++) {
8123 for (j=0;j<nbranches;j++) {
8125 if (!bson)
continue;
8193 if (cacheSize < 0) {
8197 if (cacheSize == 0) {
8199 }
else if (cacheSize < 0) {
8205 if (!file ||
GetTree() !=
this) {
8214 if (!autocache && cacheSize>0) {
8215 Warning(
"SetCacheSizeAux",
"A TTreeCache could not be created because the TTree has no file");
8250 if (cacheSize == 0) {
8272 Error(
"SetCacheSizeAux",
"Not setting up an automatically sized TTreeCache because of missing cache previously set");
8280 if (cacheSize == 0 || pf) {
8305 Error(
"SetCacheEntryRange",
"Could not load a tree");
8314 Error(
"SetCacheEntryRange",
"No tree is available. Could not set cache entry range");
8320 Error(
"SetCacheEntryRange",
"No file is available. Could not set cache entry range");
8325 Error(
"SetCacheEntryRange",
"No cache is available. Could not set entry range");
8364 if (maxEntries <= 0) {
8379 for (
Int_t i = 0; i < nb; i++) {
8412 if (newdefault < 10) {
8416 if (updateExisting) {
8419 while ( ( b = (
TBranch*)next() ) ) {
8461 while((b = (
TBranch*) next())) {
8494 while((b = (
TBranch*) next())){
8504 Warning(
"SetEntries",
"Tree branches have different numbers of entries, with %lld maximum.", nMax);
8556 char enlistname[100];
8561 fEntryList->SetTree(
this);
8563 for (
Int_t i=0; i<nsel; i++){
8565 fEntryList->Enter(entry);
8602 Warning(
"SetFileNumber",
"file number must be positive. Set to 0");
8618 for (
Int_t i = 0; i < nb; ++i) {
8776 Error(
"Show()",
"Cannot read entry %lld (entry does not exist)", entry);
8778 }
else if (ret == -1) {
8779 Error(
"Show()",
"Cannot read entry %lld (I/O error)", entry);
8784 Error(
"Show()",
"Cannot read entry %lld (I/O error)", entry);
8786 }
else if (ret == 0) {
8787 Error(
"Show()",
"Cannot read entry %lld (no data read)", entry);
8795 for (
Int_t i = 0; i < nleaves; i++) {
8824 printf(
" %-15s = ", leaf->
GetName());
8827 if (
l == (len - 1)) {
8832 if ((
l % ltype) == 0) {
8864 Error(
"StopCacheLearningPhase",
"Could not load a tree");
8873 Error(
"StopCacheLearningPhase",
"No tree is available. Could not stop cache learning phase");
8879 Error(
"StopCacheLearningPhase",
"No file is available. Could not stop cache learning phase");
8884 Error(
"StopCacheLearningPhase",
"No cache is available. Could not stop learning phase");
8897 for (
Int_t i = 0; i < nb; ++i) {
8903 for (
Int_t j=writeBasket,
n=0;j>=0 &&
n<nBaskets;--j) {
8960 Warning(
"Streamer",
"Old style index in this tree is deleted. Rebuild the index via TTree::BuildIndex");
8980 if (zipBytes != 0) {
8982 }
else if (totBytes != 0) {
9001 TNamed::Streamer(b);
9002 TAttLine::Streamer(b);
9003 TAttFill::Streamer(b);
9004 TAttMarker::Streamer(b);
9020 if (R__v > 2)
fIndex.Streamer(b);
9023 OldInfoList.Streamer(b);
9109 return fPlayer->
UnbinnedFit(funcname, varexp, selection, option, nentries, firstentry);
9156 return ((
const TTree*)
this)->Write(name, option, bufsize);
9186 , fDirection(iter.fDirection)
9218 if (!fTree)
return 0;
9224 TObjArray *list = fTree->GetListOfLeaves();
9225 if (!list)
return 0;
9227 if (!fLeafIter)
return 0;
9230 next = fLeafIter->Next();
9234 if (!list)
return next;
9236 if (!fTreeIter)
return 0;
9242 if (!nextTree)
return Next();
9245 if (!fLeafIter)
return 0;
9246 next = fLeafIter->Next();
9257 if (fLeafIter)
return fLeafIter->GetOption();
A zero length substring is legal.
TTree * fParentTree
! pointer to the parent TTree
void Add(TObject *obj, const char *name=0, Int_t check=-1)
Add object with name to browser.
virtual Int_t GetLen() const
Return the number of effective elements of this leaf.
Describe Streamer information for one class version.
virtual void UpdateAddress()
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
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 Int_t GetEntries() const
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
virtual Bool_t GetReapplyCut() const
Double_t fWeight
Tree weight (see TTree::SetWeight)
virtual const char * GetTitle() const
Returns title of object.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
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 Style_t GetLineStyle() const
Return the line style.
virtual Style_t GetFillStyle() const
Return the fill area style.
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Ssiz_t Last(char c) const
Find last occurrence of a character c.
virtual void AddTotBytes(Int_t tot)
TTreeCache * GetReadCache(TFile *file, Bool_t create=kFALSE)
Find and return the TTreeCache registered with the file and which may contain branches for us...
A TFolder object is a collection of objects and folders.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch after a Merge operation (drop data but keep customizations) TRefTable is cleared...
virtual TList * GetListOfClones()
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
virtual TTree * CopyTree(const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)=0
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=0, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
static TDataType * GetDataType(EDataType type)
Given a EDataType type, get the TDataType* that represents it.
Long64_t fDebugMin
! First entry number to debug
Principal Components Analysis (PCA)
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill Basket buffer.
virtual Long64_t GetAutoSave() const
Bool_t IsAutoCreated() const
virtual void Append(const TVirtualIndex *, Bool_t delaySort=kFALSE)=0
virtual void PrintValue(Int_t i=0) const
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
TString GetTypeName()
Get basic type of typedef, e,g.
virtual TTree * GetTree()
Return pointer to friend TTree.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket...
virtual void SetAddress(void *add)
Set address of this branch.
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 const char * GetFriendAlias(TTree *) const
If the 'tree' is a friend, this method returns its alias name.
Bool_t MemoryFull(Int_t nbytes)
Check if adding nbytes to memory we are still below MaxVirtualsize.
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 Int_t MakeCode(const char *filename=0)
Generate a skeleton function for this tree.
Abstract interface for Tree Index.
virtual TLeaf * GetLeaf(const char *name) const
Return pointer to the 1st Leaf named name in thisBranch.
virtual Int_t MakeReader(const char *classname, Option_t *option)=0
virtual const char * GetName() const
Return name of this collection.
virtual Int_t StopCacheLearningPhase()
Stop the cache learning phase.
virtual void SetBranchStatus(const char *bname, Bool_t status=1, UInt_t *found=0)
Set branch status to Process or DoNotProcess.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual TList * GetListOfKeys() const
virtual void IncrementTotalBuffers(Int_t nbytes)
virtual void Delete(Option_t *option="")
Delete this tree from memory or/and disk.
A Branch for the case of an object.
TObjArray * GetListOfBaskets()
static Int_t fgBranchStyle
Old/New branch style.
virtual void AddZipBytes(Int_t zip)
virtual void SetTree(const TTree *T)=0
virtual Int_t LoadBaskets(Long64_t maxmemory=2000000000)
Read in memory all baskets from all branches up to the limit of maxmemory bytes.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
virtual Int_t GetExpectedType(TClass *&clptr, EDataType &type)
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
static Long64_t GetMaxTreeSize()
Static function which returns the tree file size limit in bytes.
virtual void SetParallelUnzip(Bool_t opt=kTRUE, Float_t RelSize=-1)
Enable or disable parallel unzipping of Tree buffers.
virtual Int_t MakeCode(const char *filename)=0
Provides the interface for the PROOF internal performance measurement and event tracing.
Style_t GetHistLineStyle() const
A cache when reading files over the network.
virtual Bool_t Notify()
Function called when loading a new class library.
TTree()
Default constructor and I/O constructor.
void GetObject(const char *namecycle, T *&ptr)
virtual TClass * GetValueClass() const =0
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
virtual Long64_t GetReadEntry() const
All ROOT classes may have RTTI (run time type identification) support added.
TBuffer * fTransientBuffer
! Pointer to the current transient buffer.
virtual void Flush()
Synchronize a file's in-memory and on-disk states.
virtual void SetCacheRead(TFileCacheRead *cache, TObject *tree=0, ECacheAction action=kDisconnect)
Set a pointer to the read cache.
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.
TString & ReplaceAll(const TString &s1, const TString &s2)
R__EXTERN TStyle * gStyle
TList * fFriends
pointer to list of friend elements
void SetHistLineWidth(Width_t width=1)
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 Int_t Fill()
Fill all branches.
virtual TEntryList * GetEntryList()
Returns the entry list, set to this tree.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual TList * GetList() const
virtual void DropBaskets(Option_t *option="")
Loop on all branch baskets.
Long64_t GetCacheAutoSize(Bool_t withDefault=kFALSE) const
Used for automatic sizing of the cache.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
static void SetBranchStyle(Int_t style=1)
Set the current branch style.
A specialized TFileCacheRead object for a TTree.
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 GetEntriesFriend() const
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of fri...
static Int_t SetParallelUnzip(TTreeCacheUnzip::EParUnzipMode option=TTreeCacheUnzip::kEnable)
Static function that (de)activates multithreading unzipping.
static char DataTypeToChar(EDataType datatype)
Double_t Atof() const
Return floating-point value contained in string.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
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 GetTotBytes(Option_t *option="") const
Return total number of bytes in the branch (excluding current buffer) if option ="*" includes all sub...
virtual void Print(Option_t *option="") const
Print TBranch parameters.
Buffer base class used for serializing objects.
Regular expression class.
TDirectory * fDirectory
! Pointer to directory holding this tree
constexpr Float_t kNEntriesResortInv
Bool_t IsPersistent() const
Int_t fMakeClass
! not zero when processing code generated by MakeClass
virtual TBasket * CreateBasket(TBranch *)
Create a basket for this tree and given branch.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
virtual Int_t WriteTObject(const TObject *obj, const char *name=0, Option_t *="", Int_t=0)
See TDirectoryFile::WriteTObject for details.
void ForceWriteInfo(TFile *file, Bool_t force=kFALSE)
Recursively mark streamer infos for writing to a file.
virtual TPrincipal * Principal(const char *varexp="", const char *selection="", Option_t *option="np", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)=0
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 ...
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 Int_t ReadKeys(Bool_t=kTRUE)
virtual TTree * GetFriend(const char *) const
Return a pointer to the TTree friend whose name or alias is 'friendname.
virtual void SetAddress(void *addobj)
Point this branch at an object.
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 Long64_t GetEntryNumberWithBestIndex(Long64_t major, Long64_t minor) const =0
Short_t Min(Short_t a, Short_t b)
virtual void SetTargetClass(const char *name)
Set the name of the class of the in-memory object into which the data will loaded.
void ToLower()
Change string to lower-case.
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...
TDataType * GetDataType() const
virtual void PrintCacheStats(Option_t *option="") const
Print statistics about the TreeCache for this tree.
Bool_t IsaPointer() const
Return true if data member is a pointer.
R__EXTERN TVirtualMutex * gROOTMutex
virtual void Browse(TBrowser *)
Browse content of the TTree.
constexpr std::array< decltype(std::declval< F >)(std::declval< int >))), N > make(F f)
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual Long64_t GetZipBytes() const
TBranch * GetBranch() const
virtual Long64_t GetBasketSeek(Int_t basket) const
Return address of basket in the file.
virtual void StopLearningPhase()
This is the counterpart of StartLearningPhase() and can be used to stop the learning phase...
static void SetMaxTreeSize(Long64_t maxsize=100000000000LL)
Set the maximum size in bytes of a Tree file (static function).
virtual Long64_t GetEntryNumber(Long64_t entry) const
Return entry number corresponding to entry.
Int_t fScanField
Number of runs before prompting in Scan.
virtual Long64_t GetEND() const
virtual Int_t FlushBaskets() const
Write to disk all the basket that have not yet been individually written.
Int_t GetEntriesFast() const
virtual TTree * CloneTree(Long64_t nentries=-1, Option_t *option="")
Create a clone of this tree and copy nentries.
virtual TTree * CopyTree(const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Copy a tree with selection.
virtual TVirtualIndex * GetTreeIndex() const
virtual void KeepCircular()
Keep a maximum of fMaxEntries in memory.
TArrayD fIndexValues
Sorted index values.
Style_t GetHistFillStyle() const
void SetAutoCreated(Bool_t val)
TFile * GetCurrentFile() const
Return pointer to the current file.
virtual EDataType GetType() const =0
constexpr Int_t kNEntriesResort
virtual Long64_t GetEntries(const char *)=0
Long64_t fMaxEntryLoop
Maximum number of entries to process.
TVirtualTreePlayer * GetPlayer()
Load the TTreePlayer (if not already done).
virtual void SetMaxVirtualSize(Long64_t size=0)
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.
Streamer around an arbitrary STL like container, which implements basic container functionality...
void ToHumanReadableSize(value_type bytes, Bool_t si, Double_t *coeff, const char **units)
Return the size expressed in 'human readable' format.
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 TBranch::Ge...
virtual Int_t DeleteGlobal(void *obj)=0
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
virtual void SetupAddresses()
If the branch address is not set, we set all addresses starting with the top level parent branch...
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...
TIterator * MakeIterator(Bool_t dir=kIterForward) const
Returns an array iterator.
Iterator abstract base class.
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
virtual void Print(Option_t *option="") const
Print cache statistics.
void BypassStreamer(Bool_t bypass=kTRUE)
When the kBypassStreamer bit is set, the automatically generated Streamer can call directly TClass::W...
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Reset(Option_t *option="")
const char * GetArrayIndex() const
If the data member is pointer and has a valid array size in its comments GetArrayIndex returns a stri...
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
virtual void Refresh()
Refresh contents of this tree and its branches from the current status on disk.
if object in a list can be deleted
virtual void SetFileNumber(Int_t number=0)
Set fFileNumber to number.
virtual Double_t GetMinimum(const char *columname)
Return minimum of column with name columname.
virtual void DirectoryAutoAdd(TDirectory *)
Called by TKey and TObject::Clone to automatically add us to a directory when we are read from a file...
static Bool_t IsParallelUnzip()
Static function that tells wether the multithreading unzipping is activated.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
virtual void SetTree(TTree *tree)
virtual void SetDirectory(TDirectory *dir)
Add reference to directory dir. dir can be 0.
TList * GetListOfRealData() const
static void SetRefTable(TRefTable *table)
Static function setting the current TRefTable.
virtual Int_t GetN() const
Bool_t fIMTFlush
! True if we are doing a multithreaded flush.
virtual void StartViewer()
Start the TTreeViewer on this tree.
virtual Long64_t Merge(TCollection *list, Option_t *option="")
Merge the trees in the TList into this tree.
const char * Data() const
virtual void Print(Option_t *option="") const
Print a summary of the tree contents.
static TVirtualTreePlayer * TreePlayer(TTree *obj)
Static function returning a pointer to a Tree player.
virtual void SetBranchFolder()
virtual TKey * GetKey(const char *, Short_t=9999) const
TFileCacheRead * GetCacheRead(TObject *tree=0) const
Return a pointer to the current read cache.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual Int_t GetEntryWithIndex(Int_t major, Int_t minor=0)
Read entry corresponding to major and minor number.
TList * fAliases
List of aliases for expressions based on the tree branches.
EFromHumanReadableSize FromHumanReadableSize(std::string_view str, T &value)
Convert strings like the following into byte counts 5MB, 5 MB, 5M, 3.7GB, 123b, 456kB, 3.7GiB, 5MiB with some amount of forgiveness baked into the parsing.
virtual Long64_t DrawSelect(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
virtual TObjArray * GetListOfBranches()
Helper class to iterate over cluster of baskets.
TVirtualTreePlayer * fPlayer
! Pointer to current Tree player
Fill Area Attributes class.
void ImportClusterRanges(TTree *fromtree)
Appends the cluster range information stored in 'fromtree' to this tree, including the value of fAuto...
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 TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
Int_t GetCompressionLevel() const
virtual const char * GetTreeName() const
virtual Long64_t CopyEntries(TTree *tree, Long64_t nentries=-1, Option_t *option="")
Copy nentries from given tree to this tree.
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly.
void SetHistFillColor(Color_t color=1)
Int_t fNfill
! Local for EntryLoop
virtual void SetObject(const char *name, const char *title)
Change the name and title of this tree.
virtual void ReadValue(std::istream &, Char_t= ' ')
The TNamed class is the base class for all named ROOT classes.
virtual Bool_t Notify()
This method must be overridden to handle object notification.
virtual Long64_t LoadTree(Long64_t entry)
Set current entry.
Bool_t fCacheUserSet
! true if the cache setting was explicitly given by user
virtual void SetTreeIndex(TVirtualIndex *index)
The current TreeIndex is replaced by the new index.
Int_t fMaxClusterRange
! Memory allocated for the cluster range.
static Int_t GetBranchStyle()
Static function returning the current branch style.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
virtual Int_t BuildIndex(const char *majorname, const char *minorname="0")
Build a Tree Index (default is TTreeIndex).
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.
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 TBranch * BranchOld(const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=1)
Create a new TTree BranchObject.
TClass * GetActualClass(const void *object) const
Return a pointer the the real class of the object.
virtual void Show(Long64_t entry=-1, Int_t lenmax=20)
Print values of all active leaves for entry.
virtual Int_t GetBufferSize() const
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
TBranchRef * fBranchRef
Branch supporting the TRefTable (if any)
virtual Int_t MakeClass(const char *classname=0, Option_t *option="")
Generate a skeleton analysis class for this tree.
virtual const char * Getenv(const char *env)
Get environment variable.
virtual TClusterIterator GetClusterIterator(Long64_t firstentry)
Return an iterator over the cluster of baskets starting at firstentry.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
const Int_t kDoNotProcess
UInt_t fFriendLockStatus
! Record which method is locking the friend recursion
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
virtual Int_t MakeClass(const char *classname, const char *option)=0
Int_t fTimerInterval
Timer interval in milliseconds.
Long64_t GetEntries() const
virtual TFriendElement * AddFriend(const char *treename, const char *filename="")
Add a TFriendElement to the list of friends.
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...
Bool_t IsWritable() const
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.
Long64_t fFlushedBytes
Number of auto-flushed bytes.
TObjArray * GetListOfBranches()
UInt_t fNEntriesSinceSorting
! Number of entries processed since the last re-sorting of branches
Specialization of TTreeCache for parallel Unzipping.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Delete(Option_t *option="")
Delete an object from the file.
virtual Double_t GetMaximum(const char *columname)
Return maximum of column with name columname.
void Set(Int_t n)
Set size of this array to n ints.
virtual void RemoveFriend(TTree *)
Remove a friend from the list of friends.
virtual void SetAddress(void *add=0)
virtual TList * GetUserInfo()
Return a pointer to the list containing user objects associated to this tree.
std::atomic< Long64_t > fIMTZipBytes
! Zip 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.
A branch containing and managing a TRefTable for TRef autoloading.
Long64_t fZipBytes
Total number of bytes in all branches after compression.
Long64_t fDebugMax
! Last entry number to debug
virtual Double_t GetValue(Int_t i=0) const
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.
virtual void SetEventList(TEventList *list)
This function transfroms the given TEventList into a TEntryList The new TEntryList is owned by the TT...
void Expand(Int_t newsize, Bool_t copy=kTRUE)
Expand (or shrink) the I/O buffer to newsize bytes.
void UseCurrentStyle()
Replace current attributes by current style.
A specialized string object used for TTree selections.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch.
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
Bool_t fCacheDoAutoInit
! true if cache auto creation or resize check is needed
virtual TFile * GetFile() const
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.
virtual Int_t GetMaximum() const
TObject * UncheckedAt(Int_t i) const
TObjArray fLeaves
Direct pointers to individual branch leaves.
Long64_t * fClusterRangeEnd
[fNClusterRange] Last entry of a cluster range.
virtual Long64_t GetTotBytes() const
virtual void SetLineColor(Color_t lcolor)
Set the line color.
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
Int_t GetBufferSize() const
Using a TBrowser one can browse all ROOT objects.
Int_t fNClusterRange
Number of Cluster range in addition to the one defined by 'AutoFlush'.
virtual Long64_t GetEntry(Int_t index) const
Return value of entry at index in the list.
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
virtual char * GetAddress() const
TEntryList * fEntryList
! Pointer to event selection list (if one)
void SetParentClass(TClass *clparent)
virtual Size_t GetMarkerSize() const
Return the marker size.
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...
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
Option_t * GetOption() const
Returns the object option stored in the list.
Color_t GetHistFillColor() const
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
virtual void SetEstimate(Long64_t nentries=1000000)
Set number of entries to estimate variable limits.
Width_t GetHistLineWidth() const
virtual void SetOffset(Int_t offset=0)
virtual Long64_t Process(const char *filename, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)=0
virtual void UpdateFormulaLeaves()=0
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:...
void SetHistFillStyle(Style_t styl=0)
TObjArray * GetElements() const
void SetCompressionSettings(Int_t settings=1)
Set compression settings.
R__EXTERN TSystem * gSystem
Long64_t fChainOffset
! Offset of 1st entry of this Tree in a TChain
~TFriendLock()
Restore the state of tree the same as before we set the lock.
Long64_t * fClusterSize
[fNClusterRange] Number of entries in each cluster for a given range.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
Bool_t EqualTo(const char *cs, ECaseCompare cmp=kExact) const
virtual void WriteStreamerInfo()
Write the list of TStreamerInfo as a single object in this file The class Streamer description for al...
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Basic data type descriptor (datatype information is obtained from CINT).
void TFriendElement__SetTree(TTree *tree, TList *frlist)
Set the fTree member for all friend elements.
TVirtualPerfStats * fPerfStats
! pointer to the current perf stats object
virtual Int_t GetTreeNumber() const
virtual TIterator * MakeIterator(Bool_t dir=kIterForward) const =0
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
TDirectory * GetDirectory() const
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...
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual Int_t ReadTObject(TObject *, const char *)
virtual TObject * Remove(TObject *obj)
Remove object from the list.
Long64_t fReadEntry
! Number of the entry being processed
virtual Bool_t HasPointers() const =0
virtual ~TTree()
Destructor.
virtual Color_t GetFillColor() const
Return the fill area color.
Collection abstract base class.
virtual const char * GetAlias(const char *aliasName) const
Returns the expanded value of the alias. Search in the friends if any.
TObject * GetObject() const
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
TBranch * GetMother() const
Get our top-level parent branch in the tree.
TList * fUserInfo
pointer to a list of user objects associated to this Tree
TObjArray fBranches
List of Branches.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t TestBit(UInt_t f) const
virtual Long64_t GetN() const =0
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 void MakeFree(Long64_t first, Long64_t last)
Mark unused bytes on the file.
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
Manages buffers for branches of a Tree.
virtual TBranchRef * GetBranchRef() const
A TEventList object is a list of selected events (entries) in a TTree.
virtual TLeaf * FindLeaf(const char *name)
Find leaf..
The TRealData class manages the effective list of all data members for a given class.
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
virtual Long64_t GetEntryNumberWithIndex(Long64_t major, Long64_t minor=0) const
Return entry number corresponding to major and minor number.
Bool_t CanIgnoreTObjectStreamer()
virtual const char * GetName() const
Returns name of object.
TArrayI fIndex
Index of sorted values.
TSubString Strip(EStripType s=kTrailing, char c= ' ') const
Return a substring of self stripped at beginning and/or end.
The ROOT global object gROOT contains a list of all defined classes.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
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...
Bool_t fIMTEnabled
! true if implicit multi-threading is enabled for this tree
Version_t GetClassVersion() const
virtual TObjLink * FirstLink() const
void SetName(const char *name)
virtual void ResetBranchAddress(TBranch *)
Tell all of our branches to set their addresses to zero.
Bool_t fDirection
iteration direction
virtual Color_t GetLineColor() const
Return the line color.
TEventList * fEventList
! Pointer to event selection list (if one)
virtual TBranch * Bronch(const char *name, const char *classname, void *addobj, Int_t bufsize=32000, Int_t splitlevel=99)
Create a new TTree BranchElement.
if object destructor must call RecursiveRemove()
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Long64_t fMaxEntries
Maximum number of entries in case of circular buffers.
void AddClone(TTree *)
Add a cloned tree to our list of trees to be notified whenever we change our branch addresses or when...
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
virtual void KeepCircular(Long64_t maxEntries)
keep a maximum of fMaxEntries in memory
virtual TLeaf * GetLeafCount() const
Each class (see TClass) has a linked list of its base class(es).
char GetNewlineValue(std::istream &inputStream)
Determine which newline this file is using.
A Branch for the case of an object.
virtual Int_t DropBranchFromCache(const char *bname, Bool_t subbranches=kFALSE)
Remove the branch with name 'bname' from the Tree cache.
void InitializeBranchLists(bool checkLeafCount)
Divides the top-level branches into two vectors: (i) branches to be processed sequentially and (ii) b...
Int_t GetCompressionSettings() const
Long64_t fAutoSave
Autosave tree when fAutoSave entries written or -fAutoSave (compressed) bytes produced.
#define R__LOCKGUARD2(mutex)
virtual void SaveSelf(Bool_t=kFALSE)
virtual void SetBasketSize(Int_t buffsize)
Set the basket size The function makes sure that the basket size is greater than fEntryOffsetlen.
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...
virtual void SetDebug(Int_t level=1, Long64_t min=0, Long64_t max=9999999)
Set the debug level and the debug range.
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.
static unsigned int total
static const Ssiz_t kNPOS
TString & Remove(Ssiz_t pos)
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
virtual Int_t GetBasketSize() const
virtual Long64_t ReadStream(std::istream &inputStream, const char *branchDescriptor="", char delimiter= ' ')
Create or simply read branches from an input stream.
virtual void DropBuffers(Int_t nbytes)
Drop branch buffers to accommodate nbytes below MaxVirtualsize.
virtual void SetMakeClass(Int_t make)
Set all the branches in this TTree to be in decomposed object mode (also known as MakeClass mode)...
virtual void SetWeight(Double_t w=1, Option_t *option="")
Set tree weight.
Long64_t Next()
Move on to the next cluster and return the starting entry of this next cluster.
virtual Int_t GetSize() const
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
virtual Long64_t LoadTreeFriend(Long64_t entry, TTree *T)
Load entry on behalf of our master tree, we may use an index.
virtual void SetEstimate(Long64_t n)=0
virtual Long64_t GetAutoFlush() const
Long64_t fMaxVirtualSize
Maximum total size of buffers kept in memory.
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
TCollection * GetListOfFolders() const
virtual void StartViewer(Int_t ww, Int_t wh)=0
virtual void SetEntryList(TEntryList *list, Option_t *opt="")
Set an EntryList.
TIterator & operator=(const TIterator &rhs)
Overridden assignment operator. Does NOT copy the 'cursor' location!
virtual void ResetAddress()
Reset the address of the branch.
virtual const char * GetName() const
Returns name of object.
virtual void Clear(Option_t *option="")
Clear entries in the TRefTable.
static TRefTable * GetRefTable()
Static function returning the current TRefTable.
void SetHistLineStyle(Style_t styl=0)
Long64_t fTotBytes
Total number of bytes in all branches before compression.
virtual void WaitFinishPrefetch()
virtual Int_t GetLenType() const
TClass * GetClass() const
std::vector< TBranch * > fSeqBranches
! Branches to be processed sequentially when IMT is on
Describe directory structure in memory.
virtual void SetPerfStats(TVirtualPerfStats *perf)
Set perf stats.
std::vector< std::pair< Long64_t, TBranch * > > fSortedBranches
! Branches to be processed in parallel when IMT is on, sorted by average task time ...
static void TBranch__SetTree(TTree *tree, TObjArray &branches)
Set the fTree member for all branches and sub branches.
Wrapper around a TObject so it can be stored in a TList.
void SortBranchesByTime()
Sorts top-level branches by the last average task time recorded per branch.
virtual Long64_t GetEntriesFast() const
unsigned long long ULong64_t
Long64_t fAutoFlush
Auto-flush tree when fAutoFlush entries written or -fAutoFlush (compressed) bytes produced...
virtual void ResetBranchAddresses()
Tell all of our branches to drop their current objects and allocate new ones.
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
A TRefTable maintains the association between a referenced object and the parent object supporting th...
Int_t fDefaultEntryOffsetLen
Initial Length of fEntryOffset table in the basket buffers.
const std::type_info * GetTypeInfo() const
virtual TTree * GetTree() const
void Browse(TBrowser *b)
Browse this collection (called by TBrowser).
Color_t GetHistLineColor() const
TObjArray * GetListOfLeaves()
Int_t GetEntries() const
Return the number of objects in array (i.e.
Long64_t fEstimate
Number of entries to estimate histogram limits.
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any. ...
static void SetUnzipRelBufferSize(Float_t relbufferSize)
static function: Sets the unzip relatibe buffer size
Helper class to prevent infinite recursion in the usage of TTree Friends.
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.
virtual Int_t SetBufferSize(Int_t buffersize)
Change the underlying buffer size of the cache.
virtual Int_t SetCacheSize(Long64_t cachesize=-1)
Set maximum size of the file cache .
Int_t fDebug
! Debug level
virtual Int_t UnbinnedFit(const char *formula, const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
Int_t SetCacheSizeAux(Bool_t autocache=kTRUE, Long64_t cacheSize=0)
Set the size of the file cache and create it if possible.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Int_t GetOffset() const
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
virtual void SetBasketSize(const char *bname, Int_t buffsize=16000)
Set a branch's basket size.
virtual TFile * GetFile()
Return pointer to TFile containing this friend TTree.
virtual TBranch * BranchRef()
Build the optional branch supporting the TRefTable.
virtual void ResetAfterMerge(TFileMergeInfo *)
Resets the state of this TTree after a merge (keep the customization but forget the data)...
virtual Bool_t SetAlias(const char *aliasName, const char *aliasFormula)
Set a tree variable alias.
Int_t fFileNumber
! current file number (if file extensions)
Mother of all ROOT objects.
virtual Long64_t ReadFile(const char *filename, const char *branchDescriptor="", char delimiter= ' ')
Create or simply read branches from filename.
Int_t fUpdate
Update frequency for EntryLoop.
A Branch handling STL collection of pointers (vectors, lists, queues, sets and multisets) while stori...
static void * ReAlloc(void *vp, size_t size)
Reallocate (i.e.
virtual Int_t Branch(TCollection *list, Int_t bufsize=32000, Int_t splitlevel=99, const char *name="")
Create one branch for each element in the collection.
TDirectory * fOutputDirectory
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
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 Long64_t Scan(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
virtual void SetFile(TFile *file=0)
Set file where this branch writes/reads its buffers.
Long64_t fEntries
Number of entries.
TList * fClones
! List of cloned trees which share our addresses
Int_t GetMaxBaskets() const
virtual void Refresh(TBranch *b)
Refresh this branch using new information in b This function is called by TTree::Refresh.
virtual Int_t MakeSelector(const char *selector=0, Option_t *option="")
Generate skeleton selector class for this tree.
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
An array of clone (identical) objects.
TBuffer * GetTransientBuffer(Int_t size)
Returns the transient buffer currently used by this TTree for reading/writing baskets.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual TDirectory * GetDirectory() const
Class implementing or helping the various TTree cloning method.
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
virtual Int_t DropBuffers()
Drop buffers of this basket if it is not the current basket.
ROOT::ESTLType IsSTLContainer()
Return which type (if any) of STL container the data member is.
Abstract base class defining the interface for the plugins that implement Draw, Scan, Process, MakeProxy, etc.
A Branch for the case of an array of clone objects.
virtual void * GetValuePointer() const
virtual void Add(TObject *obj)
#define R__unlikely(expr)
Bool_t IsImplicitMTEnabled()
Returns true if the implicit multi-threading in ROOT is enabled.
TClusterIterator(TTree *tree, Long64_t firstEntry)
Regular constructor.
virtual void RecursiveRemove(TObject *obj)
Remove object from this collection and recursively remove the object from all other objects (and coll...
Short_t Max(Short_t a, Short_t b)
virtual void Reset(Option_t *option="")
Reset a Branch.
A TFriendElement TF describes a TTree object TF in a file.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual Bool_t IsWritable() const
virtual const char * GetMinorName() const =0
Iterator on all the leaves in a TTree and its friend.
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 void RecursiveRemove(TObject *obj)
Make sure that obj (which is being deleted or will soon be) is no longer referenced by this TTree...
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
virtual Int_t LoadBaskets()
Baskets associated to this branch are forced to be in memory.
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
virtual void SetCircular(Long64_t maxEntries)
Enable/Disable circularity for this tree.
virtual void Reset(Option_t *option="")
Reset baskets, buffers and entries count in all branches and leaves.
virtual const char * GetMajorName() const =0
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Bool_t IsBasic() const
Return true if data member is a basic type, e.g. char, int, long...
std::atomic< Long64_t > fTotalBuffers
! Total number of bytes in branch buffers
TObject * fNotify
! Object to be notified when loading a Tree
virtual Int_t SetCacheEntryRange(Long64_t first, Long64_t last)
interface to TTreeCache to set the cache entry range
virtual Long64_t GetEntries() const
A TTree object has a header with a name and a title.
TVirtualIndex * fTreeIndex
Pointer to the tree Index (if any)
TFriendLock & operator=(const TFriendLock &)
Assignment operator.
Int_t SetBranchAddressImp(TBranch *branch, void *addr, TBranch **ptr)
Change branch address, dealing with clone trees properly.
TDataMember * GetDataMember() const
virtual TVirtualIndex * BuildIndex(const TTree *T, const char *majorname, const char *minorname)=0
virtual void SetDefaultEntryOffsetLen(Int_t newdefault, Bool_t updateExisting=kFALSE)
Update the default value for the branch's fEntryOffsetLen.
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
Int_t GetMakeClass() const
virtual TObject ** GetObjectRef(const TObject *obj) const =0
TObject * Next()
Go the next friend element.
virtual void DropBaskets()
Remove some baskets from memory.
Int_t FlushBaskets()
Flush to disk all the baskets of this branch and any of subbranches.
Bool_t HasDataMemberInfo() const
virtual TSQLResult * Query(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)=0
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...
static Long64_t fgMaxTreeSize
Maximum size of a file containing a Tree.
TObject * At(Int_t idx) const
virtual void WriteHeader()
Write File Header.
virtual Long64_t GetEntryNumberFriend(const TTree *)=0
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 Long64_t SetEntries(Long64_t n=-1)
Change number of entries in the tree.
R__EXTERN TInterpreter * gCling
virtual void Compress()
Remove empty slots from array.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual TFile * ChangeFile(TFile *file)
Called by TTree::Fill() when file has reached its maximum fgMaxTreeSize.
virtual Int_t Occurence(const TObject *obj) const
Return occurence number of object in the list of objects of this folder.
static TTree * MergeTrees(TList *list, Option_t *option="")
Static function merging the trees in the TList into a new tree.
A TTree is a list of TBranches.
virtual Bool_t GetBranchStatus(const char *branchname) const
Return status of branch with name branchname.
virtual Style_t GetMarkerStyle() const
Return the marker style.
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
virtual Width_t GetLineWidth() const
Return the line width.
virtual const char * GetName() const
Returns name of object.
Long_t GetThisOffset() const
virtual const char * GetTitle() const
Returns title of object.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
void SetHistLineColor(Color_t color=1)
A List of entry numbers in a TTree or TChain.
virtual Long64_t GetEntryNumberWithBestIndex(Long64_t major, Long64_t minor=0) const
Return entry number corresponding to major and minor number.
virtual Int_t AddBranchToCache(const char *bname, Bool_t subbranches=kFALSE)
Add branch with name bname to the Tree cache.
Int_t fPacketSize
! Number of entries in one packet for parallel root
void Set(Int_t n)
Set size of this array to n doubles.
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 Long64_t GetEntryNumberWithIndex(Long64_t major, Long64_t minor) const =0
Int_t GetWriteBasket() const
Long64_t BinarySearch(Long64_t n, const T *array, T value)
TFriendLock(const TFriendLock &)
Copy constructor.
Ssiz_t First(char c) const
Find first occurrence of a character c.
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
Data member is a pointer to an array of basic types.
Int_t GetReadBasket() const
virtual void SetName(const char *name)
Change the name of this tree.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
Long64_t GetEstimatedClusterSize()
In the case where the cluster size was not fixed (old files and case where autoflush was explicitly s...
void MoveReadCache(TFile *src, TDirectory *dir)
Move a cache from a file to the current file in dir.
virtual void CopyAddresses(TTree *, Bool_t undo=kFALSE)
Set branch addresses of passed tree equal to ours.
virtual TObjArray * GetListOfLeaves()
static void ResetCount()
Static function resetting fgCount.
Long64_t fSavedBytes
Number of autosaved bytes.
Long64_t fCacheSize
! Maximum size of file buffers
virtual void Print(Option_t *option="") const
Print the TRefTable branch.
virtual Long64_t AutoSave(Option_t *option="")
AutoSave tree header every fAutoSave bytes.
std::atomic< Long64_t > fIMTTotBytes
! Total bytes for the IMT flush baskets
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.