/// \file /// \ingroup tutorial_dataframe /// \notebook -draw /// Use TProfiles with RDataFrame. /// /// This tutorial illustrates how to use TProfiles in combination with the /// RDataFrame. See the documentation of TProfile and TProfile2D to better /// understand the analogy of this code with the example one. /// /// \macro_image /// \macro_code /// /// \date February 2017 /// \author Danilo Piparo (CERN) // A simple helper function to fill a test tree: this makes the example // stand-alone. void fill_tree(const char *treeName, const char *fileName) { ROOT::RDataFrame d(25000); d.Define("px", []() { return gRandom->Gaus(); }) .Define("py", []() { return gRandom->Gaus(); }) .Define("pz", [](double px, double py) { return sqrt(px * px + py * py); }, {"px", "py"}) .Snapshot(treeName, fileName); } void df003_profiles() { // We prepare an input tree to run on auto fileName = "df003_profiles.root"; auto treeName = "myTree"; fill_tree(treeName, fileName); // We read the tree from the file and create a RDataFrame. ROOT::RDataFrame d(treeName, fileName); // Create the profiles auto hprof1d = d.Profile1D({"hprof1d", "Profile of py versus px", 64, -4, 4}, "px", "py"); auto hprof2d = d.Profile2D({"hprof2d", "Profile of pz versus px and py", 40, -4, 4, 40, -4, 4, 0, 20}, "px", "py", "pz"); // And Draw auto c1 = new TCanvas("c1", "Profile histogram example", 200, 10, 700, 500); hprof1d->DrawClone(); auto c2 = new TCanvas("c2", "Profile2D histogram example", 200, 10, 700, 500); hprof2d->DrawClone("BOX"); }