The head node of a RDF computation graph.
This class is responsible of running the event loop.
Definition at line 107 of file RLoopManager.hxx.
Public Member Functions | |
RLoopManager (const RLoopManager &)=delete | |
RLoopManager (ROOT::RDF::Experimental::RDatasetSpec &&spec) | |
RLoopManager (std::unique_ptr< RDataSource > ds, const ColumnNames_t &defaultBranches) | |
RLoopManager (TTree *tree, const ColumnNames_t &defaultBranches) | |
RLoopManager (ULong64_t nEmptyEntries) | |
void | AddDataSourceColumnReaders (const std::string &col, std::vector< std::unique_ptr< RColumnReaderBase > > &&readers, const std::type_info &ti) |
void | AddFilterName (std::vector< std::string > &) |
End of recursive chain of calls, does nothing. More... | |
void | AddSampleCallback (ROOT::RDF::SampleCallback_t &&callback) |
std::shared_ptr< RColumnReaderBase > | AddTreeColumnReader (unsigned int slot, const std::string &col, std::unique_ptr< RColumnReaderBase > &&reader, const std::type_info &ti) |
Register a new RTreeColumnReader with this RLoopManager. More... | |
bool | CheckFilters (unsigned int, Long64_t) final |
void | Deregister (RDefineBase *definePtr) |
void | Deregister (RDFInternal::RActionBase *actionPtr) |
void | Deregister (RDFInternal::RVariationBase *varPtr) |
void | Deregister (RFilterBase *filterPtr) |
void | Deregister (RRangeBase *rangePtr) |
std::vector< RDFInternal::RActionBase * > | GetAllActions () const |
Return all actions, either booked or already run. More... | |
const ColumnNames_t & | GetBranchNames () |
Return all valid TTree::Branch names (caching results for subsequent calls). More... | |
std::shared_ptr< RColumnReaderBase > | GetDatasetColumnReader (unsigned int slot, const std::string &col, const std::type_info &ti) const |
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 (std::unordered_map< void *, std::shared_ptr< ROOT::Internal::RDF::GraphDrawing::GraphNode > > &visitedMap) |
std::vector< RNodeBase * > | GetGraphEdges () const |
Return all graph edges known to RLoopManager This includes Filters and Ranges but not Defines. More... | |
RLoopManager * | GetLoopManagerUnchecked () final |
ULong64_t | GetNEmptyEntries () const |
unsigned int | GetNRuns () const |
unsigned int | GetNSlots () const |
TTree * | GetTree () const |
bool | HasDataSourceColumnReaders (const std::string &col, const std::type_info &ti) const |
Return true if AddDataSourceColumnReaders was called for column name col. More... | |
void | IncrChildrenCount () final |
void | Jit () |
Add RDF nodes that require just-in-time compilation to the computation graph. More... | |
void | JitDeclarations () |
RLoopManager & | operator= (const RLoopManager &)=delete |
void | PartialReport (ROOT::RDF::RCutFlowReport &) const final |
End of recursive chain of calls, does nothing. More... | |
void | Register (RDefineBase *definePtr) |
void | Register (RDFInternal::RActionBase *actionPtr) |
void | Register (RDFInternal::RVariationBase *varPtr) |
void | Register (RFilterBase *filterPtr) |
void | Register (RRangeBase *rangePtr) |
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 (std::shared_ptr< TTree > tree) |
void | StopProcessing () final |
void | ToJitExec (const std::string &) const |
![]() | |
RNodeBase (const std::vector< std::string > &variations={}, 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 (std::unordered_map< void *, std::shared_ptr< ROOT::Internal::RDF::GraphDrawing::GraphNode > > &visitedMap)=0 |
virtual RLoopManager * | GetLoopManagerUnchecked () |
const std::vector< std::string > & | GetVariations () const |
virtual std::shared_ptr< RNodeBase > | GetVariedFilter (const std::string &) |
Return a clone of this node that acts as a Filter working with values in the variationName "universe". More... | |
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 | ColumnNames_t = std::vector< std::string > |
enum class | ELoopType { kROOTFiles , kROOTFilesMT , kNoFiles , kNoFilesMT , kDataSource , kDataSourceMT } |
Private Member Functions | |
void | CleanUpNodes () |
Perform clean-up operations. To be called at the end of each event loop. More... | |
void | CleanUpTask (TTreeReader *r, 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 InitSlot method, to get them ready for running a task. 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... | |
void | SetupSampleCallbacks (TTreeReader *r, unsigned int slot) |
void | UpdateSampleInfo (unsigned int slot, const std::pair< ULong64_t, ULong64_t > &range) |
void | UpdateSampleInfo (unsigned int slot, TTreeReader &r) |
Private Attributes | |
Long64_t | fBeginEntry {0} |
std::vector< RDFInternal::RActionBase * > | fBookedActions |
Non-owning pointers to actions to be run. More... | |
std::vector< RDefineBase * > | fBookedDefines |
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< RDFInternal::RVariationBase * > | fBookedVariations |
std::vector< RDFInternal::RCallback > | fCallbacks |
Registered callbacks. More... | |
std::vector< RDFInternal::ROneTimeCallback > | fCallbacksOnce |
Registered callbacks to invoke just once before running the loop. More... | |
std::vector< std::unordered_map< std::string, std::shared_ptr< RColumnReaderBase > > > | fDatasetColumnReaders |
Readers for TTree/RDataSource columns (one per slot), shared by all nodes in the computation graph. More... | |
const std::unique_ptr< RDataSource > | fDataSource |
Owning pointer to a data-source object. Null if no data-source. More... | |
const ColumnNames_t | fDefaultColumns |
Long64_t | fEndEntry {std::numeric_limits<Long64_t>::max()} |
std::vector< std::unique_ptr< TTree > > | fFriends |
Friends of the fTree. Only used if we constructed fTree ourselves. 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} |
RDFInternal::RNewSampleNotifier | fNewSampleNotifier |
ROOT::Internal::TreeUtils::RNoCleanupNotifier | fNoCleanupNotifier |
unsigned int | fNRuns {0} |
Number of event loops run. More... | |
const unsigned int | fNSlots {1} |
std::vector< RDFInternal::RActionBase * > | fRunActions |
Non-owning pointers to actions already run. More... | |
std::vector< ROOT::RDF::SampleCallback_t > | fSampleCallbacks |
Registered callbacks to call at the beginning of each "data block". More... | |
std::vector< ROOT::RDF::RSampleInfo > | fSampleInfos |
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... | |
Friends | |
struct | RCallCleanUpTask |
Additional Inherited Members | |
![]() | |
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... | |
std::vector< std::string > | fVariations |
List of systematic variations that affect this node. More... | |
#include <ROOT/RDF/RLoopManager.hxx>
|
private |
Definition at line 108 of file RLoopManager.hxx.
|
strongprivate |
Enumerator | |
---|---|
kROOTFiles | |
kROOTFilesMT | |
kNoFiles | |
kNoFilesMT | |
kDataSource | |
kDataSourceMT |
Definition at line 109 of file RLoopManager.hxx.
RLoopManager::RLoopManager | ( | TTree * | tree, |
const ColumnNames_t & | defaultBranches | ||
) |
Definition at line 347 of file RLoopManager.cxx.
RLoopManager::RLoopManager | ( | ULong64_t | nEmptyEntries | ) |
Definition at line 355 of file RLoopManager.cxx.
RLoopManager::RLoopManager | ( | std::unique_ptr< RDataSource > | ds, |
const ColumnNames_t & | defaultBranches | ||
) |
Definition at line 362 of file RLoopManager.cxx.
RLoopManager::RLoopManager | ( | ROOT::RDF::Experimental::RDatasetSpec && | spec | ) |
Definition at line 370 of file RLoopManager.cxx.
|
delete |
void RLoopManager::AddDataSourceColumnReaders | ( | const std::string & | col, |
std::vector< std::unique_ptr< RColumnReaderBase > > && | readers, | ||
const std::type_info & | ti | ||
) |
Definition at line 1031 of file RLoopManager.cxx.
|
inlinevirtual |
End of recursive chain of calls, does nothing.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 214 of file RLoopManager.hxx.
void RLoopManager::AddSampleCallback | ( | ROOT::RDF::SampleCallback_t && | callback | ) |
Definition at line 1069 of file RLoopManager.cxx.
std::shared_ptr< RColumnReaderBase > RLoopManager::AddTreeColumnReader | ( | unsigned int | slot, |
const std::string & | col, | ||
std::unique_ptr< RColumnReaderBase > && | reader, | ||
const std::type_info & | ti | ||
) |
Register a new RTreeColumnReader with this RLoopManager.
Definition at line 1047 of file RLoopManager.cxx.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 927 of file RLoopManager.cxx.
|
private |
Perform clean-up operations. To be called at the end of each event loop.
Definition at line 745 of file RLoopManager.cxx.
|
private |
Perform clean-up operations. To be called at the end of each task execution.
Definition at line 770 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RDefineBase * | definePtr | ) |
Definition at line 911 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RDFInternal::RActionBase * | actionPtr | ) |
Definition at line 875 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RDFInternal::RVariationBase * | varPtr | ) |
Definition at line 921 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RFilterBase * | filterPtr | ) |
Definition at line 890 of file RLoopManager.cxx.
void RLoopManager::Deregister | ( | RRangeBase * | rangePtr | ) |
Definition at line 901 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 816 of file RLoopManager.cxx.
std::vector< RDFInternal::RActionBase * > RLoopManager::GetAllActions | ( | ) | const |
Return all actions, either booked or already run.
Definition at line 980 of file RLoopManager.cxx.
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 1013 of file RLoopManager.cxx.
std::shared_ptr< RColumnReaderBase > RLoopManager::GetDatasetColumnReader | ( | unsigned int | slot, |
const std::string & | col, | ||
const std::type_info & | ti | ||
) | const |
Definition at line 1059 of file RLoopManager.cxx.
|
inline |
Definition at line 182 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 860 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 962 of file RLoopManager.cxx.
|
virtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 988 of file RLoopManager.cxx.
std::vector< RNodeBase * > RLoopManager::GetGraphEdges | ( | ) | const |
Return all graph edges known to RLoopManager This includes Filters and Ranges but not Defines.
Definition at line 972 of file RLoopManager.cxx.
|
inlinefinalvirtual |
Reimplemented from ROOT::Detail::RDF::RNodeBase.
Definition at line 176 of file RLoopManager.hxx.
|
inline |
Definition at line 181 of file RLoopManager.hxx.
|
inline |
Definition at line 203 of file RLoopManager.hxx.
|
inline |
Definition at line 194 of file RLoopManager.hxx.
TTree * RLoopManager::GetTree | ( | ) | const |
Definition at line 865 of file RLoopManager.cxx.
bool RLoopManager::HasDataSourceColumnReaders | ( | const std::string & | col, |
const std::type_info & | ti | ||
) | const |
Return true if AddDataSourceColumnReaders was called for column name col.
Definition at line 1022 of file RLoopManager.cxx.
|
inlinefinalvirtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 199 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 733 of file RLoopManager.cxx.
|
private |
Build TTreeReaderValues for all nodes This method loops over all filters, actions and other booked objects and calls their InitSlot
method, to get them ready for running a task.
Definition at line 676 of file RLoopManager.cxx.
void RLoopManager::Jit | ( | ) |
Add RDF nodes that require just-in-time compilation to the computation graph.
This method also clears the contents of GetCodeToJit().
Definition at line 791 of file RLoopManager.cxx.
void ROOT::Detail::RDF::RLoopManager::JitDeclarations | ( | ) |
|
delete |
|
inlinefinalvirtual |
End of recursive chain of calls, does nothing.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 197 of file RLoopManager.hxx.
void RLoopManager::Register | ( | RDefineBase * | definePtr | ) |
Definition at line 906 of file RLoopManager.cxx.
void RLoopManager::Register | ( | RDFInternal::RActionBase * | actionPtr | ) |
Definition at line 870 of file RLoopManager.cxx.
void RLoopManager::Register | ( | RDFInternal::RVariationBase * | varPtr | ) |
Definition at line 916 of file RLoopManager.cxx.
void RLoopManager::Register | ( | RFilterBase * | filterPtr | ) |
Definition at line 881 of file RLoopManager.cxx.
void RLoopManager::Register | ( | RRangeBase * | rangePtr | ) |
Definition at line 896 of file RLoopManager.cxx.
void RLoopManager::RegisterCallback | ( | ULong64_t | everyNEvents, |
std::function< void(unsigned int)> && | f | ||
) |
Definition at line 954 of file RLoopManager.cxx.
|
finalvirtual |
Call FillReport
on all booked filters.
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 933 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 826 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 655 of file RLoopManager.cxx.
|
private |
Run event loop over data accessed through a DataSource, in sequence.
Definition at line 582 of file RLoopManager.cxx.
|
private |
Run event loop over data accessed through a DataSource, in parallel.
Definition at line 613 of file RLoopManager.cxx.
|
private |
Run event loop with no source files, in sequence.
Definition at line 482 of file RLoopManager.cxx.
|
private |
Run event loop with no source files, in parallel.
Definition at line 436 of file RLoopManager.cxx.
|
private |
Run event loop over one or multiple ROOT files, in parallel.
Definition at line 499 of file RLoopManager.cxx.
|
private |
Run event loop over one or multiple ROOT files, in sequence.
Definition at line 545 of file RLoopManager.cxx.
void RLoopManager::SetTree | ( | std::shared_ptr< TTree > | tree | ) |
Definition at line 939 of file RLoopManager.cxx.
|
private |
Definition at line 692 of file RLoopManager.cxx.
|
inlinefinalvirtual |
Implements ROOT::Detail::RDF::RNodeBase.
Definition at line 200 of file RLoopManager.hxx.
void RLoopManager::ToJitExec | ( | const std::string & | code | ) | const |
Definition at line 948 of file RLoopManager.cxx.
|
private |
Definition at line 706 of file RLoopManager.cxx.
|
private |
Definition at line 711 of file RLoopManager.cxx.
|
friend |
Definition at line 111 of file RLoopManager.hxx.
|
private |
Definition at line 124 of file RLoopManager.hxx.
|
private |
Non-owning pointers to actions to be run.
Definition at line 113 of file RLoopManager.hxx.
|
private |
Definition at line 118 of file RLoopManager.hxx.
|
private |
Definition at line 115 of file RLoopManager.hxx.
|
private |
Contains a subset of fBookedFilters, i.e. only the named filters.
Definition at line 116 of file RLoopManager.hxx.
|
private |
Definition at line 117 of file RLoopManager.hxx.
|
private |
Definition at line 119 of file RLoopManager.hxx.
|
private |
Registered callbacks.
Definition at line 133 of file RLoopManager.hxx.
|
private |
Registered callbacks to invoke just once before running the loop.
Definition at line 135 of file RLoopManager.hxx.
|
private |
Readers for TTree/RDataSource columns (one per slot), shared by all nodes in the computation graph.
Definition at line 143 of file RLoopManager.hxx.
|
private |
Owning pointer to a data-source object. Null if no data-source.
Definition at line 132 of file RLoopManager.hxx.
|
private |
Definition at line 127 of file RLoopManager.hxx.
Definition at line 125 of file RLoopManager.hxx.
|
private |
Friends of the fTree. Only used if we constructed fTree ourselves.
Definition at line 126 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 131 of file RLoopManager.hxx.
|
private |
Definition at line 130 of file RLoopManager.hxx.
|
private |
Definition at line 128 of file RLoopManager.hxx.
|
private |
Definition at line 138 of file RLoopManager.hxx.
|
private |
Definition at line 148 of file RLoopManager.hxx.
|
private |
Number of event loops run.
Definition at line 140 of file RLoopManager.hxx.
|
private |
Definition at line 129 of file RLoopManager.hxx.
|
private |
Non-owning pointers to actions already run.
Definition at line 114 of file RLoopManager.hxx.
|
private |
Registered callbacks to call at the beginning of each "data block".
Definition at line 137 of file RLoopManager.hxx.
|
private |
Definition at line 139 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 123 of file RLoopManager.hxx.
|
private |
Cache of the tree/chain branch names. Never access directy, always use GetBranchNames().
Definition at line 146 of file RLoopManager.hxx.