This tutorial illustrates how PyROOT supports declaring C++ callables from Python callables making them, for example, usable with RDataFrame.
The feature uses the numba Python package for just-in-time compilation of the Python callable and supports fundamental types and ROOT.RVec thereof.
import ROOT
@ROOT.Numba.Declare(['float', 'int'], 'float')
def pypow(x, y):
return x**y
ROOT.gInterpreter.ProcessLine('cout << "2^3 = " << Numba::pypow(2, 3) << endl;')
.Define('x_pow3', 'Numba::pypow(x, 3)')\
.AsNumpy()
print('pypow({}, 3) = {}'.format(data['x'], data['x_pow3']))
@ROOT.Numba.Declare(['RVecF', 'int'], 'RVecF')
def pypowarray(x, y):
return x**y
ROOT.gInterpreter.ProcessLine('''
ROOT::RVecF x = {0, 1, 2, 3};
cout << "pypowarray(" << x << ", 3) = " << Numba::pypowarray(x, 3) << endl;
''')
.Define('x2', 'Numba::pypowarray(x, 2)')\
.Sum('x2')
print('sum(pypowarray({ 1, 2, 3 }, 2)) = ', s.GetValue())
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...
- Date
- March 2020
- Author
- Stefan Wunsch
Definition in file df038_NumbaDeclare.py.