1 #ifndef RDFAnalysis_NodeBase_H 2 #define RDFAnalysis_NodeBase_H 12 #include "ROOT/RDataFrame.hxx" 56 const std::string&
name,
70 const std::string& name,
71 const std::string& expression);
86 const std::string& name,
87 const std::string& expression,
110 typename Ret_t =
typename ROOT::TTraits::CallableTraits<F>::ret_type>
111 std::enable_if_t<N==std::tuple_size<Ret_t>::value,
NodeBase*>
Define(
112 const std::array<std::string, N>& names,
140 template <
typename T>
144 const std::string& weight =
"",
158 template <
typename AccFun,
typename MergeFun,
159 typename ArgTypes=
typename ROOT::TTraits::CallableTraits<AccFun>::arg_types,
160 typename U=ROOT::TTraits::TakeFirstParameter_t<ArgTypes>>
164 const std::string& columnName,
165 const U& aggIdentity)
167 return ActResult<ROOT::RDF::RResultPtr<U>, AccFun, MergeFun, std::string_view,
const U&>(
170 aggregator, merger,
SysVarBranch(columnName), aggIdentity);
183 template <
typename AccFun,
typename MergeFun,
184 typename ArgTypes=
typename ROOT::TTraits::CallableTraits<AccFun>::arg_types,
185 typename U=ROOT::TTraits::TakeFirstParameter_t<ArgTypes>>
189 const std::string& columnName)
191 return ActResult<ROOT::RDF::RResultPtr<U>, AccFun, MergeFun, std::string_view>(
203 return ActResult<ROOT::RDF::RResultPtr<ULong64_t>>(
235 template <
typename... TrArgs,
typename T,
typename... Args>
236 std::map<std::string, T>
Act(
237 std::function<T(
RNode&, TrArgs...)> f,
255 template <
typename F,
typename... Args,
256 typename T=
typename ROOT::TTraits::CallableTraits<F>::ret_type>
257 std::enable_if_t<!is_std_function<F>::value, std::map<std::string, T>>
Act(
265 std::forward<Args>(args)...);
295 template <
typename T,
typename... TrArgs,
typename... Args>
296 std::map<std::string, T>
Act(
297 T (
RNode::*f)(TrArgs...),
318 template <
typename... TrArgs,
typename T,
typename... Args,
319 typename U=
typename T::Value_t>
321 std::function<T(
RNode&, TrArgs...)> f,
327 Act(f, columns, std::forward<Args>(args)...) );
347 template <
typename F,
typename... Args,
348 typename T=
typename ROOT::TTraits::CallableTraits<F>::ret_type,
349 typename U=
typename T::Value_t>
358 std::forward<Args>(args)...);
379 template <
typename T,
typename... TrArgs,
typename... Args,
380 typename U=
typename T::Value_t>
382 T (
RNode::*f)(TrArgs...),
388 Act(f, columns, std::forward<Args>(args)...) );
417 virtual bool isRoot()
const = 0;
426 const std::map<std::string, ROOT::RDF::RNode>&
rnodes) {
432 template <std::size_t I, std::size_t N,
typename... Elements>
434 const std::array<std::string, N>& names,
435 const std::string& fullName,
436 const std::tuple<Elements...>*);
439 template <std::size_t I, std::size_t N,
typename... Elements>
441 const std::array<std::string, N>& names,
442 const std::string& fullName,
443 const std::tuple<Elements...>*);
453 template <
typename F>
465 const std::string& expression,
466 const std::string& cutflowName =
"");
479 const std::string& expression,
481 const std::string& cutflowName =
"");
495 std::unique_ptr<IBranchNamer>&&
namer,
497 const std::string& name =
"ROOT",
498 const std::string& cutflowName =
"Number of events",
499 const std::string& weight =
"",
514 template <
typename W>
517 std::unique_ptr<IBranchNamer>&&
namer,
519 const std::string& name,
520 const std::string& cutflowName,
536 std::map<std::string, RNode>&&
rnodes,
537 const std::string& name,
538 const std::string& cutflowName,
539 const std::string& weight,
552 template <
typename W>
555 std::map<std::string, RNode>&&
rnodes,
556 const std::string& name,
557 const std::string& cutflowName,
572 template <
typename F>
588 const std::string& expression,
623 #include "RDFAnalysis/NodeBase.icc" 624 #endif //> !RDFAnalysis_NodeBase_H std::map< std::string, RNode > m_rnodes
The RNode objects, keyed by systematic.
Definition: NodeBase.h:596
std::vector< SysResultPtr< TObject > > m_objects
Any TObject pointers declared on this.
Definition: NodeBase.h:620
bool m_isMC
Whether or not 'MC' mode was activated.
Definition: NodeBase.h:605
SysResultPtr< T > Fill(const T &model, const ColumnNames_t &columns, const std::string &weight="", WeightStrategy strategy=WeightStrategy::Default)
Fill an object on each event.
std::string m_cutflowName
The name in the cutflow.
Definition: NodeBase.h:611
Abstract base class that describes how a Node should name its branches internally.
Definition: IBranchNamer.h:33
std::string m_weight
The weight on this node.
Definition: NodeBase.h:617
const std::string & cutflowName() const
Get the name in a cutflow.
Definition: NodeBase.h:395
Base class for the Node classes.
Definition: NodeBase.h:41
enable_ifn_string_t< F, std::map< std::string, RNode > > makeChildRNodes(F f, const ColumnNames_t &columns={}, const std::string &cutflowName="")
Create child RNodes to be used for a filter from this node.
const std::string & getWeight() const
Get the name of the weight branch.
Definition: NodeBase.h:123
RNode * m_rootRNode
Keep a pointer to the ROOT RNode of the whole chain.
Definition: NodeBase.h:614
const std::map< std::string, RNode > & rnodes() const
Get the RNode objects.
Definition: NodeBase.h:404
Class to wrap systematic variations of RResultPtrs.
bool isMC() const
Was 'MC' mode activated?
Definition: NodeBase.h:401
virtual void readBranchList(const std::map< std::string, ROOT::RDF::RNode > &rnodes)=0
Read branch lists from a set of rnodes.
ROOT::RDataFrame::ColumnNames_t ColumnNames_t
Helper typedef.
Definition: NodeBase.h:30
auto objects() const
(Const) iterate over all the objects defined on this
Definition: NodeBase.h:414
virtual const std::string & nominalName() const =0
Get the name of the nominal variation.
NamerInitialiser m_namerInit
Helper struct to force early initialisation of the namer.
Definition: NodeBase.h:602
NodeBase(const RNode &rnode, std::unique_ptr< IBranchNamer > &&namer, bool isMC, const std::string &name="ROOT", const std::string &cutflowName="Number of events", const std::string &weight="", WeightStrategy strategy=WeightStrategy::Default)
Create the root node of the tree.
Definition: NodeBase.cxx:85
std::enable_if_t<!is_std_function< F >::value, SysResultPtr< U > > ActResult(F &&f, const ColumnNames_t &columns, Args &&...args)
Specialised version of Node::Act for functions returning a ROOT::RDF::RResultPtr. ...
Definition: NodeBase.h:350
SysResultPtr< ULong64_t > Count()
Count the number of entries processed by this node.
Definition: NodeBase.h:201
const std::string & name() const
Get the name.
Definition: NodeBase.h:392
NamerInitialiser(IBranchNamer &namer, const std::map< std::string, ROOT::RDF::RNode > &rnodes)
Initialise the name as part of the node's initialisation list.
Definition: NodeBase.h:424
std::enable_if_t<!std::is_convertible< F, std::string >{}, T > enable_ifn_string_t
Reduce size of enable_if statements.
Definition: Helpers.h:114
T value_type
The translated value type.
Definition: SysVar.h:51
auto objects()
Iterate over the objects defined on this.
Definition: NodeBase.h:412
virtual bool isRoot() const =0
Is the node the root?
Helper functions and classes for adapting function arguments that depend on the systematic being eval...
Definition: CutflowDetail.h:11
SysResultPtr< U > ActResult(std::function< T(RNode &, TrArgs...)> f, const ColumnNames_t &columns, Args &&...args)
Specialised version of Node::Act for functions returning a ROOT::RDF::RResultPtr. ...
Definition: NodeBase.h:320
SysResultPtr< U > ActResult(T(RNode::*f)(TrArgs...), const ColumnNames_t &columns, Args &&...args)
Specialised version of Node::Act for functions returning a ROOT::RDF::RResultPtr. ...
Definition: NodeBase.h:381
auto as_range(Container &container)
Make a range_t from a container.
Definition: Helpers.h:44
SysResultPtr< U > Aggregate(AccFun aggregator, MergeFun merger, const std::string &columnName, const U &aggIdentity)
Execute a user-defined accumulation function.
Definition: NodeBase.h:161
WeightStrategy
enum class to describe how weights are applied.
Definition: WeightStrategy.h:33
std::map< std::string, T > Act(std::function< T(RNode &, TrArgs...)> f, const ColumnNames_t &columns, Args &&...args)
Transmit a systematically varied action to the underlying ROOT::RNodes.
const IBranchNamer & namer() const
The namer.
Definition: NodeBase.h:409
Class to wrap together RResultPtrs for different systematic variations.
Definition: SysResultPtr.h:24
The branch naming interface.
NamerInitialiser()
Definition: NodeBase.h:422
std::unique_ptr< IBranchNamer > m_namer
The branch namer.
Definition: NodeBase.h:599
Helper struct that forces the initialisation of the branch namer.
Definition: NodeBase.h:421
std::enable_if_t<!is_std_function< F >::value, std::map< std::string, T > > Act(F &&f, const ColumnNames_t &columns, Args &&...args)
Transmit a systematically varied action to the underlying ROOT::RNodes.
Definition: NodeBase.h:257
enable_ifn_string_t< F, std::string > setWeight(F f, const ColumnNames_t &columns, NodeBase *parent, WeightStrategy strategy)
Set the weight on this node.
std::string nameWeight()
Internal function to name the weight branch.
Definition: NodeBase.cxx:121
enable_ifn_string_t< F, NodeBase * > Define(const std::string &name, F f, const ColumnNames_t &columns={})
Define a new variable on this node.
std::string m_name
The Node's name.
Definition: NodeBase.h:608
std::map< std::string, RNode > & rnodes()
Get the RNode objects.
Definition: NodeBase.h:406
File containing the WeightStrategy enum class.
SysResultPtr< U > Aggregate(AccFun aggregator, MergeFun merger, const std::string &columnName)
Execute a user-defined accumulation function.
Definition: NodeBase.h:186
ROOT::RDF::RNode RNode
Helper typedef.
Definition: NodeBase.h:28
std::enable_if_t< I!=0, void > unwindDefine(const std::array< std::string, N > &names, const std::string &fullName, const std::tuple< Elements... > *)
Base case for unwinding multiple define calls.
Class to trigger translation of a single branch name.
Definition: SysVar.h:97
bool isAnonymous() const
Is this anonymous?
Definition: NodeBase.h:398