a brief rootihp-lx.ethz.ch/compmethpp/root/introduction_to_root.pdf · 2015-02-17 · a brief...
TRANSCRIPT
![Page 1: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/1.jpg)
A brief
Introduction to
Luca Perrozzi - HPK E23 - [email protected]
Mario Masciovecchio - HPK E32 - [email protected]
Statistical Methods and Analysis Techniques in Experimental Physics
- ETHZ/UNIZH, 2015 -
-
An Object-Oriented
Data Analysis Framework
ROOT
Many thanks to Philipp Eller for his help with these slides
![Page 2: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/2.jpg)
Outline
• What is ROOT?
• A basic introduction to Bash, C++ and Python
• Interactive ROOT
• Basics:
– a first Example
– objects, pointers & references, memory
– Reading/writing data with ROOT
– Ntuples, 1D/2D Histograms
– Style, options, legend, canvas
– Functions & Fitting
• Editors
• Exercises
Introduction to ROOT 1 Luca Perrozzi
![Page 3: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/3.jpg)
What is ROOT?
• ROOT is an object oriented framework for data analysis – Read data from different sources
– Write data (persistent object)
– Select data with some criteria
– Produce results as plots, fits, etc…
• Supports “interactive” (C/C++ , Python) as well as “compiled” usage (C++)
• ROOT integrates several tools: – Random number generators
– Fit methods (Minuit)
– Neural Network framework (TMVA)
• Developed and supported by HEP community
Introduction to ROOT 2 Luca Perrozzi
![Page 4: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/4.jpg)
What is ROOT for?
Introduction to ROOT 3 Luca Perrozzi
![Page 5: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/5.jpg)
General Information
Official website (also for binaries and sources): http://root.cern.ch/
BaBar ROOT tutorials: http://www.slac.stanford.edu/BFROOT/www/doc/workbook/root1/root1.html
http://www.slac.stanford.edu/BFROOT/www/doc/workbook/root2/root2.html
Our website: http://ihp-lx.ethz.ch/Stamet/
Introduction to ROOT 4 Luca Perrozzi
![Page 6: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/6.jpg)
Basic UNIX commands
bash
$ ls
$ ls -ltr
$ mkdir myDir
$ cd myDir/mySubDir
$ mv a.txt b.txt
$ rm b.txt
$ rmdir myDir
$ rm –rf myDir
$ cat b.txt or less b.txt
$ pwd
*
vim, emacs
emacs, kate, gedit, etc…
List files in a directory
List files in a directory in a nice way
create a directory “myDir”
change current directory
rename a file from a.txt to b.txt
remove b.txt
remove empty directory “myDir”
remove not-empty directory “myDir”
print the content of b.txt
print your current directory path
Wildcard
Editors (as manu as you want):
(console editors)
(with graphics)
Introduction to ROOT 5 Luca Perrozzi
‘$’ just denotes the shell prompt, don’t type it.
![Page 7: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/7.jpg)
basic Python knowledge
control structures:
if condition:
something
elif condition:
something else
else:
other stuff
while condition:
do this
catching exceptions: try except else finally
functions:
def a(*args,**kwargs):
pass
classes:
class b(object):
pass
Introduction to ROOT 6 Luca Perrozzi
some types: bool, int, float, double, string...
comments: # bla or ‟‟‟
bla
more bla
‟‟‟
blocks: must be indented (4 white spaces is recommended)
some links: official website: http://www.python.org/ tutorials: http://docs.python.org/2/tutorial/ http://learnpythonthehardway.org/book/
![Page 8: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/8.jpg)
basic C++ knowledge control structures:
if (condition) {}
else {}
while (condition) {}
switch(var) {
case 0: {}
case 1: {}
...
}
functions:
void f(args) {}
classes:
class myClass{
public:
myClass(){};
~myClass(){};
private:
}
Introduction to ROOT 7 Luca Perrozzi
some types: bool, int, float, double, void, char, string, ...
comments: // bla or /*
bla
more bla
*/ blocks are in curly brackets {} lines end on semicolon ;
some links: http://www.cplusplus.com/doc/tutorial/ http://www.cprogramming.com/tutorial/lesson1.html
![Page 9: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/9.jpg)
interactive root
root
start root (CINT):
$ root
quit:
root [0] .q
launch and open a root file:
$ root file.root
suppress the startup screen:
$ root –l
load code from external file:
root [0] .L fileName.C
execute a Script:
root [0] .x script.C
use the GUI broswer:
root [0] TBrowser x
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 5.34/04 10 January 2013 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************
ROOT 5.34/04 (tags/v5-34-04@48259, Jan 10 2013, 17:15:27 on linuxx8664gcc)
CINT/ROOT C/C++ Interpreter version 5.18.00, July 2, 2010
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0]
Introduction to ROOT 8 Luca Perrozzi
CINT is the C/C++ interpreter of ROOT. Aclic is the C/C++ compiler invoked by ROOT when you ask ROOT to compile something.
![Page 10: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/10.jpg)
9
• You can open a new TBrowser in a
interactive ROOT session
• Can be useful to interactively browse the
content of root files, available histograms,
etc…
• For the tree you can use the tree viewer.
Right click on the tree and StartViewer
• Draw complex expressions
• Impose your cuts
• Draw multidimensional
histograms putting different
variables in different axis
Introduction to ROOT Luca Perrozzi
TBrowser
TreeViewer
TBrowser, TreeViewer
![Page 11: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/11.jpg)
A Basic ROOT Example
C++
#include <TH1.h>
#include <TFile.h>
#include <TRandom.h>
int main() {
TH1F *histo = new TH1F (“hgaus”, “A Gauss
Function”, 100, -5.0, 5.0);
TRandom rnd;
for (int i = 0; i < 1000; ++i) {
double x = rnd.Gaus (1.5, 1.0);
histo->Fill (x);
}
TFile outfile (“gaus.root”, “RECREATE”);
histo->Write();
outfile.Close();
return 0;
}
Python
from ROOT import TH1F,TFile,TRandom
histo = TH1F(“hgaus”, “A Gauss Function”, 100, -5.0, 5.0)
rnd = TRandom()
for i in range(1000):
x = rnd.Gaus(1.5,1.0)
histo.Fill(x)
outfile = TFile(“gaus.root”, “RECREATE”)
histo.Write()
outfile.Close()
Introduction to ROOT 10 Luca Perrozzi
Reminder: indentation is optional in C++, but mandatory in Python!
![Page 12: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/12.jpg)
A Basic ROOT Example
C++
#include <TH1.h>
#include <TFile.h>
#include <TRandom.h>
int main() {
TH1F *histo = new TH1F (“hgaus”, “A Gauss
Function”, 100, -5.0, 5.0);
TRandom rnd;
for (int i = 0; i < 1000; ++i) {
double x = rnd.Gaus (1.5, 1.0);
histo->Fill (x);
}
TFile outfile (“gaus.root”, “RECREATE”);
histo->Write();
outfile.Close();
return 0;
}
Python
from ROOT import TH1F,TFile,TRandom
histo = TH1F(“hgaus”, “A Gauss Function”, 100, -5.0, 5.0)
rnd = TRandom()
for i in range(1000):
x = rnd.Gaus(1.5,1.0)
histo.Fill(x)
outfile = TFile(“gaus.root”, “RECREATE”)
histo.Write()
outfile.Close()
Introduction to ROOT 11 Luca Perrozzi
imports from the ROOT library
main function
construct ROOT objects
loop and fill
write to file
![Page 13: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/13.jpg)
Pointers & References
C++
int a = 5;
int c = a; //calls copy constructor
int * b = &a; //gives b the address of a
int & r = a; //r is a reference to a
const & d = a; //c is a const ref to a
// Example
cout << a;
5
cout << &a;
0x7fdc049bd3d0
cout << b;
0x7fdc049bd3d0
cout << *b;
5
cout << c;
5
cout << &c;
0x7fdc03c31be0
Python
# python is taking care of it for you!
# In case you need a hard copy:
# from copy import copy, deepcopy
b = copy(a)
# or for nested instances:
b = deepcopy(a)
Luca Perrozzi Introduction to ROOT 12
- the operator * returns the value pointed to - the operator & returns the pointer of a variable
![Page 14: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/14.jpg)
Objects
C++
// create Objects:
int a = 7;
// deleted autoatically when out of scope
// create new Objects:
Object * myobj = new Object;
...
// do something with myobj
...
delete myobj;
// access members with ‘.’ of an instance
// or with ‘->’ for pointers
Python
# create Objects:
a = 7
# or for example:
histo = ROOT.TH1F(*args)
# access members always with ‘.’
# join as many „.‟ as you wish
Luca Perrozzi Introduction to ROOT 13
![Page 15: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/15.jpg)
Root class index
• Fundamental
resource to define
and use ROOT
objects
https://root.cern.ch/r
oot/html/ClassIndex
.html
Luca Perrozzi Introduction to ROOT 14
![Page 16: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/16.jpg)
Memory management
• ROOT objects (Histograms, Canvas, etc) are managed in memory
(and disk) by root using “names”
• In the same directory you cannot have two object with the same
name (ROOT will complain about memory leaks)
• ROOT does not like the following:
TH1F * histos[10];
for(int i = 0; i < 10 ; i++) histos[i]= new TH1F(“hist”,”hist”,1,2,3);
Luca Perrozzi Introduction to ROOT 15
same name! BE CAREFUL
![Page 17: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/17.jpg)
Reading data
• ROOT can read data from different sources such as files, network, databases
• In ROOT framework the data is usually stored in TNuple (or TTree) – Trees/Ntuples are like “tables”
– Each raw represent usually one “event”
– Each column is a given quantity (energy, mass, angle, etc… )
• TFile – Trees and Histograms can be read from “ROOT files” in which
they are stored
– TFiles contain directories
– can be saved by the user
Luca Perrozzi Introduction to ROOT 16
![Page 18: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/18.jpg)
TFile
C++
// A few file commands:
// Open a file:
TFile f(“myfile.root”);
// Inspect (list) contents with:
f->ls();
// Change into a directory of the file with:
f->cd(“mydirectory”);
// List the histograms in that directory:
gDirectory->ls();
// Plot a histogram in that directory:
histo->Draw();
Python
# A few file commands:
# Open a file:
f = ROOT.TFile(“myfile.root”);
# Inspect (list) contents with:
f.ls()
# Change into a directory of the file with:
f.cd(“mydirectory”)
# List the histograms in that directory:
gDirectory.ls()
# Plot a histogram in that directory:
histo.Draw()
Luca Perrozzi Introduction to ROOT 17
![Page 19: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/19.jpg)
reading data from ASCII File
C++
TNtuple calls("calls",
"calls","cost:time:type")
calls.ReadFile("calls.txt”)
calls->Scan()
Python
calls = ROOT.TNtuple("calls",
"calls","cost:time:type”)
calls.ReadFile("calls.txt”)
calls.Scan()
Luca Perrozzi Introduction to ROOT 18
calls.txt:
#cost time type
1.46 127 2
2.25 124 11
0.82 71 1
... ... ...
************************************************
* Row * cost * time * type *
************************************************
* 0 * 1.4600000 * 127 * 2 *
* 1 * 2.25 * 124 * 11 *
* 2 * 0.8199999 * 71 * 1 *
* 3 * 4.6900000 * 258 * 11 *
* 4 * 0.4000000 * 27 * 10 *
* 5 * 2.3800001 * 131 * 11 *
* 6 * 0.3300000 * 22 * 10 *
* 7 * 3.5199999 * 237 * 10 *
* 8 * 0.1199999 * 5 * 3 *
* 9 * 0 * 191 * 2 *
* 10 * 1.5599999 * 86 * 11 *
* 11 * 2.1800000 * 120 * 11 *
* 12 * 1.25 * 109 * 1 *
![Page 20: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/20.jpg)
Saving/reading ROOT files
• We can save TNuple in a file
root[2] TFile f("rootfile.root","CREATE”)
root[3] f.cd()
root[4] calls.Write()
root[5] f.Close()
• And read it back form a new ROOT console
root[0] TFile f("rootfile.root")
root[1] TNtuple * calls = f.Get("calls")
• When you read back, the pointer to the NTuple is owned by root, you should not delete it
• The “Get” method identify the objects with their name
• You can list the names and the types of the objects in a ROOT file
Luca Perrozzi Introduction to ROOT 19
![Page 21: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/21.jpg)
TTree
C++
// list all variables in the tree
mytree->Print();
// Draw one variable:
mytree->Draw(“track momentum”);
// Draw two variables as scatter plot:
mytree->Draw(“px:py”);
// scatter plot with cut a cut on pz:
mytree->Draw(“px:py”,”pz>5”);
// Print out values with cut
mytree->Scan(“px:py”,”pz>5”);
Python
// list all variables in the tree
mytree.Print()
// Draw one variable:
mytree.Draw(“track momentum”)
// Draw two variables as scatter plot:
mytree.Draw(“px:py”)
// scatter plot with cut a cut on pz:
mytree.Draw(“px:py”,”pz>5”)
// Print out values with cut
mytree.Scan(“px:py”,”pz>5”)
Luca Perrozzi Introduction to ROOT 20
![Page 22: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/22.jpg)
TH1F
C++
// Make a first histogram:
TH1F *histo = new TH1F(“h_name”, “h_title”, nbins, xlow,
xhi);
// Now draw the (currently empty) histo:
histo->Draw();
// Fill with a few entries:
histo->Fill(1.);
histo->Fill(3,10);
// Update the drawing:
histo->Draw();
Python
// Make a first histogram:
histo = ROOT.TH1F(“h_name”, “h_title”, nbins, xlow, xhi)
// Now draw the (currently empty) histo:
histo.Draw()
// Fill with a few entries:
histo.Fill(1.)
histo.Fill(3,10)
// Update the drawing:
histo.Draw()
Luca Perrozzi Introduction to ROOT 21
TH1F,TH1D, TH2F,TH3D
Float, Double
Dimensions
![Page 23: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/23.jpg)
TH1F
// Change the line colour:
h1->SetLineColor(kRed);
// Histogram Title
h1->SetTitle(“My title”);
// X axis title:
h1->SetXTitle(“The x axis”);
// Change x-axis range:
SetAxisRange(4., 15); // zoom
// Line colours:
SetMarkerColor(kBlue); // etc
// Point size:
SetMarkerSize(1.);
// Point style:
SetMarkerStyle(20);
// Fill colour:
SetFillColor(kGreen);
// Draw a filled histo:
SetFillStyle(3004); // diagonal lines
// Histo with error bars:
h1->Draw(“e”); // error = sqrt[nentries]
// Usually need to redraw histo after any changes:
h1->Draw();
// Second histo on same plot:
h2->Draw(“same”);
Luca Perrozzi Introduction to ROOT 22
![Page 24: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/24.jpg)
Style
Luca Perrozzi Introduction to ROOT 23
TCanvas
TLegend
TAxis
TPaveText
TPad
![Page 25: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/25.jpg)
more plotting options
Luca Perrozzi Introduction to ROOT 24
// Axis labeling
histo.GetXaxis().SetTitle(„#sqrt{s}‟)
// Legends
leg = ROOT.TLegend(0.1,0.5,0.8,0.9)
leg.AddEntry(histo1,‟description of histo1‟)
leg.AddEntry(histo2,‟description of histo1‟)
leg.Draw(„FLP‟)
Printing
You can print TPad in many different
formats using TPad::Print function
ROOT support latex syntax
F = show the “Fill” color/style
L = show the “Line2 color/style
P = show the “Point” color/marker style E = show error bars
![Page 26: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/26.jpg)
2D histogram
• 2D histograms can be drawn with many different styles
• It is possible to rotate with the mouse 3D graphics (e.g.
lego plot)
• SetLogz can be used to set log scale for the histogram
bin
Luca Perrozzi Introduction to ROOT 25
![Page 27: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/27.jpg)
Functions
// ROOT has many predefined functions, e.g.
sin(x), exp(x), …, cd(), ls(), …
// Many of the ROOT classes have associated functions, e.g.
Draw(), Print(), SetXTitle(), …
// Easy to define new ROOT functions, e.g.
// 1-D function – type is TF1:
TF1 *f1 = new TF1(“f1”, “x*sin(x)”,0,10);
// 2-D function – type is TF2:
TF2 *f2 = new TF2(“f2”, “y*sin(x)”,0,10,0,20);
// Plot these functions with
f1->Draw();
f2->Draw(“surf4”); //5 surface options for 2D
Luca Perrozzi Introduction to ROOT 26
![Page 28: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/28.jpg)
Fitting
// Fitting in ROOT based on Minuit (ROOT class: TMinuit)
// ROOT has 4 predefined fit functions, e.g.
„gaus‟: f(x)=p0exp{-½[(x-p1)/p2]2} //3 params
// Fitting a histogram with pre-defined functions, e.g.
h1->Fit(“gaus”); //landau, exp0, pol0->pol9
h1->Fit(“landau”, “R”,””, 3.,15);
// “R” says „fit only in range xmin -> xmax‟
// User-defined: 1-D function (TF1) with parameters:
TF1 *myFit= new TF1(“myfit”,”[0]*sin(x) +[1]*exp(-[2]*x)”,0,2);
// Set param names (optional) and start values (must do):
myFit->SetParName(0,”paramA”);
myFit->SetParameter(0,0.75); //start value for param [0]
// Fit a histo:
myHist->Fit(“myfit”);
Luca Perrozzi Introduction to ROOT 27
![Page 29: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/29.jpg)
Editors
Vim
command line based editor
start and open a file
$ vim file
edit file: go to INSERT mode:
press „i‟
go back to command mode:
press „Esc‟
save file:
„:w‟
quit:
„:q‟
Emacs
command line and GUI based editor
start Emacs:
$ emacs &
open file:
Ctrl-x Ctrl-f
save file
Ctrl-x s
quit Emacs:
Ctrl-x c
Luca Perrozzi Introduction to ROOT 28
![Page 30: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/30.jpg)
Exercise
• Let‟s first work through the tutorial on our
website: http://ihp-lx.ethz.ch/Stamet/root/ROOT_tutorial_EN.htm
You will gain first experience using c/python,
ROOT, bash and vim/emacs
• Then you will have time to work on todays
exercise sheets
Luca Perrozzi Introduction to ROOT 29
![Page 31: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/31.jpg)
Example of standalone app
Luca Perrozzi Introduction to ROOT 30
If you write your own main, say myapp.cpp
you can compile it with g++ just importing the ROOT libraries
$ g++ -o myapp myapp.cpp `root-config --glibs --cflags`
And then run it!
$ ./myapp
![Page 32: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/32.jpg)
Last remark
• Do you have questions? Doubts?
• Can‟t the teacher assistants answer?
• Are you feeling desperate?
Luca Perrozzi Introduction to ROOT 31
![Page 33: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/33.jpg)
Last remark
• Do you have questions? Doubts?
• Can‟t the teacher assistants answer?
• Are you feeling desperate?
Luca Perrozzi Introduction to ROOT 32
![Page 34: A brief ROOTihp-lx.ethz.ch/CompMethPP/root/Introduction_to_ROOT.pdf · 2015-02-17 · A brief Introduction to Luca Perrozzi - HPK E23 - luca.perrozzi@phys.ethz.ch Mario Masciovecchio](https://reader034.vdocument.in/reader034/viewer/2022042414/5f2f50b771a12a7233647ace/html5/thumbnails/34.jpg)
Other references
• http://www.desy.de/~blist/summerstudents/root-intro-07-transp.pdf
• http://www.pp.rhul.ac.uk/~cowan/RootTutorial/ROOTtutorial.pdf
• http://www-ekp.physik.uni-karlsruhe.de/~jwagner/WS0809/docs/SummerStudents2004.pdf
• http://pi.physik.uni-bonn.de/~bechtle/teaching/physics716_ss14/PBe_RootIntroduction08.pdf
• http://hep.ph.liv.ac.uk/~mccauley/linux_root/Linux-root11.pdf
• USEFUL PYTHON EXAMPLES
http://indico.hep.manchester.ac.uk/getFile.py/access?resId=0&materialId=slides&confId=267
Luca Perrozzi Introduction to ROOT 33