This tutorial shows the possibility to use data models which are more complex than flat ntuples with TDataFrame.
7 using FourVector = ROOT::Math::XYZTVector; 8 using FourVectors = std::vector<FourVector>; 9 using CylFourVector = ROOT::Math::RhoEtaPhiVector; 11 void fill_tree(const char *filename, const char *treeName) 13 TFile f(filename, "RECREATE"); 14 TTree t(treeName, treeName); 16 t.Branch("tracks", &tracks); 18 const double M = 0.13957; // set pi+ mass 21 for (int i = 0; i < 50; ++i) { 22 auto nPart = R.Poisson(15); 24 tracks.reserve(nPart); 25 for (int j = 0; j < nPart; ++j) { 26 double px = R.Gaus(0, 10); 27 double py = R.Gaus(0, 10); 28 double pt = sqrt(px * px + py * py); 29 double eta = R.Uniform(-3, 3); 30 double phi = R.Uniform(0.0, 2 * TMath::Pi()); 31 CylFourVector vcyl(pt, eta, phi); 33 double E = sqrt(vcyl.R() * vcyl.R() + M * M); 34 FourVector q(vcyl.X(), vcyl.Y(), vcyl.Z(), E); 36 tracks.emplace_back(q); 48 fileName =
"tdf002_dataModel_py.root" 50 ROOT.gInterpreter.Declare(fill_tree_code)
51 ROOT.fill_tree(fileName, treeName)
55 TDF = ROOT.ROOT.Experimental.TDataFrame
56 d = TDF(treeName, fileName)
61 n_cut =
'tracks.size() > 8' 62 nentries = d.Filter(n_cut).Count();
64 print(
"%s passed all filters" %nentries.GetValue())
72 std::vector<double> getPt (const FourVectors &tracks) 74 std::vector<double> pts; 75 pts.reserve(tracks.size()); 76 for (auto &t : tracks) pts.emplace_back(t.Pt()); 80 ROOT.gInterpreter.Declare(getPt_code)
82 getPtWeights_code =
''' 83 std::vector<double> getPtWeights (const FourVectors &tracks) { 84 std::vector<double> ptsw; 85 ptsw.reserve(tracks.size()); 86 for (auto &t : tracks) ptsw.emplace_back(1. / t.Pt()); 90 ROOT.gInterpreter.Declare(getPtWeights_code)
92 augmented_d = d.Define(
'tracks_n',
'(int)tracks.size()') \
93 .Filter(
'tracks_n > 2') \
94 .Define(
'tracks_pts',
'getPt( tracks )') \
95 .Define(
"tracks_pts_weights",
'getPtWeights( tracks )' )
97 trN = augmented_d.Histo1D(
"tracks_n")
98 trPts = augmented_d.Histo1D(
"tracks_pts")
99 trWPts = augmented_d.Histo1D(
"tracks_pts",
"tracks_pts_weights")
103 c1.Print(
"tracks_n.png")
107 c2.Print(
"tracks_pt.png")
111 c3.Print(
"tracks_Wpt.png")
- Date
- May 2017
- Author
- Danilo Piparo
Definition in file tdf002_dataModel.py.