Logo ROOT  
Reference Guide
df023_aggregate.C File Reference

Detailed Description

Use the Aggregate action to specify arbitrary data aggregations.

View in nbviewer Open in SWAN This tutorial shows how to use the Aggregate action to evaluate the product of all the elements of a column. This operation may be performed using a Reduce action, however aggregate is used for the sake of the tutorial

void df023_aggregate()
// Column to be aggregated
const std::string columnName = "x";
auto rdf = ROOT::RDataFrame(5);
auto d = rdf.Define(columnName, "rdfentry_ + 1.");
// Aggregator function. It receives an accumulator (acc) and a column value (x). The variable acc is shared among the
// calls, so the function has to specify how the value has to be aggregated in the accumulator.
auto aggregator = [](double acc, double x) { return acc * x; };
// If multithread is enabled, the aggregator function will be called by more threads and will produce a vector of
// partial accumulators. The merger function performs the final aggregation of these partial results.
auto merger = [](std::vector<double> &accumulators) {
auto size = accumulators.size();
for (int i = 1; i < size; ++i) {
accumulators[0] *= accumulators[i];
// The accumulator is initialized at this value by every thread.
double initValue = 1.;
// Multiplies all elements of the column "x"
auto result = d.Aggregate(aggregator, merger, columnName, initValue);
std::cout << *result << std::endl;
July 2018
Enrico Guiraud, Danilo Piparo CERN, Massimo Tumolo Politecnico di Torino

Definition in file df023_aggregate.C.

Double_t x[n]
Definition: legend1.C:17
ROOT's RDataFrame offers a high level interface for analyses of data stored in TTrees,...
Definition: RDataFrame.hxx:42
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...
Definition: TROOT.cxx:523
#define d(i)
Definition: RSha256.hxx:120