Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
df039_RResultPtr_basics.C File Reference

Detailed Description

View in nbviewer Open in SWAN
Usage of RResultPtr.

This tutorial illustrates what is the difference between lazy and immediate results and how to use either of them in RDataFrame. "Lazy" or deferred results are only produced once they are accessed. This allows for declaring multiple desired results, and producing them in a single run of the event loop.

#include <iostream>
// A function that adds a "lazy" histogram to a computation graph.
// The event loop will not run if only the RResultPtr is declared.
return rdf.Histo1D({"Histo2", "Histogram running later", 10, 0, 20}, {"x"});
}
// A function that immediately produces a result.
std::shared_ptr<TH1D> histoNow(ROOT::RDF::RNode & rdf) {
auto histo = rdf.Histo1D({"Histo2", "Histogram running later", 10, 0, 20}, {"x"});
return histo.GetSharedPtr();
}
void df039_RResultPtr_basics()
{
// Create a simple dataframe that fills event numbers into a histogram.
ROOT::RDataFrame bare_rdf(10);
auto rdf = bare_rdf.Define("x", [&](unsigned long long entry) -> unsigned int {
if (entry == 0) std::cout << "Event loop is running\n";
return entry;
}, {"rdfentry_"});
// Book a histogram action. This will be stored as RResultPtr.
// The action won't run yet.
ROOT::RDF::RResultPtr<TH1D> histo1 = rdf.Histo1D({"Histo1", "Histogram", 10, 0, 10}, {"x"});
std::cout << "Declared histo1\n";
// When RDF results are declared in functions, one has to choose if one wants run it to immediately or lazily.
// To run the event loop in a lazy fashion, return RResultPtr. This is equivalent to histo1 above, but happens
// inside a function.
auto rNode = ROOT::RDF::AsRNode(rdf);
ROOT::RDF::RResultPtr<TH1D> histo2 = histoLater(rNode);
std::cout << "Declared histo2\n";
// If the function should produce the result immediately, a shared_ptr to the underlying result should be returned.
std::shared_ptr<TH1D> histo3 = histoNow(rNode);
std::cout << "Declared histo3\n";
}
RResultPtr<::TH1D > Histo1D(const TH1DModel &model={"", "", 128u, 0., 0.}, std::string_view vName="")
Fill and return a one-dimensional histogram with the values of a column (lazy action).
RInterface< Proxied > Define(std::string_view name, F expression, const ColumnNames_t &columns={})
Define a new column.
Smart pointer for the return type of actions.
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...
RInterface<::ROOT::Detail::RDF::RNodeBase > RNode
RNode AsRNode(NodeType node)
Cast a RDataFrame node to the common type ROOT::RDF::RNode.
Declared histo1
Declared histo2
Event loop is running
Declared histo3
Date
2025
Author
Stephan Hageboeck (CERN)

Definition in file df039_RResultPtr_basics.C.