The head node of a RDF computation graph.
This class is responsible of running the event loop.
Definition at line 56 of file RLoopManager.hxx.
Classes | |
class | TCallback |
class | TOneTimeCallback |
Public Member Functions | |
RLoopManager (const RLoopManager &)=delete | |
RLoopManager (std::unique_ptr< RDataSource > ds, const ColumnNames_t &defaultBranches) | |
RLoopManager (TTree *tree, const ColumnNames_t &defaultBranches) | |
RLoopManager (ULong64_t nEmptyEntries) | |
void | AddColumnAlias (const std::string &alias, const std::string &colName) |
void | AddFilterName (std::vector< std::string > &) |
End of recursive chain of calls, does nothing. More... | |
void | Book (RDFInternal::RActionBase *actionPtr) |
void | Book (RFilterBase *filterPtr) |
void | Book (RRangeBase *rangePtr) |
bool | CheckFilters (unsigned int, Long64_t) final |
void | Deregister (RDFInternal::RActionBase *actionPtr) |
void | Deregister (RFilterBase *filterPtr) |
void | Deregister (RRangeBase *rangePtr) |
const std::map< std::string, std::string > & | GetAliasMap () const |
std::vector< RDFInternal::RActionBase * > | GetAllActions () |
For all the actions, either booked or run. More... | |
std::vector< RDFInternal::RActionBase * > | GetBookedActions () |
const ColumnNames_t & | GetBranchNames () |
Return all valid TTree::Branch names (caching results for subsequent calls). More... | |
RDataSource * | GetDataSource () const |
const ColumnNames_t & | GetDefaultColumnNames () const |
Return the list of default columns – empty if none was provided when constructing the RDataFrame. More... | |
::TDirectory * | GetDirectory () const |
std::vector< std::string > | GetFiltersNames () |
For each booked filter, returns either the name or "Unnamed Filter". More... | |
std::shared_ptr< ROOT::Internal::RDF::GraphDrawing::GraphNode > | GetGraph () |
unsigned int | GetID () const |
RLoopManager * | GetLoopManagerUnchecked () final |
ULong64_t | GetNEmptyEntries () const |
unsigned int | GetNSlots () const |
TTree * | GetTree () const |
void | IncrChildrenCount () final |
void | Jit () |
Add RDF nodes that require just-in-time compilation to the computation graph. More... | |
void | JitDeclarations () |
Declare to the interpreter type aliases and other entities required by RDF jitted nodes. More... | |
RLoopManager & | operator= (const RLoopManager &)=delete |
void | PartialReport (ROOT::RDF::RCutFlowReport &) const final |
End of recursive chain of calls, does nothing. More... | |
void | RegisterCallback (ULong64_t everyNEvents, std::function< void(unsigned int)> &&f) |
void | Report (ROOT::RDF::RCutFlowReport &rep) const final |
Call FillReport on all booked filters. More... | |
void | Run () |
Start the event loop with a different mechanism depending on IMT/no IMT, data source/no data source. More... | |
void | SetTree (const std::shared_ptr< TTree > &tree) |
void | StopProcessing () final |
void | ToJitDeclare (const std::string &s) |
void | ToJitExec (const std::string &s) |
Public Member Functions inherited from ROOT::Detail::RDF::RNodeBase | |
RNodeBase (RLoopManager *lm=nullptr) | |
virtual | ~RNodeBase () |
virtual void | AddFilterName (std::vector< std::string > &filters)=0 |
virtual bool | CheckFilters (unsigned int, Long64_t)=0 |
virtual std::shared_ptr< ROOT::Internal::RDF::GraphDrawing::GraphNode > | GetGraph ()=0 |
virtual RLoopManager * | GetLoopManagerUnchecked () |
virtual void | IncrChildrenCount ()=0 |
virtual void | PartialReport (ROOT::RDF::RCutFlowReport &) const =0 |
virtual void | Report (ROOT::RDF::RCutFlowReport &) const =0 |
virtual void | ResetChildrenCount () |
virtual void | StopProcessing ()=0 |
Private Types | |
using | Callback_t = std::function< void(unsigned int)> |
enum class | ELoopType { kROOTFiles , kROOTFilesMT , kNoFiles , kNoFilesMT , kDataSource , kDataSourceMT } |
using | RDataSource = ROOT::RDF::RDataSource |
Private Member Functions | |
void | CheckIndexedFriends () |
void | CleanUpNodes () |
Perform clean-up operations. To be called at the end of each event loop. More... | |
void | CleanUpTask (unsigned int slot) |
Perform clean-up operations. To be called at the end of each task execution. More... | |
void | EvalChildrenCounts () |
Trigger counting of number of children nodes for each node of the functional graph. More... | |
void | InitNodes () |
Initialize all nodes of the functional graph before running the event loop. More... | |
void | InitNodeSlots (TTreeReader *r, unsigned int slot) |
Build TTreeReaderValues for all nodes This method loops over all filters, actions and other booked objects and calls their InitRDFValues methods. More... | |
void | RunAndCheckFilters (unsigned int slot, Long64_t entry) |
Execute actions and make sure named filters are called for each event. More... | |
void | RunDataSource () |
Run event loop over data accessed through a DataSource, in sequence. More... | |
void | RunDataSourceMT () |
Run event loop over data accessed through a DataSource, in parallel. More... | |
void | RunEmptySource () |
Run event loop with no source files, in sequence. More... | |
void | RunEmptySourceMT () |
Run event loop with no source files, in parallel. More... | |
void | RunTreeProcessorMT () |
Run event loop over one or multiple ROOT files, in parallel. More... | |
void | RunTreeReader () |
Run event loop over one or multiple ROOT files, in sequence. More... | |
Static Private Member Functions | |
static unsigned int | GetNextID () |
Private Attributes | |
std::map< std::string, std::string > | fAliasColumnNameMap |
ColumnNameAlias-columnName pairs. More... | |
std::vector< RDFInternal::RActionBase * > | fBookedActions |
Non-owning pointers to actions to be run. More... | |
std::vector< RFilterBase * > | fBookedFilters |
std::vector< RFilterBase * > | fBookedNamedFilters |
Contains a subset of fBookedFilters, i.e. only the named filters. More... | |
std::vector< RRangeBase * > | fBookedRanges |
std::vector< TCallback > | fCallbacks |
Registered callbacks. More... | |
std::vector< TOneTimeCallback > | fCallbacksOnce |
Registered callbacks to invoke just once before running the loop. More... | |
std::vector< RCustomColumnBase * > | fCustomColumns |
Non-owning container of all custom columns created so far. More... | |
const std::unique_ptr< RDataSource > | fDataSource |
Owning pointer to a data-source object. Null if no data-source. More... | |
const ColumnNames_t | fDefaultColumns |
const unsigned int | fID = GetNextID() |
A unique ID that identifies the computation graph that starts with this RLoopManager. More... | |
const ELoopType | fLoopType |
The kind of event loop that is going to be run (e.g. on ROOT files, on no files) More... | |
bool | fMustRunNamedFilters {true} |
const ULong64_t | fNEmptyEntries {0} |
const unsigned int | fNSlots {1} |
std::vector< RDFInternal::RActionBase * > | fRunActions |
Non-owning pointers to actions already run. More... | |
std::string | fToJitDeclare |
Code that should be just-in-time declared right before the event loop. More... | |
std::string | fToJitExec |
Code that should be just-in-time executed right before the event loop. More... | |
std::shared_ptr< TTree > | fTree {nullptr} |
Shared pointer to the input TTree. More... | |
ColumnNames_t | fValidBranchNames |
Cache of the tree/chain branch names. Never access directy, always use GetBranchNames(). More... | |
Additional Inherited Members | |
Protected Attributes inherited from ROOT::Detail::RDF::RNodeBase | |
RLoopManager * | fLoopManager |
unsigned int | fNChildren {0} |
Number of nodes of the functional graph hanging from this object. More... | |
unsigned int | fNStopsReceived {0} |
Number of times that a children node signaled to stop processing entries. More... | |
#include <ROOT/RDF/RLoopManager.hxx>
|
private |
Definition at line 59 of file RLoopManager.hxx.
|
private |
Definition at line 57 of file RLoopManager.hxx.
|
strongprivate |
Enumerator | |
---|---|
kROOTFiles | |
kROOTFilesMT | |
kNoFiles | |
kNoFilesMT | |
kDataSource | |
kDataSourceMT |
Definition at line 58 of file RLoopManager.hxx.
RLoopManager::RLoopManager | ( | TTree * | tree, |
const ColumnNames_t & | defaultBranches | ||
) |
Definition at line 188 of file RLoopManager.cxx.
RLoopManager::RLoopManager | ( | ULong64_t | nEmptyEntries | ) |
Definition at line 195 of file RLoopManager.cxx.
RLoopManager::RLoopManager | ( | std::unique_ptr< RDataSource > | ds, |
const ColumnNames_t & | defaultBranches | ||
) |
Definition at line 201 of file RLoopManager.cxx.
|
delete |
|
inline |
Definition at line 173 of file RLoopManager.hxx.
|
inlinevirtual |
End of recursive chain of calls, does nothing.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 179 of file RLoopManager.hxx.
void RLoopManager::Book | ( | RDFInternal::RActionBase * | actionPtr | ) |
Definition at line 530 of file RLoopManager.cxx.
void RLoopManager::Book | ( | RFilterBase * | filterPtr | ) |
Definition at line 541 of file RLoopManager.cxx.
void RLoopManager::Book | ( | RRangeBase * | rangePtr | ) |
Definition at line 556 of file RLoopManager.cxx.
|
finalvirtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 567 of file RLoopManager.cxx.
|
private |
Definition at line 210 of file RLoopManager.cxx.
|
private |
Perform clean-up operations. To be called at the end of each event loop.
Definition at line 423 of file RLoopManager.cxx.
|
private |
Perform clean-up operations. To be called at the end of each task execution.
Definition at line 447 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RDFInternal::RActionBase * | actionPtr | ) |
Definition at line 535 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RFilterBase * | filterPtr | ) |
Definition at line 550 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RRangeBase * | rangePtr | ) |
Definition at line 561 of file RLoopManager.cxx.
|
private |
Trigger counting of number of children nodes for each node of the functional graph.
This is done once before starting the event loop. Each action sends an increase children count
signal upstream, which is propagated until RLoopManager. Each time a node receives the signal, in increments its children counter. Each node only propagates the signal once, even if it receives it multiple times. Named filters also send an increase children count
signal, just like actions, as they always execute during the event loop so the graph branch they belong to must count as active even if it does not end in an action.
Definition at line 484 of file RLoopManager.cxx.
|
inline |
Definition at line 174 of file RLoopManager.hxx.
std::vector< RDFInternal::RActionBase * > RLoopManager::GetAllActions | ( | ) |
For all the actions, either booked or run.
Definition at line 597 of file RLoopManager.cxx.
|
inline |
Definition at line 186 of file RLoopManager.hxx.
const ColumnNames_t & RLoopManager::GetBranchNames | ( | ) |
Return all valid TTree::Branch names (caching results for subsequent calls).
Never use fBranchNames directy, always request it through this method.
Definition at line 625 of file RLoopManager.cxx.
|
inline |
Definition at line 156 of file RLoopManager.hxx.
const ColumnNames_t & RLoopManager::GetDefaultColumnNames | ( | ) | const |
Return the list of default columns – empty if none was provided when constructing the RDataFrame.
Definition at line 520 of file RLoopManager.cxx.
::TDirectory * ROOT::Detail::RDF::RLoopManager::GetDirectory | ( | ) | const |
std::vector< std::string > RLoopManager::GetFiltersNames | ( | ) |
For each booked filter, returns either the name or "Unnamed Filter".
Definition at line 587 of file RLoopManager.cxx.
|
virtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 605 of file RLoopManager.cxx.
|
inline |
Definition at line 176 of file RLoopManager.hxx.
|
inlinefinalvirtual |
Reimplemented from ROOT::Detail::RDF::RNodeBase.
Definition at line 150 of file RLoopManager.hxx.
|
inline |
Definition at line 155 of file RLoopManager.hxx.
|
staticprivate |
Definition at line 492 of file RLoopManager.cxx.
|
inline |
Definition at line 164 of file RLoopManager.hxx.
TTree * RLoopManager::GetTree | ( | ) | const |
Definition at line 525 of file RLoopManager.cxx.
|
inlinefinalvirtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 169 of file RLoopManager.hxx.
|
private |
Initialize all nodes of the functional graph before running the event loop.
This method is called once per event-loop and performs generic initialization operations that do not depend on the specific processing slot (i.e. operations that are common for all threads).
Definition at line 409 of file RLoopManager.cxx.
|
private |
Build TTreeReaderValues for all nodes This method loops over all filters, actions and other booked objects and calls their InitRDFValues
methods.
It is called once per node per slot, before running the event loop. It also informs each node of the TTreeReader that a particular slot will be using.
Definition at line 395 of file RLoopManager.cxx.
void RLoopManager::Jit | ( | ) |
Add RDF nodes that require just-in-time compilation to the computation graph.
This method also invokes JitDeclarations() if needed, and clears the fToJitExec
member variable.
Definition at line 468 of file RLoopManager.cxx.
void RLoopManager::JitDeclarations | ( | ) |
Declare to the interpreter type aliases and other entities required by RDF jitted nodes.
This method clears the fToJitDeclare
member variable.
Definition at line 457 of file RLoopManager.cxx.
|
delete |
|
inlinefinalvirtual |
End of recursive chain of calls, does nothing.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 167 of file RLoopManager.hxx.
void RLoopManager::RegisterCallback | ( | ULong64_t | everyNEvents, |
std::function< void(unsigned int)> && | f | ||
) |
Definition at line 579 of file RLoopManager.cxx.
|
finalvirtual |
Call FillReport
on all booked filters.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 573 of file RLoopManager.cxx.
void RLoopManager::Run | ( | ) |
Start the event loop with a different mechanism depending on IMT/no IMT, data source/no data source.
Also perform a few setup and clean-up operations (jit actions if necessary, clear booked actions after the loop...).
Definition at line 501 of file RLoopManager.cxx.
Execute actions and make sure named filters are called for each event.
Named filters must be called even if the analysis logic would not require it, lest they report confusing results.
Definition at line 380 of file RLoopManager.cxx.
|
private |
Run event loop over data accessed through a DataSource, in sequence.
Definition at line 321 of file RLoopManager.cxx.
|
private |
Run event loop over data accessed through a DataSource, in parallel.
Definition at line 345 of file RLoopManager.cxx.
|
private |
Run event loop with no source files, in sequence.
Definition at line 267 of file RLoopManager.cxx.
|
private |
Run event loop with no source files, in parallel.
Definition at line 229 of file RLoopManager.cxx.
|
private |
Run event loop over one or multiple ROOT files, in parallel.
Definition at line 277 of file RLoopManager.cxx.
|
private |
Run event loop over one or multiple ROOT files, in sequence.
Definition at line 304 of file RLoopManager.cxx.
Definition at line 168 of file RLoopManager.hxx.
|
inlinefinalvirtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 170 of file RLoopManager.hxx.
|
inline |
Definition at line 171 of file RLoopManager.hxx.
|
inline |
Definition at line 172 of file RLoopManager.hxx.
|
private |
ColumnNameAlias-columnName pairs.
Definition at line 115 of file RLoopManager.hxx.
|
private |
Non-owning pointers to actions to be run.
Definition at line 98 of file RLoopManager.hxx.
|
private |
Definition at line 100 of file RLoopManager.hxx.
|
private |
Contains a subset of fBookedFilters, i.e. only the named filters.
Definition at line 101 of file RLoopManager.hxx.
|
private |
Definition at line 102 of file RLoopManager.hxx.
|
private |
Registered callbacks.
Definition at line 116 of file RLoopManager.hxx.
|
private |
Registered callbacks to invoke just once before running the loop.
Definition at line 117 of file RLoopManager.hxx.
|
private |
Non-owning container of all custom columns created so far.
Definition at line 122 of file RLoopManager.hxx.
|
private |
Owning pointer to a data-source object. Null if no data-source.
Definition at line 114 of file RLoopManager.hxx.
|
private |
Definition at line 107 of file RLoopManager.hxx.
|
private |
A unique ID that identifies the computation graph that starts with this RLoopManager.
Used, for example, to jit objects in a namespace reserved for this computation graph
Definition at line 120 of file RLoopManager.hxx.
|
private |
The kind of event loop that is going to be run (e.g. on ROOT files, on no files)
Definition at line 111 of file RLoopManager.hxx.
|
private |
Definition at line 110 of file RLoopManager.hxx.
|
private |
Definition at line 108 of file RLoopManager.hxx.
|
private |
Definition at line 109 of file RLoopManager.hxx.
|
private |
Non-owning pointers to actions already run.
Definition at line 99 of file RLoopManager.hxx.
|
private |
Code that should be just-in-time declared right before the event loop.
Definition at line 112 of file RLoopManager.hxx.
|
private |
Code that should be just-in-time executed right before the event loop.
Definition at line 113 of file RLoopManager.hxx.
|
private |
Shared pointer to the input TTree.
It does not delete the pointee if the TTree/TChain was passed directly as an argument to RDataFrame's ctor (in which case we let users retain ownership).
Definition at line 106 of file RLoopManager.hxx.
|
private |
Cache of the tree/chain branch names. Never access directy, always use GetBranchNames().
Definition at line 124 of file RLoopManager.hxx.