482   case kchar:       
return 0; 
 
  487   case kBits:       
return 0; 
 
  523  fMethodBit(tfl.fMethodBit),
 
  524  fPrevious(tfl.fPrevious)
 
  548         fTree->fFriendLockStatus &= ~(fMethodBit & 
kBitMask);
 
  575         entryInRange = firstEntry;
 
  578         entryInRange = firstEntry - pedestal;
 
  586      if (autoflush <= 0) {
 
  589      fStartEntry = pedestal + entryInRange - entryInRange%autoflush;
 
  614   auto autoFlush = fTree->GetAutoFlush();
 
  615   if (autoFlush > 0) 
return autoFlush;
 
  616   if (fEstimatedSize > 0) 
return fEstimatedSize;
 
  618   Long64_t zipBytes = fTree->GetZipBytes();
 
  620      fEstimatedSize = fTree->GetEntries() - 1;
 
  621      if (fEstimatedSize <= 0)
 
  625      Long64_t cacheSize = fTree->GetCacheSize();
 
  626      if (cacheSize == 0) {
 
  637      if (cacheSize <= 0) {
 
  638         cacheSize = 30000000;
 
  640      clusterEstimate = fTree->GetEntries() * cacheSize / zipBytes;
 
  642      fEstimatedSize = clusterEstimate ? clusterEstimate : 1;
 
  644   return fEstimatedSize;
 
  653   fStartEntry = fNextEntry;
 
  654   if (fTree->fNClusterRange || fTree->GetAutoFlush() > 0) {
 
  655      if (fClusterRange == fTree->fNClusterRange) {
 
  658         fNextEntry += GetEstimatedClusterSize();
 
  660         if (fStartEntry > fTree->fClusterRangeEnd[fClusterRange]) {
 
  663         if (fClusterRange == fTree->fNClusterRange) {
 
  666            fNextEntry += GetEstimatedClusterSize();
 
  668            Long64_t clusterSize = fTree->fClusterSize[fClusterRange];
 
  669            if (clusterSize == 0) {
 
  670               clusterSize = GetEstimatedClusterSize();
 
  672            fNextEntry += clusterSize;
 
  673            if (fNextEntry > fTree->fClusterRangeEnd[fClusterRange]) {
 
  677               fNextEntry = fTree->fClusterRangeEnd[fClusterRange] + 1;
 
  683      fNextEntry = fStartEntry + GetEstimatedClusterSize();
 
  685   if (fNextEntry > fTree->GetEntries()) {
 
  686      fNextEntry = fTree->GetEntries();
 
  697   fNextEntry = fStartEntry;
 
  698   if (fTree->fNClusterRange || fTree->GetAutoFlush() > 0) {
 
  699      if (fClusterRange == 0 || fTree->fNClusterRange == 0) {
 
  702         fStartEntry -= GetEstimatedClusterSize();
 
  707         if (fClusterRange == 0) {
 
  711            Long64_t clusterSize = fTree->fClusterSize[fClusterRange];
 
  712            if (clusterSize == 0) {
 
  713               clusterSize = GetEstimatedClusterSize();
 
  715            fStartEntry -= clusterSize;
 
  720      fStartEntry = fNextEntry - GetEstimatedClusterSize();
 
  722   if (fStartEntry < 0) {
 
  833, fDefaultEntryOffsetLen(1000)
 
  839, fAutoSave( -300000000)
 
  840, fAutoFlush(-30000000)
 
  872, fFriendLockStatus(0)
 
  874, fCacheDoAutoInit(
kTRUE)
 
  875, fCacheDoClusterPrefetch(
kFALSE)
 
  877, fIMTEnabled(
ROOT::IsImplicitMTEnabled())
 
  878, fNEntriesSinceSorting(0)
 
  911   if (strlen(title) > 2) {
 
  912      if (title[0] == 
'/') {
 
  913         Branch(title+1,32000,splitlevel);
 
  928#ifdef R__TRACK_BASKET_ALLOC_TIME 
  929      Info(
"TTree::~TTree", 
"For tree %s, allocation time is %lluus.", 
GetName(), fAllocationTime.load());
 
 1064         Error(
"AddBranchToCache",
"Could not load a tree");
 
 1073      Error(
"AddBranchToCache", 
"No tree is available. Branch was not added to the cache");
 
 1079      Error(
"AddBranchToCache", 
"No file is available. Branch was not added to the cache");
 
 1084      Error(
"AddBranchToCache", 
"No cache is available, branch not added");
 
 1087   return tc->
AddBranch(bname,subbranches);
 
 1103         Error(
"AddBranchToCache",
"Could not load a tree");
 
 1111             Error(
"AddBranchToCache", 
"Error adding branch");
 
 1116      Error(
"AddBranchToCache", 
"No tree is available. Branch was not added to the cache");
 
 1122      Error(
"AddBranchToCache", 
"No file is available. Branch was not added to the cache");
 
 1127      Error(
"AddBranchToCache", 
"No cache is available, branch not added");
 
 1147         Error(
"DropBranchFromCache",
"Could not load a tree");
 
 1156      Error(
"DropBranchFromCache", 
"No tree is available. Branch was not dropped from the cache");
 
 1162      Error(
"DropBranchFromCache", 
"No file is available. Branch was not dropped from the cache");
 
 1167      Error(
"DropBranchFromCache", 
"No cache is available, branch not dropped");
 
 1186         Error(
"DropBranchFromCache",
"Could not load a tree");
 
 1194             Error(
"DropBranchFromCache", 
"Error dropping branch");
 
 1199      Error(
"DropBranchFromCache", 
"No tree is available. Branch was not dropped from the cache");
 
 1205      Error(
"DropBranchFromCache", 
"No file is available. Branch was not dropped from the cache");
 
 1210      Error(
"DropBranchFromCache", 
"No cache is available, branch not dropped");
 
 1245   const auto friendHasValidIndex = [&] {
 
 1250   if ((isMainReshuffled || isFriendReshuffled) && !friendHasValidIndex) {
 
 1251      const auto reshuffledTreeName = isMainReshuffled ? mainTree.
GetName() : friendTree.
GetName();
 
 1253         "Tree '%s' has the kEntriesReshuffled bit set and cannot have friends nor can be added as a friend unless the " 
 1254         "main tree has a TTreeIndex on the friend tree '%s'. You can also unset the bit manually if you know what you " 
 1255         "are doing; note that you risk associating wrong TTree entries of the friend with those of the main TTree!";
 
 1256      Error(
"AddFriend", msg, reshuffledTreeName, friendTree.
GetName());
 
 1341   bool canAddFriend = 
true;
 
 1345         Warning(
"AddFriend", 
"FriendElement %s in file %s has less entries %lld than its parent Tree: %lld", treename,
 
 1349      Error(
"AddFriend", 
"Cannot find tree '%s' in file '%s', friend not added", treename, 
filename);
 
 1350      canAddFriend = 
false;
 
 1375   bool canAddFriend = 
true;
 
 1379         Warning(
"AddFriend", 
"FriendElement %s in file %s has less entries %lld than its parent tree: %lld", treename,
 
 1383      Error(
"AddFriend", 
"Cannot find tree '%s' in file '%s', friend not added", treename, 
file->GetName());
 
 1384      canAddFriend = 
false;
 
 1410      Warning(
"AddFriend", 
"FriendElement '%s' in file '%s' has less entries %lld than its parent tree: %lld",
 
 1417      tree->RemoveExternalFriend(fe);
 
 1510   if (opt.
Contains(
"flushbaskets")) {
 
 1511      if (
gDebug > 0) 
Info(
"AutoSave", 
"calling FlushBaskets \n");
 
 1530   if (
file) 
file->WriteStreamerInfo();
 
 1544   const char* writeStlWithoutProxyMsg = 
"The class requested (%s) for the branch \"%s\"" 
 1545                                      " is an instance of an stl collection and does not have a compiled CollectionProxy." 
 1546                                      " Please generate the dictionary for this collection (%s) to avoid to write corrupted data.";
 
 1560         Error(
"Branch", writeStlWithoutProxyMsg,
 
 1564      return Branch(branchname, classname, (
void*) addobj, bufsize, splitlevel);
 
 1567   void** addr = (
void**) addobj;
 
 1571   if (ptrClass && claim) {
 
 1578            Error(
"Branch", 
"The class requested (%s) for \"%s\" is different from the type of the pointer passed (%s)",
 
 1581      } 
else if (actualClass && (claim != actualClass) && !actualClass->
InheritsFrom(claim)) {
 
 1586            Error(
"Branch", 
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s",
 
 1592      Error(
"Branch", writeStlWithoutProxyMsg,
 
 1596   return Branch(branchname, classname, (
void*) addobj, bufsize, splitlevel);
 
 1606      Error(
"Branch", 
"The pointer specified for %s is not of a class known to ROOT", branchname);
 
 1610   void** addr = (
void**) addobj;
 
 1611   if (addr && *addr) {
 
 1614         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",
 
 1615                 branchname, ptrClass->
GetName());
 
 1616         actualClass = ptrClass;
 
 1617      } 
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
 
 1618         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());
 
 1622      actualClass = ptrClass;
 
 1625      Error(
"Branch", writeStlWithoutProxyMsg,
 
 1629   return Branch(branchname, actualClass->
GetName(), (
void*) addobj, bufsize, splitlevel);
 
 1641         Error(
"Branch", writeStlWithoutProxyMsg,
 
 1644      } 
else if (claim == 0) {
 
 1645         Error(
"Branch", 
"The pointer specified for %s is not of a class known to ROOT and %s is not a known class", branchname, classname);
 
 1652      Error(
"Branch", 
"Reference interface requires a valid object (for branch: %s)!", branchname);
 
 1656   if (ptrClass && claim) {
 
 1663            Error(
"Branch", 
"The class requested (%s) for \"%s\" is different from the type of the object passed (%s)",
 
 1666      } 
else if (actualClass && (claim != actualClass) && !actualClass->
InheritsFrom(claim)) {
 
 1671            Error(
"Branch", 
"The actual class (%s) of the object provided for the definition of the branch \"%s\" does not inherit from %s",
 
 1677      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",
 
 1678              branchname, ptrClass->
GetName());
 
 1679      actualClass = ptrClass;
 
 1680   } 
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
 
 1681      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());
 
 1685      Error(
"Branch", writeStlWithoutProxyMsg,
 
 1700         Error(
"Branch", 
"The pointer specified for %s is not of a class or type known to ROOT", branchname);
 
 1703         return Branch(branchname,addobj,varname.
Data(),bufsize);
 
 1709      Error(
"Branch", 
"Reference interface requires a valid object (for branch: %s)!", branchname);
 
 1714      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",
 
 1715              branchname, ptrClass->
GetName());
 
 1716      actualClass = ptrClass;
 
 1717   } 
else if ((ptrClass != actualClass) && !actualClass->
InheritsFrom(ptrClass)) {
 
 1718      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());
 
 1722      Error(
"Branch", writeStlWithoutProxyMsg,
 
 1737            "The inner type of the std::array passed specified for %s is not of a class or type known to ROOT",
 
 1742      return Branch(branchname, addobj, varname.
Data(), bufsize);
 
 1843      Error(
"Branch", 
"Cannot call this constructor for a TClonesArray");
 
 1849   while ((obj = next())) {
 
 1857         Branch(col, bufsize, splitlevel - 1, branchname);
 
 1859         if (nch && (
name[nch-1] == 
'_')) {
 
 1868         if (splitlevel > 99) {
 
 1894   char* curname = 
new char[1000];
 
 1896   while ((obj = next())) {
 
 1899         Branch(curname, bufsize, splitlevel - 1);
 
 1902         for (
Int_t i = 0; i < 1000; ++i) {
 
 1903            if (curname[i] == 0) {
 
 1906            if (curname[i] == 
'/') {
 
 1913            strlcat(curname, occur,1000);
 
 2025      return Bronch(
name, classname, addobj, bufsize, splitlevel);
 
 2027      if (splitlevel < 0) {
 
 2030      return BranchOld(
name, classname, addobj, bufsize, splitlevel);
 
 2079      Error(
"BranchOld", 
"Cannot find class: '%s'", classname);
 
 2084        Fatal(
"BranchOld", 
"The requested class ('%s') does not inherit from TObject.\n" 
 2085              "\tfgBranchStyle is set to zero requesting by default to use BranchOld.\n" 
 2086              "\tIf this is intentional use Bronch instead of Branch or BranchOld.", classname);
 
 2088        Fatal(
"BranchOld", 
"The requested class ('%s') does not inherit from TObject.\n" 
 2089              "\tYou can not use BranchOld to store objects of this type.",classname);
 
 2100   const char* rdname = 0;
 
 2101   const char* dname = 0;
 
 2103   char** apointer = (
char**) addobj;
 
 2115   if (
name[lenName-1] == 
'.') {
 
 2154         if (!strcmp(dname, 
"fBits")) {
 
 2157         if (!strcmp(dname, 
"fUniqueID")) {
 
 2167      branchname = rdname;
 
 2171            branchname.
Form(
"%s%s", 
name, &rdname[1]);
 
 2173            branchname.
Form(
"%s%s", 
name, &rdname[0]);
 
 2179      char* pointer = ((
char*) obj) + 
offset;
 
 2188            char* cpointer = (
char*) pointer;
 
 2189            char** ppointer = (
char**) cpointer;
 
 2191            if (splitlevel != 2) {
 
 2193                  branch1 = 
new TBranchClones(branch,branchname, pointer, bufsize);
 
 2198               blist->
Add(branch1);
 
 2206               blist->
Add(branch1);
 
 2223            blist->
Add(branch1);
 
 2247                  if (!strcmp(rdi->
GetName(), aindex)) {
 
 2259                  leaflist.
Form(
"%s[%s]/%c", &rdname[0], 
index, vcode);
 
 2261                  Error(
"BranchOld", 
"Cannot create branch for rdname: %s code: %d", branchname.
Data(), code);
 
 2268                  leaflist.
Form(
"%s/%s", dname, 
"C");
 
 2281            branch1 = 
new TBranch(branch, bname, *((
void**) pointer), leaflist, bufsize);
 
 2285            blist->
Add(branch1);
 
 2292            leaflist.
Form(
"%s/%c", rdname, vcode);
 
 2294            Error(
"BranchOld", 
"Cannot create branch for rdname: %s code: %d", branchname.
Data(), code);
 
 2297         branch1 = 
new TBranch(branch, branchname, pointer, leaflist, bufsize);
 
 2299         blist->
Add(branch1);
 
 2308         Warning(
"BranchOld", 
"Cannot process member: '%s'", rdname);
 
 2417      Error(
"Bronch", 
"Cannot find class:%s", classname);
 
 2428      objptr = (
char*)addr;
 
 2430      objptr = *((
char**) addr);
 
 2436         Error(
"Bronch", 
"Pointer to TClonesArray is null");
 
 2440         Error(
"Bronch", 
"TClonesArray with no class defined in branch: %s", 
name);
 
 2444         Error(
"Bronch", 
"TClonesArray with no dictionary defined in branch: %s", 
name);
 
 2448      if (splitlevel > 0) {
 
 2449         if (hasCustomStreamer)
 
 2450            Warning(
"Bronch", 
"Using split mode on a class: %s with a custom Streamer", clones->
GetClass()->
GetName());
 
 2465      if (!inklass && (collProxy->
GetType() == 0)) {
 
 2466         Error(
"Bronch", 
"%s with no class defined in branch: %s", classname, 
name);
 
 2473               Error(
"Bronch", 
"Container with no dictionary defined in branch: %s", 
name);
 
 2477               Warning(
"Bronch", 
"Using split mode on a class: %s with a custom Streamer", inklass->
GetName());
 
 2488         branch = 
new TBranchSTL( 
this, 
name, collProxy, bufsize, splitlevel );
 
 2502      Error(
"Bronch", 
"Cannot find dictionary for class: %s", classname);
 
 2508      hasCustomStreamer = 
kTRUE;
 
 2511   if (splitlevel < 0 || ((splitlevel == 0) && hasCustomStreamer && cl->
IsTObject())) {
 
 2542      objptr = (
char*) cl->
New();
 
 2550   if ((splitlevel > 0) && !cl->
CanSplit()) {
 
 2551      if (splitlevel != 99) {
 
 2552         Warning(
"Bronch", 
"%s cannot be split, resetting splitlevel to 0", cl->
GetName());
 
 2566      Error(
"Bronch", 
"Cannot build the StreamerInfo for class: %s", cl->
GetName());
 
 2575   if (splitlevel > 0) {
 
 2586      branch->
Unroll(
name, cl, sinfo, objptr, bufsize, splitlevel);
 
 2755   constexpr auto kBufSize = 2000;
 
 2756   char* fname = 
new char[kBufSize];
 
 2759   for (
Int_t i = 0; i < 10; ++i) {
 
 2767      strlcpy(fname, 
file->GetName(), kBufSize);
 
 2770         char* cunder = strrchr(fname, 
'_');
 
 2773            const char* cdot = strrchr(
file->GetName(), 
'.');
 
 2775               strlcat(fname, cdot, kBufSize);
 
 2780            strlcat(fname, fcount, kBufSize);
 
 2783         char* cdot = strrchr(fname, 
'.');
 
 2786            strlcat(fname, strrchr(
file->GetName(), 
'.'), kBufSize);
 
 2790            strlcat(fname, fcount, kBufSize);
 
 2797      Warning(
"ChangeFile", 
"file %s already exist, trying with %d underscores", fname, nus+1);
 
 2799   Int_t compress = 
file->GetCompressionSettings();
 
 2802      Error(
"Fill",
"Failed to open new file %s, continuing as a memory tree.",fname);
 
 2804      Printf(
"Fill: Switching to new file: %s", fname);
 
 2810   while ((obj = 
file->GetList()->First())) {
 
 2827         while ((branch = (
TBranch*)nextb())) {
 
 2836      if (newfile) newfile->
Append(obj);
 
 2839   file->TObject::Delete();
 
 2876   TClass* expectedClass = 0;
 
 2883   if (expectedClass && datatype == 
kOther_t && ptrClass == 0) {
 
 2884      if (isBranchElement) {
 
 2889         Error(
"SetBranchAddress", 
"Unable to determine the type given for the address for \"%s\". " 
 2890               "The class expected (%s) refers to an stl collection and do not have a compiled CollectionProxy.  " 
 2891               "Please generate the dictionary for this class (%s)",
 
 2898         Error(
"SetBranchAddress", 
"Unable to determine the type given for the address for \"%s\". " 
 2899               "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." 
 2900               "Please generate the dictionary for this class (%s)",
 
 2903         Error(
"SetBranchAddress", 
"Unable to determine the type given for the address for \"%s\". " 
 2904               "This is probably due to a missing dictionary, the original data class for this branch is %s.", branch->
GetName(), expectedClass->
GetName());
 
 2908   if (expectedClass && ptrClass && (branch->
GetMother() == branch)) {
 
 2911         Error(
"SetBranchAddress", 
"The address for \"%s\" should be the address of a pointer!", branch->
GetName());
 
 2931   if( expectedClass && ptrClass &&
 
 2932       expectedClass != ptrClass &&
 
 2940            Info(
"SetBranchAddress", 
"Matching STL collection (at least according to the SchemaRuleSet when " 
 2941               "reading a %s into a %s",expectedClass->
GetName(),ptrClass->
GetName());
 
 2948         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());
 
 2959   } 
else if (expectedClass && ptrClass && !expectedClass->
InheritsFrom(ptrClass)) {
 
 2981      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());
 
 2982      if (isBranchElement) {
 
 2991         Error(
"SetBranchAddress", 
"The pointer type given \"%s\" (%d) does not correspond to the type needed \"%s\" (%d) by the branch: %s",
 
 2998      if (expectedClass) {
 
 2999         Error(
"SetBranchAddress", 
"The pointer type given \"%s\" (%d) does not correspond to the type needed \"%s\" by the branch: %s",
 
 3001         if (isBranchElement) {
 
 3017                     if (etype == expectedType) {
 
 3032                     if (etype == expectedType) {
 
 3044            if (len <= ptrClass->Size()) {
 
 3048         Error(
"SetBranchAddress", 
"The pointer type given \"%s\" does not correspond to the type needed \"%s\" (%d) by the branch: %s",
 
 3054      Error(
"SetBranchAddress", writeStlWithoutProxyMsg,
 
 3056      if (isBranchElement) {
 
 3062   if (isBranchElement) {
 
 3063      if (expectedClass) {
 
 3172   for (
Int_t i = 0; i < nb; ++i) {
 
 3182   if (thistree != 
this) {
 
 3207   for (
Int_t lndx = 0; lndx < nleaves; ++lndx) {
 
 3213      if (branch && (newcomp > -1)) {
 
 3222      for (
Long64_t i = 0; i < nb; ++i) {
 
 3233         for (
Int_t j = 0; j < nb1; ++j) {
 
 3247            for (
Int_t k = 0; k < nb2; ++k) {
 
 3279            Error(
"CloneTTree", 
"TTree has not been cloned\n");
 
 3302   for (
Int_t i = 0; i < nbranches; ++i) {
 
 3309         tree->ResetBranchAddress(br);
 
 3338            Warning(
"CopyAddresses", 
"Could not find branch named '%s' in tree named '%s'", branch->
GetName(), 
tree->GetName());
 
 3346   std::set<TLeaf*> updatedLeafCount;
 
 3347   for (
Int_t i = 0; i < ntleaves; ++i) {
 
 3363         tree->ResetBranchAddress(tbranch);
 
 3366         bool needAddressReset = 
false;
 
 3374               needAddressReset = 
true;
 
 3376               needAddressReset = (updatedLeafCount.find(leaf->
GetLeafCount()) != updatedLeafCount.end());
 
 3399               if (br->
IsA() != branch->
IsA()) {
 
 3402                     "Branch kind mismatch between input tree '%s' and output tree '%s' for branch '%s': '%s' vs '%s'",
 
 3412               Warning(
"CopyAddresses", 
"Could not find branch named '%s' in tree named '%s'", branch->
GetName(), 
tree->GetName());
 
 3421       ( 
tree->IsA()->InheritsFrom(
"TNtuple") || 
tree->IsA()->InheritsFrom(
"TNtupleD") )
 
 3423      tree->ResetBranchAddresses();
 
 3429   enum EOnIndexError { kDrop, kKeep, kBuild };
 
 3431   static Bool_t R__HandleIndex(EOnIndexError onIndexError, 
TTree *newtree, 
TTree *oldtree)
 
 3439            switch (onIndexError) {
 
 3463         switch (onIndexError) {
 
 3469               index->SetTree(newtree);
 
 3477                  index->SetTree(newtree);
 
 3487      } 
else if ( onIndexError == kDrop ) {
 
 3542   EOnIndexError onIndexError;
 
 3544      onIndexError = kKeep;
 
 3545   } 
else if (opt.
Contains(
"buildindex")) {
 
 3546      onIndexError = kBuild;
 
 3547   } 
else if (opt.
Contains(
"dropindex")) {
 
 3548      onIndexError = kDrop;
 
 3550      onIndexError = kBuild;
 
 3553   Int_t cacheSize = -1;
 
 3556      Ssiz_t cacheSizeEnd = opt.
Index(
" ",cacheSizeLoc+10) - (cacheSizeLoc+10);
 
 3557      TSubString cacheSizeStr( opt(cacheSizeLoc+10,cacheSizeEnd) );
 
 3560         Warning(
"CopyEntries",
"The cachesize option can not be parsed: %s. The default size will be used.",cacheSizeStr.
String().
Data());
 
 3563         const char *munit = 
nullptr;
 
 3566         Warning(
"CopyEntries",
"The cachesize option is too large: %s (%g%s max). The default size will be used.",cacheSizeStr.
String().
Data(),
m,munit);
 
 3569   if (
gDebug > 0 && cacheSize != -1) 
Info(
"CopyEntries",
"Using Cache size: %d\n",cacheSize);
 
 3575   } 
else if (
nentries > treeEntries) {
 
 3579   if (fastClone && (nentries < 0 || nentries == tree->
GetEntriesFast())) {
 
 3583         if (
tree->LoadTree(i) < 0) {
 
 3587            withIndex = R__HandleIndex( onIndexError, 
this, 
tree );
 
 3612                  if (needCopyAddresses) {
 
 3618                  for (
Long64_t ii = 0; ii < tentries; ii++) {
 
 3619                     if (localtree->
GetEntry(ii) <= 0) {
 
 3624                  if (needCopyAddresses)
 
 3625                     tree->ResetBranchAddresses();
 
 3631                  if (
tree->GetDirectory() && 
tree->GetDirectory()->GetFile()) {
 
 3632                     Warning(
"CopyEntries", 
"Skipped file %s\n", 
tree->GetDirectory()->GetFile()->GetName());
 
 3634                     Warning(
"CopyEntries", 
"Skipped file number %d\n", 
tree->GetTreeNumber());
 
 3648      } 
else if (
nentries > treeEntries) {
 
 3651      if (needCopyAddresses) {
 
 3657      Int_t treenumber = -1;
 
 3659         if (
tree->LoadTree(i) < 0) {
 
 3662         if (treenumber != 
tree->GetTreeNumber()) {
 
 3664               withIndex = R__HandleIndex( onIndexError, 
this, 
tree );
 
 3666            treenumber = 
tree->GetTreeNumber();
 
 3668         if (
tree->GetEntry(i) <= 0) {
 
 3671         nbytes += this->
Fill();
 
 3673      if (needCopyAddresses)
 
 3674         tree->ResetBranchAddresses();
 
 3751      if (!
file->IsWritable()) {
 
 3752         Error(
"Delete",
"File : %s is not writable, cannot delete Tree:%s", 
file->GetName(),
GetName());
 
 3769      Int_t nbytes,objlen,keylen;
 
 3770      while ((leaf = (
TLeaf*)next())) {
 
 3773         for (
Int_t i=0;i<nbaskets;i++) {
 
 3777            if (!branchFile) 
continue;
 
 3779            if (nbytes <= 0) 
continue;
 
 3780            branchFile->
MakeFree(pos,pos+nbytes-1);
 
 3794      if (dirsav) dirsav->
cd();
 
 3795      if (
gDebug) 
Info(
"TTree::Delete", 
"Deleting Tree: %s: %d baskets deleted. Total space freed = %d bytes\n",
GetName(),nbask,ntot);
 
 4520   for (
Int_t i = 0; i < nb; ++i) {
 
 4533   for (
Int_t i = 0; i < nleaves; ++i)  {
 
 4537      for (
Int_t j = 0; j < nbaskets - 1; ++j) {
 
 4626   for (
Int_t i = 0; i < nbranches; ++i) {
 
 4634      nwrite = branch->
FillImpl(
nullptr);
 
 4636      nwrite = branch->
FillImpl(useIMT ? &imtHelper : 
nullptr);
 
 4640            Error(
"Fill", 
"Failed filling branch:%s.%s, nbytes=%d, entry=%lld\n" 
 4641                          " This error is symptomatic of a Tree created as a memory-resident Tree\n" 
 4642                          " Instead of doing:\n" 
 4643                          "    TTree *T = new TTree(...)\n" 
 4644                          "    TFile *f = new TFile(...)\n" 
 4646                          "    TFile *f = new TFile(...)\n" 
 4647                          "    TTree *T = new TTree(...)\n\n",
 
 4650            Error(
"Fill", 
"Failed filling branch:%s.%s, nbytes=%d, entry=%lld", 
GetName(), branch->
GetName(), nwrite,
 
 4682   bool autoFlush = 
false;
 
 4683   bool autoSave = 
false;
 
 4701         if (autoFlush || autoSave) {
 
 4712                  Info(
"TTree::Fill", 
"OptimizeBaskets called at entry %lld, fZipBytes=%lld, fFlushedBytes=%lld\n",
 
 4724               if (zipBytes != 0) {
 
 4726               } 
else if (totBytes != 0) {
 
 4761         Info(
"TTree::Fill", 
"FlushBaskets() called at entry %lld, fZipBytes=%lld, fFlushedBytes=%lld\n", 
fEntries,
 
 4769         Info(
"TTree::Fill", 
"AutoSave called at entry %lld, fZipBytes=%lld, fSavedBytes=%lld\n", 
fEntries,
 
 4784   return nerror == 0 ? nbytes : -1;
 
 4792   if (list==0 || branchname == 0 || branchname[0] == 
'\0') 
return 0;
 
 4796   UInt_t brlen = strlen(branchname);
 
 4804         const  char *dim = strchr(
name,
'[');
 
 4809      if (brlen == 
len && strncmp(branchname,
name,
len)==0) {
 
 4813      if ((brlen >= 
len) && (branchname[
len] == 
'.')
 
 4814          && strncmp(
name, branchname, 
len) == 0) {
 
 4821         if (next) 
return next;
 
 4823      const char *dot = strchr((
char*)branchname,
'.');
 
 4825         if (
len==(
size_t)(dot-branchname) &&
 
 4826             strncmp(branchname,
name,dot-branchname)==0 ) {
 
 4857      if (branch) 
return branch;
 
 4861   if (branch) 
return branch;
 
 4865   while ((branch = (
TBranch*) next())) {
 
 4868         return nestedbranch;
 
 4885      const char *subbranch = strstr(branchname, fe->
GetName());
 
 4886      if (subbranch != branchname) {
 
 4887         subbranch = 
nullptr;
 
 4890         subbranch += strlen(fe->
GetName());
 
 4891         if (*subbranch != 
'.') {
 
 4892            subbranch = 
nullptr;
 
 4897      std::ostringstream 
name;
 
 4927   const char* subsearchname = strstr(searchname, 
GetName());
 
 4928   if (subsearchname != searchname) {
 
 4929      subsearchname = 
nullptr;
 
 4931   if (subsearchname) {
 
 4932      subsearchname += strlen(
GetName());
 
 4933      if (*subsearchname != 
'.') {
 
 4934         subsearchname = 
nullptr;
 
 4937         if (subsearchname[0] == 0) {
 
 4938            subsearchname = 
nullptr;
 
 4948   const bool searchnameHasDot = strchr(searchname, 
'.') != 
nullptr;
 
 4952   TLeaf* leaf = 
nullptr;
 
 4953   while ((leaf = (
TLeaf*) next())) {
 
 4956      if (dim >= 0) leafname.
Remove(dim);
 
 4958      if (leafname == searchname) {
 
 4961      if (subsearchname && leafname == subsearchname) {
 
 4967      dim = leaftitle.
First(
'[');
 
 4968      if (dim >= 0) leaftitle.
Remove(dim);
 
 4970      if (leaftitle == searchname) {
 
 4973      if (subsearchname && leaftitle == subsearchname) {
 
 4976      if (!searchnameHasDot)
 
 4981         dim = longname.
First(
'[');
 
 4982         if (dim>=0) longname.
Remove(dim);
 
 4983         if (longname == searchname) {
 
 4986         if (subsearchname && longname == subsearchname) {
 
 4990         dim = longtitle.
First(
'[');
 
 4991         if (dim>=0) longtitle.
Remove(dim);
 
 4992         if (longtitle == searchname) {
 
 4995         if (subsearchname && longtitle == subsearchname) {
 
 5003         if (strstr(searchname, 
".") && !strcmp(searchname, branch->
GetName())) {
 
 5006         if (subsearchname && strstr(subsearchname, 
".") && !strcmp(subsearchname, branch->
GetName())) {
 
 5024      subsearchname = strstr(searchname, fe->
GetName());
 
 5025      if (subsearchname != searchname) {
 
 5026         subsearchname = 
nullptr;
 
 5028      if (subsearchname) {
 
 5029         subsearchname += strlen(fe->
GetName());
 
 5030         if (*subsearchname != 
'.') {
 
 5031            subsearchname = 
nullptr;
 
 5036      if (subsearchname) {
 
 5037         leafname.
Form(
"%s.%s",t->
GetName(),subsearchname);
 
 5039         leafname = searchname;
 
 5087struct BoolRAIIToggle {
 
 5090   BoolRAIIToggle(
Bool_t &val) : m_val(val) { m_val = 
true; }
 
 5091   ~BoolRAIIToggle() { m_val = 
false; }
 
 5130    if (retval == -1) 
return retval;
 
 5165      std::atomic<Int_t> nerrpar(0);
 
 5166      std::atomic<Int_t> nbpar(0);
 
 5167      std::atomic<Int_t> pos(0);
 
 5169      auto mapFunction  = [&]() {
 
 5175        Int_t j = pos.fetch_add(1);
 
 5181            std::stringstream ss;
 
 5182            ss << std::this_thread::get_id();
 
 5183            Info(
"FlushBaskets", 
"[IMT] Thread %s", ss.str().c_str());
 
 5184            Info(
"FlushBaskets", 
"[IMT] Running task for branch #%d: %s", j, branch->GetName());
 
 5187        Int_t nbtask = branch->FlushBaskets();
 
 5189        if (nbtask < 0) { nerrpar++; }
 
 5190        else            { nbpar += nbtask; }
 
 5194      pool.
Foreach(mapFunction, nb);
 
 5200      return nerrpar ? -1 : nbpar.load();
 
 5203   for (
Int_t j = 0; j < nb; j++) {
 
 5246         const char* alias = t->
GetAlias(aliasName);
 
 5250         const char* subAliasName = strstr(aliasName, fe->
GetName());
 
 5251         if (subAliasName && (subAliasName[strlen(fe->
GetName())] == 
'.')) {
 
 5271   for (
Int_t i = 0; i < nb; i++) {
 
 5275      if (!strcmp(
b->GetName(), 
name)) {
 
 5278      if (!strcmp(
b->GetFullName(), 
name)) {
 
 5282         result = R__GetBranch(*(
b->GetListOfBranches()), 
name);
 
 5317   for (
Int_t i = 0; i < nleaves; i++) {
 
 5354      const char* subname = strstr(
name, fe->
GetName());
 
 5355      if (subname != 
name) {
 
 5360      if (*subname != 
'.') {
 
 5407   auto calculateCacheSize = [
this](
Double_t cacheFactor)
 
 5414         if (medianClusterSize > 0)
 
 5417            cacheSize = 
Long64_t(cacheFactor * 1.5 * 30000000); 
 
 5421      if (cacheSize >= (INT_MAX / 4)) {
 
 5422         cacheSize = INT_MAX / 4;
 
 5429   if (!(stcs = 
gSystem->
Getenv(
"ROOT_TTREECACHE_SIZE")) || !*stcs) {
 
 5435   if (cacheFactor < 0.0) {
 
 5440   Long64_t cacheSize = calculateCacheSize(cacheFactor);
 
 5442   if (cacheSize < 0) {
 
 5446   if (cacheSize == 0 && withDefault) {
 
 5447      cacheSize = calculateCacheSize(1.0);
 
 5642   if (entry < 0 || entry >= 
fEntries) 
return 0;
 
 5654   auto seqprocessing = [&]() {
 
 5656      for (i=0;i<nbranches;i++)  {
 
 5658         nb = branch->
GetEntry(entry, getall);
 
 5671         nb = branch->GetEntry(entry, getall);
 
 5675      if (nb < 0) 
return nb;
 
 5681      std::atomic<Int_t> pos(0);
 
 5682      std::atomic<Int_t> nbpar(0);
 
 5684      auto mapFunction = [&]() {
 
 5690            Int_t j = pos.fetch_add(1);
 
 5696               std::stringstream ss;
 
 5697               ss << std::this_thread::get_id();
 
 5698               Info(
"GetEntry", 
"[IMT] Thread %s", ss.str().c_str());
 
 5699               Info(
"GetEntry", 
"[IMT] Running task for branch #%d: %s", j, branch->GetName());
 
 5702            std::chrono::time_point<std::chrono::system_clock> start, end;
 
 5704            start = std::chrono::system_clock::now();
 
 5705            nbtask = branch->GetEntry(entry, getall);
 
 5706            end = std::chrono::system_clock::now();
 
 5708            Long64_t tasktime = (
Long64_t)std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
 
 5711            if (nbtask < 0) errnb = nbtask;
 
 5712            else            nbpar += nbtask;
 
 5738   if (nb < 0) 
return nb;
 
 5755         if (nb < 0) 
return nb;
 
 5790   if (checkLeafCount) {
 
 5791      for (
Int_t i = 0; i < nbranches; i++)  {
 
 5795            auto countBranch = leafCount->GetBranch();
 
 5805   if (!checkLeafCount) {
 
 5808   for (
Int_t i = 0; i < nbranches; i++)  {
 
 5820             [](std::pair<Long64_t,TBranch*> 
a, std::pair<Long64_t,TBranch*> 
b) {
 
 5821                return a.first > b.first;
 
 5840             [](std::pair<Long64_t,TBranch*> 
a, std::pair<Long64_t,TBranch*> 
b) {
 
 5841                return a.first > b.first;
 
 5946   for (i = 0; i < nbranches; ++i) {
 
 5949      if (nb < 0) 
return nb;
 
 5961         if (serial <0) 
return -nbytes;
 
 5963         if (nb < 0) 
return nb;
 
 5988      if (strcmp(friendname,fe->
GetName())==0
 
 6098   TLeaf *leaf = 
nullptr;
 
 6102         leaf = branch->
GetLeaf(leafname);
 
 6109   while ((leaf = (
TLeaf*)nextl())) {
 
 6110      if (strcmp(leaf->
GetFullName(), leafname) != 0 && strcmp(leaf->
GetName(), leafname) != 0)
 
 6118         UInt_t nbch = strlen(branchname);
 
 6119         const char* brname = br->
GetName();
 
 6121         if (strncmp(brname,branchname,nbch)) {
 
 6123               const char *mothername = mother->
GetName();
 
 6124               UInt_t motherlen = strlen(mothername);
 
 6125               if (!strcmp(mothername, branchname)) {
 
 6127               } 
else if (nbch > motherlen && strncmp(mothername,branchname,motherlen)==0 && (mothername[motherlen-1]==
'.' || branchname[motherlen]==
'.')) {
 
 6129                  if (strncmp(brname,branchname+motherlen+1,nbch-motherlen-1)) {
 
 6145         if ((strlen(brname) > nbch) && (brname[nbch] != 
'.') && (brname[nbch] != 
'[')) {
 
 6158         leaf = t->
GetLeaf(branchname, leafname);
 
 6159         if (leaf) 
return leaf;
 
 6170      const char *subname = strstr(leafname,fe->
GetName());
 
 6171      if (subname != leafname) 
continue;
 
 6174      if (*subname != 
'.') 
continue;
 
 6176      strippedArg += subname;
 
 6177      leaf = t->
GetLeaf(branchname,subname);
 
 6178      if (leaf) 
return leaf;
 
 6195   if (leafname == 0) 
return 0;
 
 6220   std::string path(
name);
 
 6221   const auto sep = path.find_last_of(
"/");
 
 6222   if (sep != std::string::npos)
 
 6248      if (entryNumber < 0) 
break;
 
 6288      if (entryNumber < 0) 
break;
 
 6405   if (autoflush > 0 && autosave > 0) {
 
 6417   for (
Int_t i = 0; i < nb; ++i)  {
 
 6424      for(
Int_t i = 0, j = 0; j < oldsize; ++j) {
 
 6455   Int_t nimported = 0;
 
 6456   while ((leaf=(
TLeaf*)next())) {
 
 6513                  friendHasEntry = 
kTRUE;
 
 6640   Warning(
"MakeCode", 
"MakeCode is obsolete. Use MakeClass or MakeSelector instead");
 
 6856   while ((obj=next())) {
 
 6862         newtree = (
TTree*)
tree->CloneTree(-1, options);
 
 6863         if (!newtree) 
continue;
 
 6869         tree->GetListOfClones()->Remove(newtree);
 
 6870         tree->ResetBranchAddresses();
 
 6900      if (
tree==
this) 
continue;
 
 6902         Error(
"Add",
"Attempt to add object of class: %s to a %s", 
tree->ClassName(), 
ClassName());
 
 6927   const char *options = info ? info->
fOptions.
Data() : 
"";
 
 6963      if (
tree==
this) 
continue;
 
 6965         Error(
"Add",
"Attempt to add object of class: %s to a %s", 
tree->ClassName(), 
ClassName());
 
 6985   if (
src == dst) 
return;
 
 6989      src->SetCacheRead(0,
this);
 
 6995      src->SetCacheRead(0,
this);
 
 7012   if (!newdirectory) {
 
 7023      return cloner.
Exec();
 
 7035   while ((leaf = (
TLeaf*) next())) {
 
 7067   if (nleaves == 0 || treeSize == 0) {
 
 7071   Double_t aveSize = treeSize/nleaves;
 
 7075   Int_t i, oldMemsize,newMemsize,oldBaskets,newBaskets;
 
 7076   i = oldMemsize = newMemsize = oldBaskets = newBaskets = 0;
 
 7081   for (
Int_t pass =0;pass<2;pass++) {
 
 7086      for (i=0;i<nleaves;i++) {
 
 7090         Double_t idealFactor = totBytes/aveSize;
 
 7094            sizeOfOneEntry = aveSize;
 
 7099         oldMemsize += oldBsize;
 
 7100         oldBaskets += 1+
Int_t(totBytes/oldBsize);
 
 7103            newBaskets += 1+
Int_t(totBytes/oldBsize);
 
 7106         Double_t bsize = oldBsize*idealFactor*memFactor; 
 
 7107         if (bsize < 0) bsize = bmax;
 
 7108         if (bsize > bmax) bsize = bmax;
 
 7117               newBsize = newBsize + (clusterSize * 
sizeof(
Int_t) * 2);
 
 7126            newBsize = newBsize - newBsize%512 + 512;
 
 7128         if (newBsize < sizeOfOneEntry) newBsize = sizeOfOneEntry;
 
 7129         if (newBsize < bmin) newBsize = bmin;
 
 7130         if (newBsize > 10000000) newBsize = bmax;
 
 7132            if (pDebug) 
Info(
"OptimizeBaskets", 
"Changing buffer size from %6d to %6d bytes for %s\n",oldBsize,newBsize,branch->
GetName());
 
 7135         newMemsize += newBsize;
 
 7139         newBaskets += 1+
Int_t(totBytes/newBsize);
 
 7140         if (pass == 0) 
continue;
 
 7144         if (comp > 1 && comp < minComp) {
 
 7145            if (pDebug) 
Info(
"OptimizeBaskets", 
"Disabling compression for branch : %s\n",branch->
GetName());
 
 7151      if (memFactor > 100) memFactor = 100;
 
 7152      Double_t bmin_new = bmin*memFactor;
 
 7153      Double_t bmax_new = bmax*memFactor;
 
 7154      static const UInt_t hardmax = 1*1024*1024*1024; 
 
 7161      static const UInt_t hardmin = 8;
 
 7162      bmin = (bmin_new > hardmax) ? hardmax : ( bmin_new < hardmin ? hardmin : (
UInt_t)bmin_new );
 
 7163      bmax = (bmax_new > hardmax) ? bmin : (
UInt_t)bmax_new;
 
 7166      Info(
"OptimizeBaskets", 
"oldMemsize = %d,  newMemsize = %d\n",oldMemsize, newMemsize);
 
 7167      Info(
"OptimizeBaskets", 
"oldBaskets = %d,  newBaskets = %d\n",oldBaskets, newBaskets);
 
 7246   Printf(
"******************************************************************************");
 
 7249   Printf(
"*        :          : Tree compression factor = %6.2f                       *", cx);
 
 7250   Printf(
"******************************************************************************");
 
 7256   if (strncmp(
option,
"clusters",strlen(
"clusters"))==0) {
 
 7257      Printf(
"%-16s %-16s %-16s %8s %20s",
 
 7258             "Cluster Range #", 
"Entry Start", 
"Last Entry", 
"Size", 
"Number of clusters");
 
 7262      bool estimated = 
false;
 
 7263      bool unknown = 
false;
 
 7266            if (recordedSize > 0) {
 
 7267               nclusters = (1 + end - start) / recordedSize;
 
 7268               Printf(
"%-16d %-16lld %-16lld %8lld %10lld",
 
 7269                      ind, start, end, recordedSize, nclusters);
 
 7275               if (estimated_size > 0) {
 
 7276                  nclusters = (1 + end - start) / estimated_size;
 
 7277                  Printf(
"%-16d %-16lld %-16lld %8lld %10lld (estimated)",
 
 7278                      ind, start, end, recordedSize, nclusters);
 
 7281                  Printf(
"%-16d %-16lld %-16lld %8lld    (unknown)",
 
 7282                        ind, start, end, recordedSize);
 
 7287            totalClusters += nclusters;
 
 7297         Printf(
"Total number of clusters: (unknown)");
 
 7299         Printf(
"Total number of clusters: %lld %s", totalClusters, estimated ? 
"(estimated)" : 
"");
 
 7307   TLeaf* leaf = 
nullptr;
 
 7308   if (strstr(
option, 
"toponly")) {
 
 7311      for (
l=0;
l<nl;
l++) {
 
 7314         if (strchr(br->
GetName(),
'.')) {
 
 7322      for (
l=0;
l<nl;
l++) {
 
 7323         if (count[
l] < 0) 
continue;
 
 7335      while ((br= (
TBranch*)next())) {
 
 7499   var.
Form(
"%s>>%s", varexp, hname);
 
 7565      Error(
"ReadFile",
"File name not specified");
 
 7575   const char* ext = strrchr(
filename, 
'.');
 
 7576   if(ext && ((strcmp(ext, 
".csv") == 0) || (strcmp(ext, 
".CSV") == 0)) && delimiter == 
' ') {
 
 7579   return ReadStream(in, branchDescriptor, delimiter);
 
 7588   Long_t inPos = inputStream.tellg();
 
 7589   char newline = 
'\n';
 
 7593      if(!inputStream.good()) {
 
 7594         Error(
"ReadStream",
"Error reading stream: no newline found.");
 
 7597      if(
c == newline) 
break;
 
 7603   inputStream.clear();
 
 7604   inputStream.seekg(inPos);
 
 7616   std::stringstream ss;
 
 7617   std::istream *inTemp;
 
 7618   Long_t inPos = inputStream.tellg();
 
 7619   if (!inputStream.good()) {
 
 7620      Error(
"ReadStream",
"Error reading stream");
 
 7624      ss << std::cin.rdbuf();
 
 7629      inTemp = &inputStream;
 
 7631   std::istream& in = *inTemp;
 
 7636   if (nbranches == 0) {
 
 7637      char *bdname = 
new char[4000];
 
 7638      char *bd = 
new char[100000];
 
 7640      if (branchDescriptor) nch = strlen(branchDescriptor);
 
 7644            in.getline(bd, 100000, newline);
 
 7648               Error(
"ReadStream",
"Error reading stream");
 
 7662         strlcpy(bd,branchDescriptor,100000);
 
 7667      void *address = &bd[90000];
 
 7671      if(delimiter != 
' ') {
 
 7673         if (strchr(bdcur,bdelim)==0 && strchr(bdcur,
':') != 0) {
 
 7679         char *colon = strchr(bdcur,bdelim);
 
 7680         if (colon) *colon = 0;
 
 7681         strlcpy(bdname,bdcur,4000);
 
 7682         char *
slash = strchr(bdname,
'/');
 
 7688            desc.
Form(
"%s/%s",bdname,olddesc.Data());
 
 7690         char *bracket = strchr(bdname,
'[');
 
 7694         branch = 
new TBranch(
this,bdname,address,desc.
Data(),32000);
 
 7697            Warning(
"ReadStream",
"Illegal branch definition: %s",bdcur);
 
 7712      Info(
"ReadStream", 
"Will use branches:");
 
 7713      for (
int i = 0 ; i < nbranches; ++i) {
 
 7719         Info(
"ReadStream", 
"Dumping read tokens, format:");
 
 7720         Info(
"ReadStream", 
"LLLLL:BBB:gfbe:GFBE:T");
 
 7721         Info(
"ReadStream", 
"   L: line number");
 
 7722         Info(
"ReadStream", 
"   B: branch number");
 
 7723         Info(
"ReadStream", 
"   gfbe: good / fail / bad / eof of token");
 
 7724         Info(
"ReadStream", 
"   GFBE: good / fail / bad / eof of file");
 
 7725         Info(
"ReadStream", 
"   T: Token being read");
 
 7732   const char sDelimBuf[2] = { delimiter, 0 };
 
 7733   const char* sDelim = sDelimBuf;
 
 7734   if (delimiter == 
' ') {
 
 7739      if (newline == 
'\r' && in.peek() == 
'\n') {
 
 7743      std::getline(in, 
line, newline);
 
 7750            Info(
"ReadStream", 
"Skipping empty line number %lld", nlines);
 
 7754      if (sLine[0] == 
'#') {
 
 7756            Info(
"ReadStream", 
"Skipping comment line number %lld: '%s'",
 
 7757                 nlines, 
line.c_str());
 
 7762         Info(
"ReadStream", 
"Parsing line number %lld: '%s'",
 
 7763              nlines, 
line.c_str());
 
 7770      std::stringstream sToken; 
 
 7774      Int_t remainingLeafLen = 0; 
 
 7775      while (goodLine && iBranch < nbranches
 
 7776             && sLine.
Tokenize(tok, pos, sDelim)) {
 
 7778         if (tok.
IsNull() && delimiter == 
' ') {
 
 7784         if (!remainingLeafLen) {
 
 7789         if (!remainingLeafLen) {
 
 7790            remainingLeafLen = leaf->
GetLen();
 
 7794               remainingLeafLen = 1;
 
 7804         if (remainingLeafLen) {
 
 7812         sToken.seekp(0, std::ios_base::beg);
 
 7813         sToken.str(leafData.
Data());
 
 7814         sToken.seekg(0, std::ios_base::beg);
 
 7817            Info(
"ReadStream", 
"%5lld:%3d:%d%d%d%d:%d%d%d%d:%s",
 
 7819                 (
int)sToken.good(), (
int)sToken.fail(),
 
 7820                 (
int)sToken.bad(), (
int)sToken.eof(),
 
 7821                 (
int)in.good(), (
int)in.fail(),
 
 7822                 (
int)in.bad(), (
int)in.eof(),
 
 7823                 sToken.str().c_str());
 
 7830                    "Buffer error while reading data for branch %s on line %lld",
 
 7832         } 
else if (!sToken.eof()) {
 
 7833            if (sToken.fail()) {
 
 7835                       "Couldn't read formatted data in \"%s\" for branch %s on line %lld; ignoring line",
 
 7839               std::string remainder;
 
 7840               std::getline(sToken, remainder, newline);
 
 7841               if (!remainder.empty()) {
 
 7843                          "Ignoring trailing \"%s\" while reading data for branch %s on line %lld",
 
 7844                          remainder.c_str(), branch->
GetName(), nlines);
 
 7850      if (iBranch < nbranches) {
 
 7852                 "Read too few columns (%d < %d) in line %lld; ignoring line",
 
 7853                 iBranch, nbranches, nlines);
 
 7855      } 
else if (pos != 
kNPOS) {
 
 7857         if (pos < sLine.
Length()) {
 
 7859                    "Ignoring trailing \"%s\" while reading line %lld",
 
 7860                    sLine.
Data() + pos - 1 ,
 
 7939   for (
Int_t i = 0; i < nleaves; i++)  {
 
 7990      if (friend_t == oldFriend) {
 
 8018   for (
Int_t i = 0; i < nb; ++i)  {
 
 8048   for (
Int_t i = 0; i < nb; ++i)  {
 
 8077   for (
Int_t i = 0; i < nbranches; ++i) {
 
 8136   if (!aliasName || !aliasFormula) {
 
 8139   if (!aliasName[0] || !aliasFormula[0]) {
 
 8292   std::vector<Long64_t> clusterSizesPerRange;
 
 8300   std::vector<double> nClustersInRange; 
 
 8301   nClustersInRange.reserve(clusterSizesPerRange.size());
 
 8303   auto clusterRangeStart = 0ll;
 
 8310      nClustersInRange.emplace_back(nClusters);
 
 8314   R__ASSERT(nClustersInRange.size() == clusterSizesPerRange.size());
 
 8315   const auto medianClusterSize =
 
 8316      TMath::Median(nClustersInRange.size(), clusterSizesPerRange.data(), nClustersInRange.data());
 
 8317   return medianClusterSize;
 
 8356   for (
Int_t i = 0; i < nleaves; i++)  {
 
 8367      Error(
"SetBasketSize", 
"unknown branch -> '%s'", bname);
 
 8383      Error(
"SetBranchAddress", 
"unknown branch -> %s", bname);
 
 8413      Error(
"SetBranchAddress", 
"unknown branch -> %s", bname);
 
 8447      const char *bname = branch->
GetName();
 
 8450         if (cloneBr && (cloneBr->
GetAddress() == oldAddr)) {
 
 8535   if (!bname || !*bname) {
 
 8536      Error(
"SetBranchStatus", 
"Input regexp is an empty string: no match against branch names will be attempted.");
 
 8540   TBranch *branch, *bcount, *bson;
 
 8541   TLeaf *leaf, *leafcount;
 
 8550   for (i=0;i<nleaves;i++)  {
 
 8554      if (strcmp(bname,
"*")) { 
 
 8557         if (strcmp(bname,branch->
GetName())
 
 8558             && longname != bname
 
 8571   if (nb==0 && !strchr(bname,
'*')) {
 
 8581   UInt_t foundInFriend = 0;
 
 8592         const char *subbranch = strstr(bname,fe->
GetName());
 
 8593         if (subbranch!=bname) subbranch = 
nullptr;
 
 8595            subbranch += strlen(fe->
GetName());
 
 8596            if ( *subbranch != 
'.' ) subbranch = 
nullptr;
 
 8607   if (!nb && !foundInFriend) {
 
 8610            if (strchr(bname,
'*') != 0)
 
 8611               Error(
"SetBranchStatus", 
"No branch name is matching wildcard -> %s", bname);
 
 8613               Error(
"SetBranchStatus", 
"unknown branch -> %s", bname);
 
 8615            if (strchr(bname,
'*') != 0)
 
 8616               Warning(
"SetBranchStatus", 
"No branch name is matching wildcard -> %s", bname);
 
 8618               Warning(
"SetBranchStatus", 
"unknown branch -> %s", bname);
 
 8623   if (found) *found = nb + foundInFriend;
 
 8627   for (i = 0; i < nleaves; i++) {
 
 8639         for (j=0;j<nbranches;j++) {
 
 8641            if (!bson) 
continue;
 
 8709      if (cacheSize < 0) {
 
 8713      if (cacheSize == 0) {
 
 8715      } 
else if (cacheSize < 0) {
 
 8730      if (!autocache && cacheSize>0) {
 
 8731         Warning(
"SetCacheSizeAux", 
"A TTreeCache could not be created because the TTree has no file");
 
 8766      if (cacheSize == 0) {
 
 8769         file->SetCacheRead(0,
this);
 
 8788               Error(
"SetCacheSizeAux", 
"Not setting up an automatically sized TTreeCache because of missing cache previously set");
 
 8796   if (cacheSize == 0 || pf) {
 
 8823         Error(
"SetCacheEntryRange",
"Could not load a tree");
 
 8832      Error(
"SetCacheEntryRange", 
"No tree is available. Could not set cache entry range");
 
 8838      Error(
"SetCacheEntryRange", 
"No file is available. Could not set cache entry range");
 
 8843      Error(
"SetCacheEntryRange", 
"No cache is available. Could not set entry range");
 
 8882   if (maxEntries <= 0) {
 
 8897         for (
Int_t i = 0; i < nb; i++) {
 
 8930   if (newdefault < 10) {
 
 8934   if (updateExisting) {
 
 8937      while ( ( 
b = (
TBranch*)next() ) ) {
 
 9008   TBranch* 
b(
nullptr), *bMin(
nullptr), *bMax(
nullptr);
 
 9014      if (!bMin || n2 < nMin) {
 
 9018      if (!bMax || n2 > nMax) {
 
 9023   if (bMin && nMin != nMax) {
 
 9024      Warning(
"SetEntries", 
"Tree branches have different numbers of entries, eg %s has %lld entries while %s has %lld entries.",
 
 9025              bMin->GetName(), nMin, bMax->
GetName(), nMax);
 
 9077   char enlistname[100];
 
 9084   for (
Int_t i=0; i<nsel; i++){
 
 9125   UChar_t newFeatures = ~curFeatures & featuresRequested;
 
 9126   curFeatures |= newFeatures;
 
 9144      Warning(
"SetFileNumber", 
"file number must be positive. Set to 0");
 
 9170   for (
Int_t i = 0; i < nb; ++i)  {
 
 9226                 "The tree or chain already has a fNotify registered and it is a TNotifyLink, while the new object is " 
 9227                 "not a TNotifyLink. Setting fNotify to the new value will lead to an orphan linked list of " 
 9228                 "TNotifyLinks and it is most likely not intended. If this is the intended goal, please call " 
 9229                 "SetNotify(nullptr) first to silence this warning.");
 
 9230      } 
else if (newLink->GetNext() != oldLink && oldLink->GetNext() != newLink) {
 
 9235                 "The tree or chain already has a TNotifyLink registered, and the new TNotifyLink `obj` does not link " 
 9236                 "to it. Setting fNotify to the new value will lead to an orphan linked list of TNotifyLinks and it is " 
 9237                 "most likely not intended. If this is the intended goal, please call SetNotify(nullptr) first to " 
 9238                 "silence this warning.");
 
 9296   if (pf && !( opt ^ (
nullptr != 
dynamic_cast<TTreeCacheUnzip*
>(pf)))) {
 
 9304      unzip->SetUnzipBufferSize( 
Long64_t(cacheSize * RelSize) );
 
 9378         Error(
"Show()", 
"Cannot read entry %lld (entry does not exist)", entry);
 
 9380      } 
else if (ret == -1) {
 
 9381         Error(
"Show()", 
"Cannot read entry %lld (I/O error)", entry);
 
 9386         Error(
"Show()", 
"Cannot read entry %lld (I/O error)", entry);
 
 9388      } 
else if (ret == 0) {
 
 9389         Error(
"Show()", 
"Cannot read entry %lld (no data read)", entry);
 
 9397   for (
Int_t i = 0; i < nleaves; i++) {
 
 9426      printf(
" %-15s = ", leaf->
GetName());
 
 9429         if (
l == (
len - 1)) {
 
 9434         if ((
l % ltype) == 0) {
 
 9466         Error(
"StopCacheLearningPhase",
"Could not load a tree");
 
 9475      Error(
"StopCacheLearningPhase", 
"No tree is available. Could not stop cache learning phase");
 
 9481      Error(
"StopCacheLearningPhase", 
"No file is available. Could not stop cache learning phase");
 
 9486      Error(
"StopCacheLearningPhase", 
"No cache is available. Could not stop learning phase");
 
 9499   for (
Int_t i = 0; i < nb; ++i) {
 
 9504      for (
Int_t j = writeBasket; j >= 0; --j) {
 
 9535   if (
b.IsReading()) {
 
 9546      Version_t R__v = 
b.ReadVersion(&R__s, &R__c);
 
 9560            Warning(
"Streamer", 
"Old style index in this tree is deleted. Rebuild the index via TTree::BuildIndex");
 
 9773, fDirection(iter.fDirection)
 
 9805   if (!
fTree) 
return 0;
 
 9812      if (!list) 
return 0; 
 
 9821         if (!list) 
return next;
 
 9829         if (!nextTree) 
return Next();
 
#define R__unlikely(expr)
TObject * clone(const char *newname) const override
RooAbsTestStatistic * create(const char *name, const char *title, RooAbsReal &real, RooAbsData &adata, const RooArgSet &projDeps, RooAbsTestStatistic::Configuration const &cfg) override
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
unsigned long long ULong64_t
const Int_t kDoNotProcess
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
static unsigned int total
Option_t Option_t SetLineWidth
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t cursor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t SetFillStyle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t SetLineColor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t SetFillColor
Option_t Option_t SetMarkerStyle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void reg
R__EXTERN TInterpreter * gCling
R__EXTERN TVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
R__EXTERN TStyle * gStyle
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'.
A helper class for managing IMT work during TTree:Fill operations.
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 threads,...
void Foreach(F func, unsigned nTimes, unsigned nChunks=0)
Execute a function without arguments several times in parallel, dividing the execution in nChunks.
void Streamer(TBuffer &) override
Stream a TArrayD object.
void Set(Int_t n) override
Set size of this array to n doubles.
void Set(Int_t n) override
Set size of this array to n ints.
void Streamer(TBuffer &) override
Stream a TArrayI object.
Fill Area Attributes class.
virtual void Streamer(TBuffer &)
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void Streamer(TBuffer &)
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 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 Streamer(TBuffer &)
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 SetBranchFolder()
const char * GetClassName() const override
Return the name of the user class whose content is stored in this branch, if any.
void ResetAddress() override
Set branch address to zero and free all allocated memory.
virtual Bool_t IsObjectOwner() const
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.
void SetAddress(void *addobj) override
Point this branch at an object.
virtual void SetTargetClass(const char *name)
Set the name of the class of the in-memory object into which the data will loaded.
void SetObject(void *objadd) override
Set object this branch is pointing to.
A Branch for the case of an object.
A branch containing and managing a TRefTable for TRef autoloading.
void Reset(Option_t *option="") override
void Print(Option_t *option="") const override
Print the TRefTable branch.
void Clear(Option_t *option="") override
Clear entries in the TRefTable.
void ResetAfterMerge(TFileMergeInfo *) override
Reset a Branch after a Merge operation (drop data but keep customizations) TRefTable is cleared.
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.
TClass * IsA() const override
void Print(Option_t *option="") const override
Print TBranch parameters.
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.
virtual void SetFile(TFile *file=nullptr)
Set file where this branch writes/reads its buffers.
TObjArray * GetListOfBaskets()
Long64_t GetEntries() const
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
Int_t GetReadBasket() const
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 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.
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
Bool_t HasCustomStreamerMember() const
The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based...
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
void BuildRealData(void *pointer=nullptr, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
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.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
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
TClass * GetActualClass(const void *object) const
Return a pointer to the real class of the object.
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.
Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="")
Function called by the Streamer functions to serialize object at p to buffer b.
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
void SetName(const char *name)
const char * GetName() const override
Return name of this collection.
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
void Browse(TBrowser *b) override
Browse this collection (called by TBrowser).
A specialized string object used for TTree selections.
All ROOT classes may have RTTI (run time type identification) support added.
Bool_t IsPersistent() const
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
Longptr_t GetOffset() const
Get offset from "this".
const char * GetTypeName() const
Get the decayed type name of this data member, removing const and volatile qualifiers,...
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 the concrete type name of this data member, including const and volatile qualifiers.
Basic data type descriptor (datatype information is obtained from CINT).
TString GetTypeName()
Get basic type of typedef, e,g.: "class TDirectory*" -> "TDirectory".
void Append(TObject *obj, Bool_t replace=kFALSE) override
Append object to this directory.
TDirectory::TContext keeps track and restore the current directory.
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)
Write an object with proper type checking.
virtual TFile * GetFile() const
virtual Bool_t cd()
Change current directory to "this" directory.
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)
Get an object with proper type checking.
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
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 Bool_t Enter(Long64_t entry, TTree *tree=nullptr)
Add entry #entry to the list.
virtual void SetDirectory(TDirectory *dir)
Add reference to directory dir. dir can be 0.
virtual Long64_t GetEntry(Long64_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 composed of a header, followed by consecutive data records (TKey instances) with a wel...
virtual void SetCacheRead(TFileCacheRead *cache, TObject *tree=nullptr, ECacheAction action=kDisconnect)
Set a pointer to the read cache.
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.
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.
<div class="legacybox"><h2>Legacy Code</h2> TFolder is a legacy interface: there will be no bug fixes...
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
Get the actual TTree name of the friend.
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 TClass * IsA() const
virtual Option_t * GetOption() const
Book space in a file, create I/O buffers, to fill them, (un)compress them.
void Delete(Option_t *option="") override
Delete an object from the file.
virtual const char * GetClassName() const
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 *)
TClass * IsA() const override
virtual void SetAddress(void *add=nullptr)
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
void Streamer(TBuffer &) override
Stream all objects in the collection to or from the I/O buffer.
void Clear(Option_t *option="") override
Remove all objects from the list.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void RecursiveRemove(TObject *obj) override
Remove object from this collection and recursively remove the object from all other objects (and coll...
void Add(TObject *obj) override
TObject * Remove(TObject *obj) override
Remove object from the list.
virtual TObjLink * FirstLink() const
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
A TMemFile is like a normal TFile except that it reads and writes only from memory.
The TNamed class is the base class for all named ROOT classes.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
const char * GetTitle() const override
Returns title of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
Int_t GetEntriesFast() const
Int_t GetEntriesUnsafe() const
Return the number of objects in array (i.e.
TObject * Last() const override
Return the object in the last filled slot. Returns 0 if no entries.
void Clear(Option_t *option="") override
Remove all objects from the array.
void Streamer(TBuffer &) override
Stream all objects in the array to or from the I/O buffer.
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
Returns an array iterator.
virtual void Compress()
Remove empty slots from array.
Int_t GetEntries() const override
Return the number of objects in array (i.e.
void Delete(Option_t *option="") override
Remove all objects from the array AND delete all heap based objects.
TObject * At(Int_t idx) const override
TObject * UncheckedAt(Int_t i) const
TObject * RemoveAt(Int_t idx) override
Remove object at index idx.
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
void Add(TObject *obj) override
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 (the base implementation is no-op).
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
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
@ kOnlyPrepStep
Used to request that the class specific implementation of TObject::Write just prepare the objects to ...
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.
virtual TClass * IsA() const
@ 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.
const char * GetName() const override
Returns name of object.
TDataMember * GetDataMember() const
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, size_t oldsize)
Reallocate (i.e.
Describes a persistent version of a class.
void ForceWriteInfo(TFile *file, Bool_t force=kFALSE) override
Recursively mark streamer infos for writing to a file.
void ToLower()
Change string to lower-case.
static constexpr 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.
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:...
Int_t SetBufferSize(Int_t buffersize) override
Change the underlying buffer size of the cache.
virtual void StopLearningPhase()
This is the counterpart of StartLearningPhase() and can be used to stop the learning phase.
void Print(Option_t *option="") const override
Print cache statistics.
Int_t AddBranch(TBranch *b, Bool_t subgbranches=kFALSE) override
Add a branch to the list of branches to be stored in the cache this function is called by the user vi...
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.
TTree * fTree
tree being iterated
TIterator & operator=(const TIterator &rhs) override
Overridden assignment operator. Does NOT copy the 'cursor' location!
TObject * Next() override
Go the next friend element.
TIterator * fLeafIter
current leaf sub-iterator.
Option_t * GetOption() const override
Returns the object option stored in the list.
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
Long64_t GetCacheAutoSize(Bool_t withDefault=kFALSE)
Used for automatic sizing of the cache.
virtual Int_t StopCacheLearningPhase()
Stop the cache learning phase.
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
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.
Long64_t GetMedianClusterSize()
Estimate the median cluster size for the TTree.
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.
Bool_t Notify() override
Function called when loading a new class library.
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.
virtual Bool_t InPlaceClone(TDirectory *newdirectory, const char *options="")
Copy the content to a new new file, update this TTree with the new location information and attach th...
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.
void Streamer(TBuffer &) override
Stream a class object.
std::atomic< Long64_t > fIMTZipBytes
! Zip bytes for the IMT flush baskets.
void RecursiveRemove(TObject *obj) override
Make sure that obj (which is being deleted or will soon be) is no longer referenced by this TTree.
TVirtualTreePlayer * GetPlayer()
Load the TTreePlayer (if not already done).
virtual Int_t MakeProxy(const char *classname, const char *macrofilename=nullptr, const char *cutfilename=nullptr, const char *option=nullptr, Int_t maxUnrolling=3)
Generate a skeleton analysis class for this Tree using TBranchProxy.
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.
void Draw(Option_t *opt) override
Default Draw method for all objects.
virtual TTree * GetFriend(const char *) const
Return a pointer to the TTree friend whose name or alias is friendname.
virtual Long64_t CopyEntries(TTree *tree, Long64_t nentries=-1, Option_t *option="", Bool_t needCopyAddresses=false)
Copy nentries from given tree to this tree.
virtual void SetNotify(TObject *obj)
Sets the address of the object to be notified when the tree is loaded.
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).
void Print(Option_t *option="") const override
Print a summary of the tree contents.
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.
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=nullptr, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
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...
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=nullptr)
Change branch address, dealing with clone trees properly.
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
TList * fExternalFriends
! List of TFriendsElement pointing to us and need to be notified of LoadTree. Content not owned.
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)
In case of a program crash, it will be possible to recover the data in the tree up to the last AutoSa...
Long64_t fMaxEntryLoop
Maximum number of entries to process.
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
void SortBranchesByTime()
Sorts top-level branches by the last average task time recorded per branch.
void Delete(Option_t *option="") override
Delete this tree from memory or/and disk.
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.
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 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...
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 Int_t MakeSelector(const char *selector=nullptr, Option_t *option="")
Generate skeleton selector class for this tree.
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
Bool_t EnableCache()
Enable the TTreeCache unless explicitly disabled for this TTree by a prior call to SetCacheSize(0).
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 void SetBranchStatus(const char *bname, Bool_t status=1, UInt_t *found=nullptr)
Set branch status to Process or DoNotProcess.
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 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 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
void Browse(TBrowser *) override
Browse content of the TTree.
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.
~TTree() override
Destructor.
void ImportClusterRanges(TTree *fromtree)
Appends the cluster range information stored in 'fromtree' to this tree, including the value of fAuto...
TClass * IsA() const override
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.
@ kSplitCollectionOfPointers
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
Write this object to the current directory.
TVirtualIndex * fTreeIndex
Pointer to the tree Index (if any)
void UseCurrentStyle() override
Replace current attributes by current style.
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 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 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.
UInt_t fNEntriesSinceSorting
! Number of entries processed since the last re-sorting of branches
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
virtual Int_t MakeCode(const char *filename=nullptr)
Generate a skeleton function for this tree.
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
void SetName(const char *name) override
Change the name of this tree.
virtual void RegisterExternalFriend(TFriendElement *)
Record a TFriendElement that we need to warn when the chain switches to a new file (typically this is...
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...
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 Int_t MakeClass(const char *classname=nullptr, Option_t *option="")
Generate a skeleton analysis class for this tree.
virtual const char * GetFriendAlias(TTree *) const
If the 'tree' is a friend, this method returns its alias name.
virtual void RemoveExternalFriend(TFriendElement *)
Removes external friend.
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 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
Defines a common interface to inspect/change the contents of an object that represents a collection.
virtual EDataType GetType() const =0
If the value type is a fundamental data type, return its type (see enumeration EDataType).
virtual TClass * GetValueClass() const =0
If the value type is a user-defined class, return a pointer to the TClass representing the value type...
virtual Bool_t HasPointers() const =0
Return true if the content is of type 'pointer to'.
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(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 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 Int_t MakeProxy(const char *classname, const char *macrofilename=nullptr, const char *cutfilename=nullptr, const char *option=nullptr, Int_t maxUnrolling=3)=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
Special implementation of ROOT::RRangeCast for TCollection, including a check that the cast target ty...
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
Bool_t IsImplicitMTEnabled()
Returns true if the implicit multi-threading in ROOT is enabled.
void CallRecursiveRemoveIfNeeded(TObject &obj)
call RecursiveRemove for obj if gROOT is valid and obj.TestBit(kMustCleanup) is true.
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,...
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Median(Long64_t n, const T *a, const Double_t *w=nullptr, Long64_t *work=nullptr)
Same as RMS.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Long64_t BinarySearch(Long64_t n, const T *array, T value)
Binary search in an array of n values to locate 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.