17 auto filename = gROOT->GetTutorialDir() +
"/dataframe/df017_vecOpsHEP.root";
18 auto treename =
"myDataset";
19 using doubles = ROOT::VecOps::RVec<double>;
20 using RDF = ROOT::RDataFrame;
22 void WithTTreeReader()
25 TTreeReader tr(treename, &f);
26 TTreeReaderArray<double> px(tr,
"px");
27 TTreeReaderArray<double> py(tr,
"py");
28 TTreeReaderArray<double> E(tr,
"E");
30 TH1F h(
"pt",
"pt", 16, 0, 4);
33 for (
auto i=0U;i < px.GetSize(); ++i) {
34 if (E[i] > 100) h.Fill(sqrt(px[i]*px[i] + py[i]*py[i]));
42 RDF f(treename, filename.Data());
43 auto CalcPt = [](doubles &px, doubles &py, doubles &E) {
45 for (
auto i=0U;i < px.size(); ++i) {
47 v.emplace_back(sqrt(px[i]*px[i] + py[i]*py[i]));
52 f.Define(
"pt", CalcPt, {
"px",
"py",
"E"})
53 .Histo1D<doubles>({
"pt",
"pt", 16, 0, 4},
"pt")->DrawCopy();
56 void WithRDataFrameVecOps()
58 RDF f(treename, filename.Data());
59 auto CalcPt = [](doubles &px, doubles &py, doubles &E) {
60 auto pt = sqrt(px*px + py*py);
63 f.Define(
"good_pt", CalcPt, {
"px",
"py",
"E"})
64 .Histo1D<doubles>({
"pt",
"pt", 16, 0, 4},
"good_pt")->DrawCopy();
67 void WithRDataFrameVecOpsJit()
69 RDF f(treename, filename.Data());
70 f.Define(
"good_pt",
"sqrt(px*px + py*py)[E>100]")
71 .Histo1D({
"pt",
"pt", 16, 0, 4},
"good_pt")->DrawCopy();
74 void df017_vecOpsHEP()
78 auto c =
new TCanvas();
85 WithRDataFrameVecOps();
87 WithRDataFrameVecOpsJit();