213      ::Error(
"TTreeReader::TTreeReader", 
"TTree is NULL!");
 
 
  241      std::string 
msg = 
"No TTree called ";
 
  243      msg += 
" was found in the selected TDirectory.";
 
  244      Error(
"TTreeReader", 
"%s", 
msg.c_str());
 
 
  254   for (std::deque<ROOT::Internal::TTreeReaderValueBase *>::const_iterator i = 
fValues.begin(), 
e = 
fValues.end();
 
  256      (*i)->MarkTreeReaderUnavailable();
 
 
  286      Error(
"Initialize", 
"We are not processing a TChain but the TEntryList contains sublists. Please " 
  287                          "provide a simple TEntryList with no sublists instead.");
 
  293   fDirector = std::make_unique<ROOT::Internal::TBranchProxyDirector>(
fTree, -1);
 
 
  339                 "The current tree in the TChain %s has changed (e.g. by TTree::Process) " 
  340                 "even though TTreeReader::SetEntry() was called, which switched the tree " 
  341                 "again. Did you mean to call TTreeReader::SetLocalEntry()?",
 
  351              "The TTree / TChain has an associated TEntryList. " 
  352              "TTreeReader ignores TEntryLists unless you construct the TTreeReader passing a TEntryList.");
 
  358         Error(
"SetEntryBase()", 
"There was an error while notifying the proxies.");
 
 
  382   for (
size_t i = 0; i < 
fValues.size(); ++i) {
 
  401      if (!
reader->GetProxy()) {
 
  428            if (
value->GetProxy())
 
 
  472      const auto *
frTree = fp->GetDirector()->GetTree();
 
  504      std::string 
msg = 
"Last entry available from main tree '" + 
mainTreeName + 
"' was " + std::to_string(
fEntry - 1) +
 
  505                        " but friend tree '" + 
frTreeName + 
"' has more entries beyond the end of the main tree.";
 
 
  539      Error(
"SetEntriesRange()", 
"Start entry (%lld) must be lower than the available entries (%lld).", 
beginEntry,
 
 
  585   tc->DropBranch(
"*", 
true);
 
 
  690         Warning(
"SetEntryBase()", 
"There was an issue opening the last file associated to the TChain " 
  706            Error(
"SetEntryBase()",
 
  707                  "The beginning entry specified via SetEntriesRange (%lld) is equal to or beyond the " 
  708                  "total number of entries in the dataset (%lld). Make sure to specify a " 
  709                  "beginning entry lower than the number of available entries.",
 
  789      if (fp->GetReadEntry() >= 0)
 
  793      const auto *
frTree = fp->GetDirector()->GetTree();
 
  801      if (!fp->HasIndex()) {
 
  802         std::string 
msg = 
"Cannot read entry " + std::to_string(
entry) + 
" from friend tree '" + 
frTreeName +
 
  803                           "'. The friend tree has less entries than the main tree. Make sure all trees " 
  804                           "of the dataset have the same number of entries.";
 
  805         throw std::runtime_error{
msg};
 
 
  859   TTree *tree = 
nullptr;
 
 
  872      Error(
"RegisterValueReader",
 
  873            "Error registering reader for %s: TTreeReaderValue/Array objects must be created before the call to Next() " 
  874            "/ SetEntry() / SetLocalEntry(), or after TTreeReader::Restart()!",
 
 
  887   std::deque<ROOT::Internal::TTreeReaderValueBase *>::iterator 
iReader =
 
  890      Error(
"DeregisterValueReader", 
"Cannot find reader of type %s for branch %s", 
reader->GetDerivedTypeName(),
 
  891            reader->fBranchName.Data());
 
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Base class of TTreeReaderValue.
 
@ kSetupMissingBranch
The specified branch cannot be found.
 
A chain is a collection of files containing TTree objects.
 
Describe directory structure in memory.
 
void GetObject(const char *namecycle, T *&ptr)
Get an object with proper type checking.
 
A List of entry numbers in a TTree or TChain.
 
virtual TList * GetLists() const
 
virtual Long64_t GetEntryAndTree(Long64_t index, Int_t &treenum)
Return the index of "index"-th non-zero entry in the TTree or TChain and the # of the corresponding t...
 
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 Long64_t GetN() const
 
A TFriendElement TF describes a TTree object TF in a file.
 
const char * GetName() const override
Returns name of object.
 
void PrependLink(Chain &chain)
Set this link as the head of the chain's list of notify subscribers.
 
void RemoveLink(Chain &chain)
Remove this link from a chain's list of notify subscribers.
 
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
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.
 
A simple, robust and fast interface to read values from ROOT columnar datasets such as TTree,...
 
TTreeReader()
Default constructor. Call SetTree to connect to a TTree.
 
ELoadTreeStatus fLoadTreeStatus
Indicator on how LoadTree was called 'last' time.
 
Long64_t GetEntries() const
Returns the number of entries of the TEntryList if one is provided, else of the TTree / TChain,...
 
std::deque< ROOT::Internal::TTreeReaderValueBase * > fValues
readers that use our director
 
EEntryStatus fEntryStatus
status of most recent read request
 
void SetTree(TTree *tree, TEntryList *entryList=nullptr)
Set (or update) the which tree to read from.
 
~TTreeReader() override
Tell all value readers that the tree reader does not exist anymore.
 
TNotifyLink< TTreeReader > fNotify
TTree and TChain will notify this object upon LoadTree, leading to a call to TTreeReader::Notify().
 
bool fProxiesSet
True if the proxies have been set, false otherwise.
 
@ kEntryNotFound
the tree entry number does not exist
 
@ kIndexedFriendNoMatch
A friend with TTreeIndex doesn't have an entry for this index.
 
@ kEntryUnknownError
LoadTree return less than -6, likely a 'newer' error code.
 
@ kEntryDictionaryError
problem reading dictionary info from tree
 
@ kMissingBranchWhenSwitchingTree
A branch was not found when switching to the next TTree in the chain.
 
@ kEntryBeyondEnd
last entry loop has reached its end
 
@ kEntryChainFileError
problem in opening a chain's file
 
@ kEntryNoTree
the tree does not exist
 
@ kEntryValid
data read okay
 
bool fSetEntryBaseCallingLoadTree
True if during the LoadTree execution triggered by SetEntryBase.
 
bool RegisterValueReader(ROOT::Internal::TTreeReaderValueBase *reader)
Add a value reader for this tree.
 
TTree * fTree
tree that's read
 
bool fWarnAboutLongerFriends
 
std::set< std::string > fMissingProxies
 
EEntryStatus SetEntriesRange(Long64_t beginEntry, Long64_t endEntry)
Set the range of entries to be loaded by Next(); end will not be loaded.
 
EEntryStatus SetEntryBase(Long64_t entry, bool local)
Load an entry into the tree, return the status of the read.
 
void WarnIfFriendsHaveMoreEntries()
 
@ kInternalLoadTree
Notify/LoadTree was last called from SetEntryBase.
 
@ kMissingBranchFromTree
Missing expected branch when loading new tree.
 
@ kNoTree
default state, no TTree is connected (formerly 'Zombie' state)
 
@ kExternalLoadTree
User code called LoadTree directly.
 
@ kLoadTreeNone
Notify has not been called yet.
 
void Initialize()
Initialization of the director.
 
void Restart()
Restart a Next() loop from entry 0 (of TEntryList index 0 of fEntryList is set).
 
TEntryList * fEntryList
entry list to be used
 
Long64_t fEntry
Current (non-local) entry of fTree or of fEntryList if set.
 
bool Notify() override
Notify director and values of a change in tree.
 
Long64_t fBeginEntry
This allows us to propagate the range to the TTreeCache.
 
void DeregisterValueReader(ROOT::Internal::TTreeReaderValueBase *reader)
Remove a value reader for this tree.
 
@ kBitIsExternalTree
we do not own the tree
 
@ kBitHaveWarnedAboutEntryListAttachedToTTree
the tree had a TEntryList and we have warned about that
 
@ kBitIsChain
our tree is a chain
 
bool SetProxies()
Tell readers we now have a tree.
 
std::set< std::string > fSuppressErrorsForMissingBranches
 
ROOT::Internal::TFriendProxy & AddFriendProxy(std::size_t friendIdx)
 
std::vector< std::unique_ptr< ROOT::Internal::TFriendProxy > > fFriendProxies
Proxies to friend trees, created in TTreeReader[Value,Array]::CreateProxy.
 
std::unique_ptr< ROOT::Internal::TBranchProxyDirector > fDirector
proxying director
 
Long64_t fEndEntry
The end of the entry loop.
 
EEntryStatus SetEntry(Long64_t entry)
Set the next entry (or index of the TEntryList if that is set).
 
static constexpr const char *const fgEntryStatusText[kEntryUnknownError+1]
 
Long64_t GetCurrentEntry() const
Returns the index of the current entry being read.
 
A TTree represents a columnar dataset.
 
virtual Int_t StopCacheLearningPhase()
Stop the cache learning phase.
 
virtual Int_t AddBranchToCache(const char *bname, bool subbranches=false)
Add branch with name bname to the Tree cache.
 
TFile * GetCurrentFile() const
Return pointer to the current file.
 
virtual TEntryList * GetEntryList()
Returns the entry list assigned to this tree.
 
virtual Long64_t GetEntries() const
 
virtual TTree * GetTree() const
 
virtual Long64_t LoadTree(Long64_t entry)
Set current entry.
 
virtual Long64_t GetEntriesFast() const
Return a number greater or equal to the total number of entries in the dataset.
 
virtual Int_t SetCacheEntryRange(Long64_t first, Long64_t last)
interface to TTreeCache to set the cache entry range
 
virtual TList * GetListOfFriends() const
 
static constexpr Long64_t kMaxEntries
 
std::vector< std::string > GetTreeFullPaths(const TTree &tree)