ROOT
master
Reference Guide
Loading...
Searching...
No Matches
df014_CSVDataSource.py
Go to the documentation of this file.
1
## \file
2
## \ingroup tutorial_dataframe
3
## \notebook -draw
4
## Process a CSV file with RDataFrame and the CSV data source.
5
##
6
## This tutorial illustrates how use the RDataFrame in combination with a
7
## RDataSource. In this case we use a TCsvDS. This data source allows to read
8
## a CSV file from a RDataFrame.
9
## As a result of running this tutorial, we will produce plots of the dimuon
10
## spectrum starting from a subset of the CMS collision events of Run2010B.
11
## Dataset Reference:
12
## McCauley, T. (2014). Dimuon event information derived from the Run2010B
13
## public Mu dataset. CERN Open Data Portal.
14
## DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700).
15
##
16
## \macro_code
17
## \macro_image
18
##
19
## \date October 2017
20
## \author Enric Tejedor (CERN)
21
22
import
ROOT
23
24
# Let's first create a RDF that will read from the remote CSV file.
25
# The types of the columns will be automatically inferred.
26
fileUrl =
"http://root.cern/files/tutorials/df014_CsvDataSource_MuRun2010B.csv"
27
df =
ROOT.RDF.FromCSV
(fileUrl)
28
29
# Now we will apply a first filter based on two columns of the CSV,
30
# and we will define a new column that will contain the invariant mass.
31
# Note how the new invariant mass column is defined from several other
32
# columns that already existed in the CSV file.
33
filteredEvents =
df.Filter
(
"Q1 * Q2 == -1"
) \
34
.Define(
"m"
,
"sqrt(pow(E1 + E2, 2) - (pow(px1 + px2, 2) + pow(py1 + py2, 2) + pow(pz1 + pz2, 2)))"
)
35
36
# Next we create a histogram to hold the invariant mass values and we draw it.
37
invMass =
filteredEvents.Histo1D
((
"invMass"
,
"CMS Opendata: #mu#mu mass;#mu#mu mass [GeV];Events"
, 512, 2, 110),
"m"
)
38
39
c =
ROOT.TCanvas
()
40
c.SetLogx
()
41
c.SetLogy
()
42
invMass.Draw
()
43
c.SaveAs
(
"df014_invMass.png"
)
44
45
# We will now produce a plot also for the J/Psi particle. We will plot
46
# on the same canvas the full spectrum and the zoom in on the J/psi particle.
47
# First we will create the full spectrum histogram from the invariant mass
48
# column, using a different histogram model than before.
49
fullSpectrum =
filteredEvents.Histo1D
((
"Spectrum"
,
"Subset of CMS Run 2010B;#mu#mu mass [GeV];Events"
, 1024, 2, 110),
"m"
)
50
51
# Next we will create the histogram for the J/psi particle, applying first
52
# the corresponding cut.
53
jpsiLow = 2.95
54
jpsiHigh = 3.25
55
jpsiCut =
'm < %s && m > %s'
% (jpsiHigh, jpsiLow)
56
jpsi =
filteredEvents.Filter
(jpsiCut) \
57
.Histo1D((
"jpsi"
,
"Subset of CMS Run 2010B: J/#psi window;#mu#mu mass [GeV];Events"
, 128, jpsiLow, jpsiHigh),
"m"
)
58
59
# Finally we draw the two histograms side by side.
60
dualCanvas =
ROOT.TCanvas
(
"DualCanvas"
,
"DualCanvas"
, 800, 512)
61
dualCanvas.Divide
(2, 1)
62
leftPad =
dualCanvas.cd
(1)
63
leftPad.SetLogx
()
64
leftPad.SetLogy
()
65
fullSpectrum.Draw
(
"Hist"
)
66
dualCanvas.cd
(2)
67
jpsi.SetMarkerStyle
(20)
68
jpsi.Draw
(
"HistP"
)
69
dualCanvas.SaveAs
(
"df014_jpsi.png"
)
70
71
print(
"Saved figures to df014_*.png"
)
TRangeDynCast
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Definition
TCollection.h:360
tutorials
analysis
dataframe
df014_CSVDataSource.py
ROOTmaster - Reference Guide Generated on Sat Mar 14 2026 14:28:17 (GVA Time) using Doxygen 1.10.0