size_t npoints = 10000000; ROOT::RDataFrame df(npoints); auto pidf = df.Define("x", "gRandom->Uniform(-1.0, 1.0)") .Define("y", "gRandom->Uniform(-1.0, 1.0)") .Define("p", "std::array v{x, y}; return v;") .Define("r", "double r2 = 0.0; for (auto&& x : p) r2 += x*x; return sqrt(r2);"); auto incircle = *(pidf.Filter("r <= 1.0").Count()); double pi_approx = 4.0 * incircle / npoints; std::cout << "pi is approximately equal to " << pi_approx << std::endl;