Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
df016_vecOps.py File Reference

Detailed Description

View in nbviewer Open in SWAN
Process collections in RDataFrame with the help of RVec.

This tutorial shows the potential of the VecOps approach for treating collections stored in datasets, a situation very common in HEP data analysis.

import ROOT
df = ROOT.RDataFrame(1024)
coordDefineCode = '''ROOT::RVecD {0}(len);
std::transform({0}.begin(), {0}.end(), {0}.begin(), [](double){{return gRandom->Uniform(-1.0, 1.0);}});
return {0};'''
d = df.Define("len", "gRandom->Uniform(0, 16)")\
.Define("x", coordDefineCode.format("x"))\
.Define("y", coordDefineCode.format("y"))
# Now we have in our hands d, a RDataFrame with two columns, x and y, which
# hold collections of coordinates. The sizes of these collections vary.
# Let's now define radii radii from the x and y coordinates. We'll do it treating
# the collections stored in the columns without looping on the individual elements.
d1 = d.Define("r", "sqrt(x*x + y*y)")
# Now we want to plot 2 quarters of a ring with radii .5 and 1.
# Note how the cuts are performed on RVecs, comparing them with integers and
# among themselves.
ring_h = d1.Define("rInFig", "r > .5 && r < 1 && x*y < 0")\
.Define("yFig", "y[rInFig]")\
.Define("xFig", "x[rInFig]")\
.Histo2D(("fig", "Two quarters of a ring", 64, -1.1, 1.1, 64, -1.1, 1.1), "xFig", "yFig")
cring = ROOT.TCanvas()
ring_h.Draw("Colz")
cring.SaveAs("df016_ring.png")
print("Saved figure to df016_ring.png")
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...
Date
February 2018
Author
Danilo Piparo (CERN)

Definition in file df016_vecOps.py.