Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RJittedFilter.cxx
Go to the documentation of this file.
1// Author: Enrico Guiraud, Danilo Piparo CERN 09/2018
2
3/*************************************************************************
4 * Copyright (C) 1995-2018, Rene Brun and Fons Rademakers. *
5 * All rights reserved. *
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. *
8 * For the list of contributors see $ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10
15
16#include <cassert>
17
18using namespace ROOT::Detail::RDF;
19
20RJittedFilter::RJittedFilter(RLoopManager *lm, std::string_view name, const std::vector<std::string> &variations,
21 std::shared_ptr<ROOT::Detail::RDF::RNodeBase> prevNode)
22 : RFilterBase(lm, name, lm->GetNSlots(), RDFInternal::RColumnRegister(lm), /*columnNames*/ {}, variations),
23 fPrevNode(prevNode)
24{
25 // Jitted nodes of the computation graph (e.g. RJittedAction, RJittedDefine) usually don't need to register
26 // themselves with the RLoopManager: the _concrete_ nodes will be registered with the RLoopManager right before
27 // the event loop, at jitting time, and that is good enough.
28 // RJittedFilter is an exception: RLoopManager needs to know about what filters have been booked even before
29 // the event loop in order to return a correct list from RLoopManager::GetFiltersNames().
30 // So RJittedFilters register themselves with RLoopManager at construction time and deregister themselves
31 // in SetFilter, i.e. when they are sure that the concrete filter has been instantiated in jitted code and it has
32 // been registered with RLoopManager, making the RJittedFilter registration redundant.
34}
35
37{
38 // This should be a no-op in most sane cases: the RJittedFilter should already have been deregistered in SetFilter.
39 // However, in the edge case in which the branch of the computation graph that included this RJittedFilter went out
40 // of scope before any event loop ran (e.g. because of bad code logic or a user that changed their mind during
41 // interactive usage), we need to make sure RJittedFilters get properly deregistered.
43}
44
45void RJittedFilter::SetFilter(std::unique_ptr<RFilterBase> f)
46{
47 // the concrete filter has been registered with RLoopManager on creation, so let's deregister ourselves
49 fConcreteFilter = std::move(f);
50}
51
53{
54 assert(fConcreteFilter != nullptr);
55 fConcreteFilter->InitSlot(r, slot);
56}
57
59{
60 assert(fConcreteFilter != nullptr);
61 return fConcreteFilter->CheckFilters(slot, entry);
62}
63
69
71{
72 assert(fConcreteFilter != nullptr);
73 fConcreteFilter->PartialReport(cr);
74}
75
81
83{
84 assert(fConcreteFilter != nullptr);
85 fConcreteFilter->IncrChildrenCount();
86}
87
89{
90 assert(fConcreteFilter != nullptr);
91 fConcreteFilter->StopProcessing();
92}
93
95{
96 assert(fConcreteFilter != nullptr);
97 fConcreteFilter->ResetChildrenCount();
98}
99
101{
102 assert(fConcreteFilter != nullptr);
103 fConcreteFilter->TriggerChildrenCount();
104}
105
107{
108 assert(fConcreteFilter != nullptr);
109 fConcreteFilter->ResetReportCount();
110}
111
113{
114 assert(fConcreteFilter != nullptr);
115 fConcreteFilter->FinalizeSlot(slot);
116}
117
119{
120 assert(fConcreteFilter != nullptr);
121 fConcreteFilter->InitNode();
122}
123
124void RJittedFilter::AddFilterName(std::vector<std::string> &filters)
125{
126 if (fConcreteFilter == nullptr) {
127 // No event loop performed yet, but the JITTING must be performed.
129 }
130 fConcreteFilter->AddFilterName(filters);
131}
132
133std::shared_ptr<RDFGraphDrawing::GraphNode>
134RJittedFilter::GetGraph(std::unordered_map<void *, std::shared_ptr<RDFGraphDrawing::GraphNode>> &visitedMap)
135{
136 if (fConcreteFilter != nullptr) {
137 // Here the filter exists, so it can be served
138 return fConcreteFilter->GetGraph(visitedMap);
139 }
140 throw std::runtime_error("The Jitting should have been invoked before this method.");
141}
142
143std::shared_ptr<RNodeBase> RJittedFilter::GetVariedFilter(const std::string &variationName)
144{
145 assert(fConcreteFilter != nullptr);
146 return fConcreteFilter->GetVariedFilter(variationName);
147}
148
149std::shared_ptr<ROOT::Detail::RDF::RNodeBase> RJittedFilter::MoveOutPrevNode()
150{
151 return std::move(fPrevNode);
152}
#define f(i)
Definition RSha256.hxx:104
long long Long64_t
Portable signed long integer 8 bytes.
Definition RtypesCore.h:83
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
const char * filters[]
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 r
char name[80]
Definition TGX11.cxx:110
void FillReport(ROOT::RDF::RCutFlowReport &) const final
void AddFilterName(std::vector< std::string > &filters) final
void Report(ROOT::RDF::RCutFlowReport &) const final
void FinalizeSlot(unsigned int slot) final
Clean-up operations to be performed at the end of a task.
RJittedFilter(RLoopManager *lm, std::string_view name, const std::vector< std::string > &variations, std::shared_ptr< ROOT::Detail::RDF::RNodeBase > prevNode=nullptr)
void InitSlot(TTreeReader *r, unsigned int slot) final
std::shared_ptr< RDFGraphDrawing::GraphNode > GetGraph(std::unordered_map< void *, std::shared_ptr< RDFGraphDrawing::GraphNode > > &visitedMap) final
std::shared_ptr< RNodeBase > fPrevNode
std::unique_ptr< RFilterBase > fConcreteFilter
void PartialReport(ROOT::RDF::RCutFlowReport &) const final
bool CheckFilters(unsigned int slot, Long64_t entry) final
std::shared_ptr< RNodeBase > GetVariedFilter(const std::string &variationName) final
Return a clone of this node that acts as a Filter working with values in the variationName "universe"...
std::shared_ptr< RNodeBase > MoveOutPrevNode()
void SetFilter(std::unique_ptr< RFilterBase > f)
The head node of a RDF computation graph.
void Register(RDFInternal::RActionBase *actionPtr)
void Deregister(RDFInternal::RActionBase *actionPtr)
virtual RLoopManager * GetLoopManagerUnchecked()
Definition RNodeBase.hxx:79
A simple, robust and fast interface to read values from ROOT columnar datasets such as TTree,...
Definition TTreeReader.h:46