26 juil 2018 · 5 Overview of common ROOT tasks 6 Making good plots 7 PyROOT tricks Steven Schramm (Université de Gen`eve) Introduction to ROOT
Previous PDF | Next PDF |
[PDF] Introduction à Root
=> on crée une ce qu'on appelle une macro ROOT: C'est un fichier C qui contient les commandes que l'on veut executer pour executer la macro taper x
[PDF] Intro à ROOT
16 avr 2012 · Intro à ROOT cours TP3 physique des particules, on fait tout avec ROOT – Lire et écrire Code ROOT = code C++ interprété par CINT (peut
[PDF] An Introduction to ROOT
28 juil 2011 · An Introduction to ROOT Page 1 An Introduction to ROOT Gerhard Brandt ( Humboldt Universität zu Berlin) DESY Summer Student Tutorial
[PDF] ROOT Intro - CERN Indico
1 août 2016 · August 2016 ROOT : ASP 2016 : Rwanda 1 Introduction to ROOT SH Connell Really more than that Free scien'fic compu'ng Framework
[PDF] Introduction to ROOT - CERN Indico
26 juil 2018 · 5 Overview of common ROOT tasks 6 Making good plots 7 PyROOT tricks Steven Schramm (Université de Gen`eve) Introduction to ROOT
[PDF] Introduction to ROOT
What is ROOT? 5 • Read data from different sources • Write data (persistent object) • Select data with
[PDF] Lecture 7
MNXB01 - Lecture 7: Intro to ROOT Peter Christiansen (Lund) 2 Linux and C++ are tools ○ In physics computing is an integral part of the way we do science
[PDF] Introduction to ROOT
ETHZ/UNIZH, FS11 Introduction to ROOT ROOT is an object oriented framework for data analysis homepage with documentation and tutorials: root cern ch
[PDF] ROOT Tutorial - UV
ROOT Tutorial – Luca Fiorini 2 Contents • Practical introduction to the ROOT framework – Starting ROOT – ROOT prompt – Macros – Functions
[PDF] A short, pragmatic and INCOMPLETE intro to C++/ROOT
ROOT is a C++ framework and environment used and developed at CERN ○ Gives you ready to use data types (histograms, trees) and constructs for math,
[PDF] INTRO aux sombres heros de l`amer
[PDF] Intro Caractéristiques du bateau - Festival
[PDF] Intro de 32 comptes - 2 Tags *TRIPLE STEP RIGHT, BACK ROCK
[PDF] Intro Dieu d`éternité Créateur de la terre Roi d`Eternité L`adoration t
[PDF] intro e roditori.indd
[PDF] Intro Höhepunkte Reiseroute - Conception
[PDF] intro mistral gagnant - Club Guitare de Lannilis
[PDF] Intro Points forts - France
[PDF] Intro Points forts Itinéraire
[PDF] Intro PROTECT A. (FR)
[PDF] Intro Tech Masques TECHNOLOGIE MASQUE
[PDF] Intro. Medumba Language
[PDF] introducción - sinat - Mexique Et Amérique Centrale
[PDF] Introducing AgroFresh - Postharvest Information Network - Anciens Et Réunions
Introduction to ROOT
Steven Schramm
HASCO 2018
July 26, 2018
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 1 / 58Introduction
Programming is an essential part of modern data analysis It is dicult to get through an MSc without programming It is near-impossible to get through a PhD without programming ROOT is one of the key tools for data analysis in high energy physicsIt is not the only tool, depending on what you do
However, you are extremely likely to use it at some point Programming is a skill that is best learned by practice Don't just look at the slides - try it out yourself! If you nd it hard or frustrating at rst, don't worry Just like human languages, you will improve with useIf you get stuck, ask questions!
The internet is full of questions and sample code
There is even
an entire fo rumded icatedto ROOT questions Your colleagues probably also use ROOT and can help Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 2 / 58Overview
1Introduction to ROOT
2Key programming concepts
3Running ROOT macros and scripts
4The ROOT interpreter
5Overview of common ROOT tasks
6Making good plots
7PyROOT tricks
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 3 / 58Introduction to ROOT
Introduction to ROOT
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 4 / 58Introduction to ROOT
What is ROOT?
ROOT is a powerful scientic software framework which is... Likely older than many of you (1994, 24 years old)Developed by CERN (mostly the
EP-SFT group
Written in C++, but with interfaces to other languagesPopular enough to have its own
w ikipediapa ge (11 languages) Widely used in particle physics, but also used externally Also a data format tailored to particle physics needs Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 5 / 58Introduction to ROOT
Is ROOT an acronym?
Not the most important question, but a very common oneThere is no original acronym for the toolkit
When asked in 1998
, the original author replied that it was the \roots"(like a tree root) upon which future work would be basedHe suggested a possible backronym: Rapid Object-Oriented Technology
I have never heard this name being used outside of that emailIn short, just call it ROOT
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 6 / 58Introduction to ROOT
PyROOT
As mentioned, ROOT has interfaces to several other languages The one with the largest support and usage is python (PyROOT) Note: HEP is still almost exclusively python2.7, not python3 Essentially everything you can do in ROOT is possible in PyROOT In rare cases it requires a few tricks to handle the python/C++ barrier In many cases, PyROOT is much easier to use than ROOT However, compiled C++ code is usually faster to runYou will likely need to use a mix of the two
C++ is commonly used in CPU-time-sensitive tasks:
reconstruction, data processing, etcPython is usually used in person-time-sensitive tasks: data analysis, plots for physics results, etcI will present both; start with the one that you prefer Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 7 / 58Introduction to ROOT
A note on ROOT developments
If you are familiar with C++, you may be confused at times Some of the ROOT concepts and objects seem to be redundant It's important to keep in mind how old this package is Example: ROOT TString and std::string do have a large overlap However, ROOT started in 1994, and std::string is from 1998 ROOT is continually undergoing modernization and updates However, it is dicult to make major changes when experimentlifetimes can be in the decades (such as the LHC experiments)Backwards-compatibility is thus nearly always required
If your code works in release X, it should also work in X+1 Removing TString and similar is thus not easy to do Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 8 / 58Introduction to ROOT
Finding information on ROOT
TheROOT w ebsite
contains lots of useful info rmationGetting started
Downloading instructions
, pre-compiled for many popular systemsUser's guide
Reference guide
(do cumentationof objects, fu nctions,and mo re)Discussion forum
ROOT shares a name with the linux super-user/admin account If you are searching on the internet for a ROOT question or feature, you probably want to search for \CERN ROOT" Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 9 / 58Key programming concepts
Key programming concepts
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 10 / 58Key programming concepts
Brief reminders
Hopefully you already have some programming experienceI willvery brie
yremind you of a few key points:Primitive types vs complex typesConditional statements
Iterative statements (loops)
Arrays/lists/vectors/etc
Functions
Classes
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 11 / 58Key programming concepts
Primitive types vs complex types
\Primitive types" are the types that are \native" to a language You do not need to include any libraries to use themThey generally have a xed interpretation
In C++, the primitive types are very simple:
Integer numbers: (unsigned) char, short, int, long, long longReal numbers:
oat, double, long doubleConditions: bool = \true" or \false" = 1 or 0
That's it - even the std::string is a complex typeIn python, types are inherently dynamic
The type is not even evaluated until the command is executed This is one area where python and C++ are completely dierent Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 12 / 58Key programming concepts
Conditional statements
The conditional statement allows you to control code ow Code no longer needs to be designed for a single fully-determined task Arguably the most important development in programmingC++Python
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 13 / 58Key programming concepts
Iterative statements (loops)
The iterative statement allows you to simplify codeNo need to write the same thing over and over
Combined with conditions, you can iterate over many itemsC++Python
All of the above will print out the numbers between 0 and 4, with each number on a separate line Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 14 / 58Key programming concepts
Arrays/lists/vectors/etc
One of the main uses is loops is for lists of itemsC++: arrays and vectors are commonly used
Use vectors if possible, as arrays can be dangerousPython: lists are a fundamental piece of the code
Such \collection" data structures areiterableIf you don't need to know the element index, there is another loop type
Note: recall C++ and python are 0-indexed, so numbers[0] is 1C++Python
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 15 / 58Key programming concepts
Functions
Functions must be declaredbeforethey are usedModularity (use of functions) is a key piece of good code design
Allows for re-use of code rather than duplication
Easier to read/understand the code in small pieces Please use clear function+variable names (unlike the example)C++Python
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 16 / 58Key programming concepts
Classes
Object-oriented programming is based on the notion of classes Useful way of grouping similar concepts/information Classes have both a state (variables) and behaviour (functions) You may not need to write classes too often (depends on your usage) However, all of the ROOT objects you work with are classes histograms, les, trees, ts, etcC++Python
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 17 / 58Running ROOT macros and scripts
Running ROOT macros and scripts
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 18 / 58Running ROOT macros and scripts
Ways to use ROOT
There are four primary ways to use ROOT
1. Command line (Py)ROOT: quick checks and studies, in C++ o rp ython 2.ROOT macros: simple o rmo deratep rograms,in C++
3. PyROOT scripts: simple o rmo deratep rograms,in p ython 4. Compiled ROOT: complex o rCPU-intensive p rograms,in C++ We will brie y discuss these four approachesSame task in each case: read a le and plotpTof all leptonshtempEntries 125512Mean 4.065e+04Std Dev 1.515e+04050100150200250300350400450310´lep_pt020004000600080001000012000140001600018000200002200024000htempEntries 125512Mean 4.065e+04Std Dev 1.515e+04lep_ptSteven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 19 / 58
Running ROOT macros and scripts
Command line (Py)ROOT
ROOT interpreter,
quick methodROOT interpreter,
detailed methodPyROOT interpreter
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 20 / 58Running ROOT macros and scripts
ROOT macros
For common tasks, you may want to put it in a macro Then you don't need to type the same thing every time Also, if the code is anything but trivial, command-line is not optimal Macros: C++ les with a function named the same as the le The macro (myMacro.cpp):Two ways to run the macro: Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 21 / 58Running ROOT macros and scripts
PyROOT scripts
We're increasing program complexity and utility
This is the standard method for PyROOT usage
The script (myScript.py):Running the script:
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 22 / 58Running ROOT macros and scripts
Compiled ROOT
This is much more CPU ecient, but more complex to program The program(myCompiled.cpp):Compiling and running the program (note the back-quotes): Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 23 / 58The ROOT interpreter
The ROOT interpreter
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 24 / 58The ROOT interpreter
Special interpreter commands
There are tricks to using the ROOT interpreter
When starting the interpreter, there are special commandsroot-l: disable the start screen (save time, especially if remote)root-b: disable graphics (save a lot of time if making many plots)root-h: display the full set of options (help)After opening the interpreter, there are a few other tricks
.L myMacro.cpp: load but don't execute a macroCall the function(s) after as you would call any function
.x myMacro.cpp: load and execute a macroThis requires that a function named the same as the le .!command: issue a console command outside of ROOT.!ls: lists current directory contents .!cd ABC: changes current directory to ABC.q(or.qqqq): quit (or force quit)Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 25 / 58
The ROOT interpreter
The TBrowser
TBrowser is a very useful ROOT application
After opening ROOT, open by declaring a variable of type TBrowser new TBrowser,TBrowser t, etcIf you opened a le rst, you will be greeted with the following: Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 26 / 58The ROOT interpreter
Plotting in the TBrowser
With an open le, you can browse through the tree
Double-click on a branch to see the plot
There are other features: style editors, tters, and more You can also save the current plot to many dierent formats Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 27 / 58The ROOT interpreter
Other useful interpreter commands
The interpreter is really aimed at quick studies
There are several commands to quickly look at a le tree->Print(): List all of the branches in the treeGood to quickly look for branches of interestCan also be ltered with wildcards:tree->Print("lep*")tree->Scan(): look at the contents of a given (set of) branch(es)Can list multiple variables, separating with colons
tree->Scan("eventNumber;leppt")gives the belowNote that there are two values (instances) in leppt per event
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 28 / 58The ROOT interpreter
Selections on Draw and Scan
It is possible to apply selections to the Draw and Scan commandsVery powerful for quick studies!
Example: Scan results after a selection ofp`1T>400GeVSteven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 29 / 58
The ROOT interpreter
Selections on Draw and Scan
It is possible to apply selections to the Draw and Scan commandsVery powerful for quick studies!
Example: Scan results after a selection ofp`1T>400GeVExample: draw leppt only for eventNumbers divisible by 3 and 4
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 30 / 58Overview of common ROOT tasks
Overview of common ROOT tasks
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 31 / 58Overview of common ROOT tasks
Most common tasks
In my opinion, the most common ROOT tasks are:
Plotting or manipulating histograms
Reading/writing histograms
Reading/writing ntuples
Fitting distributions
We will practice most of these in detail tomorrow
For now, let's brie
y discuss what each task entails Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 32 / 58Overview of common ROOT tasks
Plotting and manipulating histograms
There are many dierent types of histograms for plotting, including:One-, two-, and three-dimensional histograms (
TH1 TH2 TH3 There are many types of each, but * =fI,F,Dgare the most commonI = integer, F = oat, D = double =)type of axis valuesTProleand TProle2D (auto-averages)TEciency
(fo reciency calculation = fraction passing a selection) All of these histograms share common plotting featuresThey mainly dier in the way they are created
Basic idea:
Create a histogram with a given binning (varies by type)Fill histograms with each entry:histo->Fill(x,y,z,weight)The above is for 3D, remove y and/or z for 1D or 2D
If weight is not specied, the default value is 1
Plot the histogram:histo->Draw()Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 33 / 58
Overview of common ROOT tasks
Reading/writing histograms and similar
Any ROOT object can be stored in a .root le
Outside of trees (ntuples), they are easy to read/writeWriting basics:
Open a le:TFile* myFile = TFile::Open("myFile.root","RECREATE")Enter the le:myFile->cd()Write your histogram to the le:myHisto->Write()Close the le:myFile->Close()Reading basics:
Open the le:TFile* myFile = TFile::Open("myFile.root","READ")Retrieve from the le:TH1D* myHisto1D = (TH1D*)myFile->Get("name")Tell the histogram to stay in memory:myHisto1D->SetDirectory(0)Close the le:myFile->Close()Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 34 / 58
Overview of common ROOT tasks
Reading/writing ntuples
TTrees are complex data structures
Contain \branches" representing information
Each branch contains one or more value(s) per event Values are typically primitive types or arrays of primitive types More advanced: add arbitrary objects, beyond the scope of this intro TTrees are highly compressed and also optimized for HEP needs Most/all(?) HEP datasets (data and MC) are stored in TTrees If the trees are simple (no complex objects), often called ntuples Reading/writing ntuples is more complex and is best done by exampleWe will work with ntuples tomorrow
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 35 / 58Overview of common ROOT tasks
Fitting distributions
ROOT makes it very easy to t distributions
People who have went to industry say they still use ROOT for tting Basic idea: histograms have aFit()functionCreate the t type we want:TF1* myFit = new TF1("myFit","gaus",-1,1)Fit a gaussian in the range of -1 to 1Optionally specify starting values:myFit->SetParameter(0,3.14)Set the value of t parameter 0 (the rst one) to 3.14
Apply it to a histogram:myHisto->Fit(myFit);Get the resulting2=Ndof:myFit->GetChisquare()/myFit->GetNDF()There are several default t functions available, more detailshere
Or specify your own:TF1* mf = new TF1("mf","x*[0]+sqrt(x+[1])",1,5)This has two t parameters,[0]and[1]Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 36 / 58
Making good plots
Making good plots
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 37 / 58Making good plots
What is a good plot?
This is a very subjective question with no easy answerHowever, there are some agreed-upon features
The axis labels should be specied, including units There should be a legend on the plot to explain the line(s) In many cases, there should be a ratio sub-plot or similarUncertainties should be included where relevant
Dierent colours should be used, grouped where relevant Dierent markers should be used to help in case of printing in blackand white or for colourblind individualsLabels should be added to the plot to make it self-explanatory
All text on the plot should be large enough to read on a projectorWe will brie
y go through examples of how to do this Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 38 / 58Making good plots
Style references
Line types
Marker typesColours!
Fill types
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 39 / 58Making good plots
Random Gaussian distributions
Create two random Gaussian distributions with 1M entries each Draw them on thesameplotThey are hard to tell apart, but there are two lines We can look at the ratio to better dierentiate between them 5 4 3 2 1 0 1 2 3 4 5 0 500010000
15000
20000
25000
30000
35000
40000
Random Gaussian 1
gauss1Entries
1000000
Mean 05 2.63eStd Dev
1.001Random Gaussian 1
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 40 / 58Making good plots
Ratios
Clone the rst histogram and then divide by the secondPlot the resulting ratio
Now we can see that they dier in the tails
5 4 3 2 1 0 1 2 3 4 5 0 0.5 1 1.5 2 2.5Random Gaussian 1
gauss1Entries
92Mean
0.1022
Std Dev
2.653Random Gaussian 1
Steven Schramm (Universite de Geneve)Introduction to ROOTJuly 26, 2018 41 / 58Making good plots
Two-panel plots
The two plots we have looked at so far provide complementary infoIt would be good to see them both at once
We can do this by splitting the canvas into two pads While this works, the plot style can clearly be improved 5 4 3 2 1 0 1 2 3 4 5 0 0.5 1 1.5 2 2.5Random Gaussian 1
gauss1Entries
92Mean