19using FourVector = ROOT::Math::XYZTVector;
20using FourVectorVec = std::vector<FourVector>;
21using CylFourVector = ROOT::Math::RhoEtaPhiVector;
23// A simple helper function to fill a test tree: this makes the example
25void fill_tree(const char *filename, const char *treeName)
27 const double M = 0.13957; // set pi+ mass
30 auto genTracks = [&](){
32 const auto nPart = R.Poisson(15);
33 tracks.reserve(nPart);
34 for (int j = 0; j < nPart; ++j) {
35 const auto px = R.Gaus(0, 10);
36 const auto py = R.Gaus(0, 10);
37 const auto pt = sqrt(px * px + py * py);
38 const auto eta = R.Uniform(-3, 3);
39 const auto phi = R.Uniform(0.0, 2 * TMath::Pi());
40 CylFourVector vcyl(pt, eta, phi);
42 auto E = sqrt(vcyl.R() * vcyl.R() + M * M);
44 tracks.emplace_back(vcyl.X(), vcyl.Y(), vcyl.Z(), E);
49 ROOT::RDataFrame d(64);
50 d.Define("tracks", genTracks).Snapshot<FourVectorVec>(treeName, filename, {"tracks"});
55fileName =
"df002_dataModel_py.root"
67n_cut =
'tracks.size() > 8'
78using namespace ROOT::VecOps;
79ROOT::RVecD getPt(const RVec<FourVector> &tracks)
81 auto pt = [](const FourVector &v) { return v.pt(); };
82 return Map(tracks, pt);
88using namespace ROOT::VecOps;
89ROOT::RVecD getPtWeights(const RVec<FourVector> &tracks)
91 auto ptWeight = [](const FourVector &v) { return 1. / v.Pt(); };
92 return Map(tracks, ptWeight);
97augmented_d =
d.Define(
'tracks_n',
'(int)tracks.size()') \
98 .Filter(
'tracks_n > 2') \
99 .Define(
'tracks_pts',
'getPt( tracks )') \
100 .Define(
"tracks_pts_weights",
'getPtWeights( tracks )' )
120print(
"Saved figures to df002_*.png")
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...