17 using FourVector = ROOT::Math::XYZTVector;
18 using FourVectorVec = std::vector<FourVector>;
19 using CylFourVector = ROOT::Math::RhoEtaPhiVector;
21 // A simple helper function to fill a test tree: this makes the example
23 void fill_tree(const char *filename, const char *treeName)
25 const double M = 0.13957; // set pi+ mass
28 auto genTracks = [&](){
30 const auto nPart = R.Poisson(15);
31 tracks.reserve(nPart);
32 for (int j = 0; j < nPart; ++j) {
33 const auto px = R.Gaus(0, 10);
34 const auto py = R.Gaus(0, 10);
35 const auto pt = sqrt(px * px + py * py);
36 const auto eta = R.Uniform(-3, 3);
37 const auto phi = R.Uniform(0.0, 2 * TMath::Pi());
38 CylFourVector vcyl(pt, eta, phi);
40 auto E = sqrt(vcyl.R() * vcyl.R() + M * M);
42 tracks.emplace_back(vcyl.X(), vcyl.Y(), vcyl.Z(), E);
47 ROOT::RDataFrame d(64);
48 d.Define("tracks", genTracks).Snapshot<FourVectorVec>(treeName, filename, {"tracks"});
53 fileName =
"df002_dataModel_py.root"
55 ROOT.gInterpreter.Declare(fill_tree_code)
56 ROOT.fill_tree(fileName, treeName)
60 RDF = ROOT.ROOT.RDataFrame
61 d = RDF(treeName, fileName)
66 n_cut =
'tracks.size() > 8'
67 nentries = d.Filter(n_cut).Count();
69 print(
"%s passed all filters" %nentries.GetValue())
77 using namespace ROOT::VecOps;
78 RVec<double> getPt(const RVec<FourVector> &tracks)
80 auto pt = [](const FourVector &v) { return v.pt(); };
81 return Map(tracks, pt);
84 ROOT.gInterpreter.Declare(getPt_code)
86 getPtWeights_code =
'''
87 using namespace ROOT::VecOps;
88 RVec<double> getPtWeights(const RVec<FourVector> &tracks)
90 auto ptWeight = [](const FourVector &v) { return 1. / v.Pt(); };
91 return Map(tracks, ptWeight);
94 ROOT.gInterpreter.Declare(getPtWeights_code)
96 augmented_d = d.Define(
'tracks_n',
'(int)tracks.size()') \
97 .Filter(
'tracks_n > 2') \
98 .Define(
'tracks_pts',
'getPt( tracks )') \
99 .Define(
"tracks_pts_weights",
'getPtWeights( tracks )' )
103 trN = augmented_d.Histo1D((
"",
"", 40, -.5, 39.5),
"tracks_n")
104 trPts = augmented_d.Histo1D(
"tracks_pts")
105 trWPts = augmented_d.Histo1D(
"tracks_pts",
"tracks_pts_weights")