Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
df003_profiles.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_dataframe
3 /// \notebook -draw
4 /// This tutorial illustrates how to use TProfiles in combination with the
5 /// RDataFrame. See the documentation of TProfile and TProfile2D to better
6 /// understand the analogy of this code with the example one.
7 ///
8 /// \macro_image
9 /// \macro_code
10 ///
11 /// \date February 2017
12 /// \author Danilo Piparo
13 
14 // A simple helper function to fill a test tree: this makes the example
15 // stand-alone.
16 void fill_tree(const char *treeName, const char *fileName)
17 {
18  ROOT::RDataFrame d(25000);
19  d.Define("px", []() { return gRandom->Gaus(); })
20  .Define("py", []() { return gRandom->Gaus(); })
21  .Define("pz", [](double px, double py) { return sqrt(px * px + py * py); }, {"px", "py"})
22  .Snapshot(treeName, fileName);
23 }
24 
25 void df003_profiles()
26 {
27  // We prepare an input tree to run on
28  auto fileName = "df003_profiles.root";
29  auto treeName = "myTree";
30  fill_tree(treeName, fileName);
31 
32  // We read the tree from the file and create a RDataFrame.
33  ROOT::RDataFrame d(treeName, fileName, {"px", "py", "pz"});
34 
35  // Create the profiles
36  auto hprof1d = d.Profile1D({"hprof1d", "Profile of pz versus px", 64, -4, 4});
37  auto hprof2d = d.Profile2D({"hprof2d", "Profile of pz versus px and py", 40, -4, 4, 40, -4, 4, 0, 20});
38 
39  // And Draw
40  auto c1 = new TCanvas("c1", "Profile histogram example", 200, 10, 700, 500);
41  hprof1d->DrawClone();
42  auto c2 = new TCanvas("c2", "Profile2D histogram example", 200, 10, 700, 500);
43  hprof2d->DrawClone("BOX");
44 }