17 def fill_tree(treeName, fileName):
 
   18     tdf = ROOT.ROOT.RDataFrame(10)
 
   19     tdf.Define(
"b1", 
"(double) tdfentry_")\
 
   20        .Define(
"b2", 
"(int) tdfentry_ * tdfentry_").Snapshot(treeName, fileName)
 
   23 fileName = 
"df001_introduction_py.root" 
   25 fill_tree(treeName, fileName)
 
   30 RDF = ROOT.ROOT.RDataFrame
 
   31 d = RDF(treeName, fileName)
 
   43 cutb1b2 = 
'b2 % 2 && b1 < 4.' 
   49 entries1 = d.Filter(cutb1) \
 
   53 print(
"%s entries passed all filters" %entries1.GetValue())
 
   55 entries2 = d.Filter(
"b1 < 5.").Count();
 
   56 print(
"%s entries passed all filters" %entries2.GetValue())
 
   61 b1b2_cut = d.Filter(cutb1b2)
 
   62 minVal = b1b2_cut.Min(
'b1')
 
   63 maxVal = b1b2_cut.Max(
'b1')
 
   64 meanVal = b1b2_cut.Mean(
'b1')
 
   65 nonDefmeanVal = b1b2_cut.Mean(
"b2")
 
   66 print(
"The mean is always included between the min and the max: %s <= %s <= %s" %(minVal.GetValue(), meanVal.GetValue(), maxVal.GetValue()))
 
   73 hist = d.Filter(cutb1).Histo1D(
'b1')
 
   74 print(
"Filled h %s times, mean: %s" %(hist.GetEntries(), hist.GetMean()))
 
   83 cutb1_result = d.Filter(cutb1);
 
   84 cutb1b2_result = d.Filter(cutb1b2);
 
   85 cutb1_cutb1b2_result = cutb1_result.Filter(cutb1b2)
 
   88 evts_cutb1_result = cutb1_result.Count()
 
   89 evts_cutb1b2_result = cutb1b2_result.Count()
 
   90 evts_cutb1_cutb1b2_result = cutb1_cutb1b2_result.Count()
 
   92 print(
"Events passing cutb1: %s" %evts_cutb1_result.GetValue())
 
   93 print(
"Events passing cutb1b2: %s" %evts_cutb1b2_result.GetValue())
 
   94 print(
"Events passing both: %s" %evts_cutb1_cutb1b2_result.GetValue())
 
  109 entries_sum = d.Define(
'sum', 
'b2 + b1') \
 
  110                .Filter(
'sum > 4.2') \
 
  112 print(entries_sum.GetValue())