Logo ROOT  
Reference Guide
df009_FromScratchVSTTree.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_dataframe
3 /// \notebook -nodraw
4 /// \brief Compare creation of a ROOT dataset with RDataFrame and TTree.
5 ///
6 /// This tutorial illustrates how simpler it can be to use a
7 /// RDataFrame to create a dataset with respect to the usage
8 /// of the TTree interfaces.
9 ///
10 /// \macro_code
11 ///
12 /// \date August 2017
13 /// \author Danilo Piparo
14 
15 // ##This is the classic way of creating a ROOT dataset
16 // The steps are:
17 // - Create a file
18 // - Create a tree associated to the file
19 // - Define the variables to write in the entries
20 // - Define the branches associated to those variables
21 // - Write the event loop to set the right value to the variables
22 // - Call TTree::Fill to save the value of the variables
23 // - Write the TTree
24 // - Close the file
25 void classicWay()
26 {
27  TFile f("df009_FromScratchVSTTree_classic.root", "RECREATE");
28  TTree t("treeName", "treeName");
29  double b1;
30  int b2;
31  t.Branch("b1", &b1);
32  t.Branch("b2", &b2);
33  for (int i = 0; i < 10; ++i) {
34  b1 = i;
35  b2 = i * i;
36  t.Fill();
37  }
38  t.Write();
39  f.Close();
40 }
41 
42 // ##This is the RDF way of creating a ROOT dataset
43 // Few lines are needed to achieve the same result.
44 // Parallel creation of the TTree is not supported in the
45 // classic method.
46 // In this case the steps are:
47 // - Create an empty RDataFrame
48 // - If needed, define variables for the functions used to fill the branches
49 // - Create new columns expressing their content with lambdas, functors, functions or strings
50 // - Invoke the Snapshot action
51 //
52 // Parallelism is not the only advantage. Starting from an existing dataset and
53 // filter it, enrich it with new columns, leave aside some other columns and
54 // write a new dataset becomes very easy to do.
55 void RDFWay()
56 {
57  ROOT::RDataFrame df(10);
58  auto b = 0.;
59  df.Define("b1", [&b]() { return b++; })
60  .Define("b2", "(int) b1 * b1") // This can even be a string
61  .Snapshot("treeName", "df009_FromScratchVSTTree_df.root");
62 }
63 
64 void df009_FromScratchVSTTree()
65 {
66 
67  classicWay();
68  RDFWay();
69 }
f
#define f(i)
Definition: RSha256.hxx:104
TTree
A TTree represents a columnar dataset.
Definition: TTree.h:79
ROOT::RDataFrame
ROOT's RDataFrame offers a high level interface for analyses of data stored in TTrees,...
Definition: RDataFrame.hxx:42
b
#define b(i)
Definition: RSha256.hxx:100
TFile
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:54