#include "TFile.h" #include "TH1F.h" #include "TTree.h" #include "ROOT/TDataFrame.hxx" #include "TCanvas.h" // A simple helper function to fill a test tree: this makes the example // stand-alone. void fill_tree(const char *filename, const char *treeName) { TFile f(filename, "RECREATE"); TTree t(treeName, treeName); int b1; int b2; double b3; double b4; t.Branch("b1", &b1); t.Branch("b3", &b3); t.Branch("b4", &b4); for (int i = 0; i < 10000000; ++i) { b1 = i; b3 = 2*i; b4 = 3*i; t.Fill(); } t.Write(); f.Close(); return; } void dataFramePerformance() { auto fileName = "tdf001_introduction.root"; auto treeName = "myTree"; // fill_tree(fileName, treeName); ROOT::Experimental::TDataFrame d(treeName, fileName, {"b1","b2"}); auto pre = d.Filter([](int i)->bool{return i<0;},{"b1"},{"f0"}); auto b3_filter = pre.Filter([](double b3)->bool{return b3<500000;},{"b3"},{"f1"}); auto b4_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f2"}); // auto b5_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f3"}); // auto b6_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f4"}); // auto b7_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f5"}); // auto b8_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f6"}); // auto b9_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f7"}); // auto b10_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f8"}); // auto b11_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f9"}); // auto b12_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f10"}); // auto b13_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f11"}); // auto b14_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f12"}); // auto b15_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f13"}); // auto b16_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f14"}); // auto b17_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f15"}); // auto b18_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f16"}); // auto b19_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f17"}); // auto b20_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f18"}); // auto b21_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f19"}); // auto b22_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f20"}); // auto b23_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f21"}); // auto b24_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f22"}); // auto b25_filter = pre.Filter([](double b4)->bool{return b4>500000;},{"b4"},{"f23"}); auto hist_b3 = b3_filter.Histo1D(); auto hist_b4 = b4_filter.Histo1D(); // auto hist_b5 = b3_filter.Histo1D(); // auto hist_b6 = b4_filter.Histo1D(); // auto hist_b7 = b3_filter.Histo1D(); // auto hist_b8 = b4_filter.Histo1D(); // auto hist_b9 = b3_filter.Histo1D(); // auto hist_b10 = b4_filter.Histo1D(); // auto hist_b11 = b3_filter.Histo1D(); // auto hist_b12 = b4_filter.Histo1D(); // auto hist_b13 = b3_filter.Histo1D(); // auto hist_b14 = b4_filter.Histo1D(); // auto hist_b15 = b3_filter.Histo1D(); // auto hist_b16 = b4_filter.Histo1D(); // auto hist_b17 = b3_filter.Histo1D(); // auto hist_b18 = b4_filter.Histo1D(); // auto hist_b19 = b3_filter.Histo1D(); // auto hist_b20 = b4_filter.Histo1D(); // auto hist_b21 = b3_filter.Histo1D(); // auto hist_b22 = b4_filter.Histo1D(); // auto hist_b23 = b3_filter.Histo1D(); // auto hist_b24 = b4_filter.Histo1D(); d.Report(); TCanvas canv; hist_b3->Draw(); hist_b4->SetLineColor(kRed); hist_b4->Draw("same"); canv.Print("performance_test.pdf"); }