46
ROOT Einführung Julian Glatzer ([email protected]) Fortgeschrittenenpraktikum Felix Bührer ([email protected])

ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Embed Size (px)

Citation preview

Page 1: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

ROOT Einführung

Julian Glatzer ([email protected])

Fortgeschrittenenpraktikum

Felix Bührer ([email protected])

Page 2: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 2

Was ist ROOT?

● ROOT ist ein am CERN entwickeltes Softwarepaket zur

Datenanalyse

(insbesondere in der Teilchenphysik)

● ROOT basiert auf C++ Klassen.

● Es ist nicht notwendig C++ im Detail zu können. Kenntnisse

schaden aber nicht.

● Wobei kann mir ROOT helfen?

– Datenverarbeitung (Einlesen, Fitten, ...)

– Visualisierung

Page 3: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 3

Warum ROOT?

● ROOT ist nicht das einsteigerfreundlichste Programm, aber:

- es ist sehr einfach, häufig benutzte Schritte zu wiederholen

- sehr mächtige Statistik-Funktionen und sehr robustes Fitting

● Gerade fürs FP: Gute Möglichkeit Methoden an Hand

“einfacher” Beispiele auszuprobieren

Page 4: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 4

● http://root.cern.ch

– User's Guide

in “Buchform” (PDFs)

– Reference Guide

Erklärung aller Klassen

– HowTo's

● Google Suche

– TH1F site:root.cern.ch

● Bei uns: Westbau 022, Tel: 8534, E-Mail

Hilfe

Page 5: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 5

Installation

● Im CIP-Pool installiert

● Für die meisten großen Linux-Distributionen in den Paketquellen enthalten

(Ubuntu: apt-get install root-system

Fedora: yum install root)

● Mac OS X und Windows binaries auf

http://root.cern.ch/drupal/content/downloading-root

Page 6: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 6

Erste Schritte

● Es gibt mehrere Möglichkeiten ROOT zu benutzen:

- über eine interaktive Shell (CINT)

- schreiben von Makros welche von ROOT ausgeführt werden

können

- Einbinden von ROOT-Klassen in kompilierfähigen C++-Code

- ROOT-Modul für Python

Page 7: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 7

Erste Schritte: Interaktiv● Starten durch Eingabe von root oder

Klick auf Desktop Icon

● Root hat einen eingebauten C++

Interpreter (CINT)

● Mit den Tasten ↑ ↓ erreicht man die

zuletzt benutzten Befehle

● Beenden mit .q

(bzw .qqqqqq)

● Sollte nur zum Testen benutzt werden

Page 8: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 8

● Makros automatisieren wiederkehrende

Arbeiten

● Werden in Textdateien geschrieben (z.B.

beispiel.C) und mit .x beispiel.C

ausgeführt

● Dateiname beispiel.C muss dem Namen

der Funktion void beispiel()

entsprechen.

void beispiel(){ gROOT->Reset(); cout << "Beispiel 1: "<<endl; cout << "Wurzel aus 2 = " << sqrt(2.) << endl;}

Erste Schritte: Makros

Page 9: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 9

Sehr kurze C++ Einführungvoid vartypen(){ int ganz=1; double fliesskomma=2.5; TString text="Hello world!"; cout << text << endl;

//Rechnen double dkf=fliesskomma+ganz;

cout << fliesskomma << " + " << ganz << " = " << dkf << endl;

TH1F* myHist=new TH1F(“myHisto”,”Distribution”,10,0.,1.); myHist->Fill(1.);}

Funktionsdefinition Rückgabetyp name(<Typ> parameter)Aufruf: name() bzw. name(1)

Variablendefinition: Typ name=wert

Ausgabe: cout: Kommandozeileendl: end line

Komplexere Objekte:Typ* name=new Typ(Parameter)

Aufruf von Objektfunktion mit ->

Page 10: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 10

ROOT Klassen

● ROOT bietet verschiedene Datenstrukturen in denen

Messwerte gespeichert werden können, für das FP relevant

sind:

- Histogramme (TH1F, TH2F)

- Graphen (TGraph, TGraphErrors)

● Außerdem: Funktions-Klasse (TF1), Definition von

benutzerdefinierten Funktionen

Page 11: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 11

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 7

Page 12: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 12

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 8

Page 13: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 13

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

Page 14: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 14

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

6 + 5 = 11

Page 15: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 15

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

6 + 5 = 114 + 5 = 9

Page 16: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 16

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

6 + 5 = 114 + 5 = 95 + 4 = 9

Page 17: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 17

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

6 + 5 = 114 + 5 = 95 + 4 = 92 + 5 = 7

...

Page 18: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 18

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

6 + 5 = 114 + 5 = 95 + 4 = 92 + 5 = 7

...

Page 19: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 19

Histogramme

dienen der Visualisierung von Wahrscheinlichkeitsverteilungen

6 + 1 = 72 + 6 = 82 + 3 = 5

6 + 5 = 114 + 5 = 95 + 4 = 92 + 5 = 7

...

1/6

5/36

1/9

1/12

1/18

1/36

Page 20: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 20

Histogramme● “Buchen”

● Mehrfach füllen

● Zeichnen

wobei Option=“”, “E” (√N Fehlerbalken), “SAME” (Histogramm über

altes Histogramm), “C” (glatte Kurve), “L” (Linie) oder Kombinationen z.B.

“SAME,E”.

TH1F* myHist=new TH1F(“myHisto”,“Distribution”,10,0.,1.);

myHist->Fill(x);

myHist->Draw(“Option”);

Name des Objekts Name beim Speichern Titel Anzahl Bins

X Achse von bis

Page 21: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 21

Histogramme

void histogram(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TH1F* myHist = new TH1F("myHist","Distribution”, 10,0.,1.); myHist->Fill(0.37); //Bin 4 myHist->Fill(0.35); //Bin 4 myHist->Fill(0.78); //Bin 8 myHist->Fill(0.51); //Bin 6 myHist->Draw();}

Für schönere Grafik

Page 22: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 22

Histogramme

void histogram(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TH1F* myHist = new TH1F("myHist","Distribution”

,10,0.,1.); myHist->Fill(0.37); //Bin 4 myHist->Fill(0.35); //Bin 4 myHist->Fill(0.78); //Bin 8 myHist->Fill(0.51); //Bin 6 myHist->Draw();}

Für schönere Grafik

Page 23: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 23

Rechtsklickmenüs

Viele Funktionen sindauch per Rechtsklick auf das passende Objekt erreichbar.

Page 24: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 24

Optionen● Für Linien

Hist->SetLineStyle(x); Hist->SetLineColor(x); Hist->SetLineWidth(x);

● Für Marker

Hist->SetMarkerStyle(x); Hist->SetMarkerColor(x); Hist->SetMarkerSize(x);

● Für Flächen

Hist->SetFillStyle(x); Hist->SetFillColor(x);

● Für Achsen

Hist->GetXaxis()->SetTitle(“#phi_{2}^{2}”);

Hist->GetYaxis()->SetRangeUser(-1.,1.);

● Für den Titel

Hist->SetTitle(“Titel”);

Latex mit # statt \

Page 25: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 25

Farben, Linien, Marker, ...

Page 26: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 26

Farben, Linien, Marker, ...

http://root.cern.ch/root/html522/TAttLine.htmlhttp://root.cern.ch/root/html522/TAttFill.htmlhttp://root.cern.ch/root/html522/TAttMarker.html

Page 27: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 27

Eine typische FP-Auswertung

z.B. Spannung in 0.1s Schritten

● Aus dem Versuch: Messwerte in Textdatei

● Ziel ist es die Werte darzustellen und eine

Anpassung durchzuführen

1. Einlesen der Daten

2. Füllen der Messwerte in geeignete

Datenstruktur

3. Anpassung einer Funktion an die Daten

peaks.dat:

322323322312314335291331329317318337336364310etc.

Page 28: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 28

Einlesen von Datenvoid readFile(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peaks.dat"); //Oeffnen der Datei Float_t xi; Int_t nlines = 0;

TH1F* _histo = new TH1F("_histo","Peaks", 1250, 0., 125 );

while( !in.eof() ){ //Bis zum Ende der Datei if(in >> xi){ //Einlesen einer Zeile _histo->SetBinContent( nlines, xi );

//Setzen des Bin Inhalts nlines++; cout << nlines << ": " << xi <<endl; } }

cout<<"found "<<nlines<<" data points"<<endl; in.close(); _histo->Draw();}

peaks.dat:

322323322312314335291331329317318337336364310etc.

Page 29: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 29

Füllen in ein Histogrammvoid readFile(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peaks.dat"); //Oeffnen der Datei Float_t xi; Int_t nlines = 0;

TH1F* _histo = new TH1F("_histo","Peaks", 1250, 0., 125 );

while( !in.eof() ){ //Bis zum Ende der Datei if(in >> xi){ //Einlesen einer Zeile _histo->SetBinContent( nlines, xi );

//Setzen des Bin Inhalts nlines++; cout << nlines << ": " << xi <<endl; } }

cout<<"found "<<nlines<<" data points"<<endl; in.close(); _histo->Draw();}

peaks.dat:

322323322312314335291331329317318337336364310etc.

Page 30: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 30

Füllen in ein Histogrammvoid readFile(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peaks.dat"); //Oeffnen der Datei Float_t xi; Int_t nlines = 0;

TH1F* _histo = new TH1F("_histo","Peaks", 1250, 0., 125 );

while( !in.eof() ){ //Bis zum Ende der Datei if(in >> xi){ //Einlesen einer Zeile _histo->SetBinContent( nlines, xi );

//Setzen des Bin Inhalts nlines++; cout << nlines << ": " << xi <<endl; } }

cout<<"found "<<nlines<<" data points"<<endl; in.close(); _histo->Draw();}

peaks.dat:

322323322312314335291331329317318337336364310etc.

Page 31: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 31

1D-Fit

Page 32: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 32

Einschub: FunktionenROOT kann

● exp(x), sin(x), log(x), sqrt(x)

● gaus (mit 1 s!), Landau,...

● TMath Funktionen

http://root.cern.ch/root/html522/TMath.html

● Beliebige Funktionen

void function(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TF1 *myFunc = new TF1("myFunction", "sin(x)/x",0.,6.5.); myFunc->Draw(); myFunc->GetXaxis()->SetTitle("x"); myFunc->GetYaxis()->SetTitle("f(x)=sin(x)/x"); myFunc->SetTitle("Funktion");}

Page 33: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 33

1D-Fit

.

.

.

_histo->Draw(); TF1* fitFunc = new TF1("fitFunc","pol1(0)+gaus(2)",0,130); fitFunc->SetParameter(3,70); fitFunc->SetParameter(4,5); fitFunc->SetLineColor(kRed); _histo->Fit("fitFunc","", "", 55,83); cout<<" --------------------------------" <<endl; cout<<" chi2/dof: "<< fitFunc->GetChisquare()/fitFunc->GetNDF()<<endl; }

Gaussfunktion [2]*exp(-((x-[3])/(2*[4]))^2) (Parameternummerierung startet bei 2)

Polynom ersten Grades [0]+[1]*x Parameternummerierung startet bei 0)

Startwerte setzen

Fit durchführen

Page 34: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 34

1D-Fit

.

.

.

_histo->Draw(); TF1* fitFunc = new TF1("fitFunc","pol1(0)+gaus(2)",0,130); fitFunc->SetParameter(3,70); fitFunc->SetParameter(4,5); fitFunc->SetLineColor(kRed); _histo->Fit("fitFunc","", "", 55,83); cout<<" --------------------------------" <<endl; cout<<" chi2/dof: "<< fitFunc->GetChisquare()/fitFunc->GetNDF()<<endl; }

Gaussfunktion [2]*exp(-((x-[3])/(2*[4]))^2) (Parameternummerierung startet bei 2)

Polynom ersten Grades [0]+[1]*x Parameternummerierung startet bei 0)

Startwerte setzen

Fit durchführen

Page 35: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 35

Kovarianzmatrix

.

.

.

_histo->Draw(); TF1* fitFunc = new TF1("fitFunc","pol1(0)+gaus(2)",0,130); fitFunc->SetParameter(3,70); fitFunc->SetParameter(4,5); fitFunc->SetLineColor(kRed); _histo->Fit("fitFunc","", "", 55,83); cout<<" --------------------------------" <<endl; cout<<" chi2/dof: "<< fitFunc->GetChisquare()/fitFunc->GetNDF()<<endl;

TVirtualFitter *fitter = TVirtualFitter::GetFitter(); TMatrixD *matrix = new TMatrixD(5,5,fitter->GetCovarianceMatrix()); matrix->Print(); }

Gaussfunktion [2]*exp(-((x-[3])/(2*[4]))^2) (Parameternummerierung startet bei 2)

Polynom ersten Grades [0]+[1]*x Parameternummerierung startet bei 0)

Startwerte setzen

Fit durchführen

Page 36: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 36

Kovarianzmatrix

.

.

.

_histo->Draw(); TF1* fitFunc = new TF1("fitFunc","pol1(0)+gaus(2)",0,130); fitFunc->SetParameter(3,70); fitFunc->SetParameter(4,5); fitFunc->SetLineColor(kRed); _histo->Fit("fitFunc","", "", 55,83); cout<<" --------------------------------" <<endl; cout<<" chi2/dof: "<< fitFunc->GetChisquare()/fitFunc->GetNDF()<<endl;

TVirtualFitter *fitter = TVirtualFitter::GetFitter(); TMatrixD *matrix = new TMatrixD(5,5,fitter->GetCovarianceMatrix()); matrix->Print(); }

Gaussfunktion [2]*exp(-((x-[3])/(2*[4]))^2) (Parameternummerierung startet bei 2)

Polynom ersten Grades [0]+[1]*x Parameternummerierung startet bei 0)

Startwerte setzen

Fit durchführen

Page 37: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 37

2D-Histogrammevoid twodhistos(){ gROOT->Reset(); gStyle->SetPalette(1); TCanvas *c1 = new TCanvas("c1","Canvas fuer viele Histogramme",800,800); c1->Divide(2,2); TH2F *h2 = new TH2F("h2","Energie vs Impuls",40,-5.,5.,40,-5.,5.); h2->FillRandom("gaus",6000); h2->GetXaxis()->SetTitle("Energie E (GeV)"); h2->GetYaxis()->SetTitle("Impuls p (GeV)"); h2->GetZaxis()->SetTitle("Ereignisse"); TF2* f2=new TF2("func2","sin(x)*sin(y)/(x*y)",-10.,10.,-10.,10.); c1->cd(1); h2->GetXaxis()->SetTitleOffset(1.5); h2->GetYaxis()->SetTitleOffset(1.5); h2->GetZaxis()->SetTitleOffset(1.2); h2->Draw("LEGO2"); c1->cd(2); h2->Draw("COL"); c1->cd(3); f2->Draw("SURF1"); c1->cd(4); f2->Draw("COLZ");}

Page 38: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 38

2D-Histogramme

Page 39: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 39

void graph(){ gROOT->Reset(); gROOT->SetStyle("Plain");

const int n = 300;//const wird zur Array Initialisierung benoetigt double x[n]; double y[n];

ifstream in; //Input Stream in.open("peak.dat"); //Oeffnen der Datei Int_t nlines = 0;

while( !in.eof() && nlines < n ){ //Bis zum Ende der Datei if(in >> x[nlines] >> y[nlines]){ //Einlesen einer Zeile nlines++; cout << nlines << ": " << x[nlines] << " " << y[nlines] << endl; } }

cout << "found "<< nlines << " data points."<<endl; in.close();

TGraph *gr = new TGraph(n,x,y); gr->Draw("AL");//Option A zeichnet Achsen, L Linien}

Graphen

Für nicht-äquidistante Messpunkte

Page 40: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 40

void graph(){ gROOT->Reset(); gROOT->SetStyle("Plain");

const int n = 300;//const wird zur Array Initialisierung benoetigt double x[n]; double y[n];

ifstream in; //Input Stream in.open("peak.dat"); //Oeffnen der Datei Int_t nlines = 0;

while( !in.eof() && nlines < n ){ //Bis zum Ende der Datei if(in >> x[nlines] >> y[nlines]){ //Einlesen einer Zeile nlines++; cout << nlines << ": " << x[nlines] << " " << y[nlines] << endl; } }

cout << "found "<< nlines << " data points."<<endl; in.close();

TGraph *gr = new TGraph(n,x,y); gr->Draw("AL");//Option A zeichnet Achsen, L Linien}

Graphen

Für nicht-äquidistante Messpunkte

Page 41: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 41

Graphen mit Fehlernvoid grapherrors(){ gROOT->Reset(); gROOT->SetStyle("Plain");

const int n = 10;//const is need in array initialization double x[n] = {-0.22, 0.05, 0.25, 0.35, 0.5, 0.61,0.7,0.85,0.89,0.95}; double y[n] = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1}; double ex[n] = {.05,.1,.07,.07,.04,.05,.06,.07,.08,.05}; double ey[n] = {.8,.7,.6,.5,.4,.4,.5,.6,.7,.8}; TGraphErrors *gr = new TGraphErrors(n,x,y,ex,ey); gr->Draw("ALP");}

Page 42: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 42

Zusammenfassung● Root zu benutzen ist eigentlich gar

nicht so schwer

● Die Online-Hilfe ist empfehlenswert

unverzichtbar

● “Google ist dein Freund”

● Ansonsten eure Betreuer fragen.

http://root.cern.ch

ROOT is user friendly (but it picks its friends carefully)

Page 43: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 43

Zum weiterlesen

Diese Einführung mit allen Code-Beispielen ist zu finden unter:

wwwhep.physik.uni-freiburg.de/fp/root2012-2/

Falls es Probleme mit den Beispielen gibt -> Kurze

Rückmeldung an mich.

Page 44: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 44

Backup

Page 45: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 45

Root Dateien

Histogramm speichern

Histogramm laden

void readHisto(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TFile* _file=new TFile("histo.root","OPEN"); TH1F* _myH1 = (TH1F*)_file->Get("myHisto"); _myH1->Draw();}

void writeHisto(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TFile* _file=new TFile("histo.root","RECREATE"); TH1F* myHist = new TH1F("myHisto","Distribution",10,0.,1.); myHist->Fill(0.37); myHist->Fill(0.35); myHist->Fill(0.78); myHist->Fill(0.51); myHist->Write(); _file->Close();}

TBrowser b

Oder interaktiv

Histogramm laden

new TBrowser

Page 46: ROOT Einführung - hacol13.physik.uni-freiburg.dehacol13.physik.uni-freiburg.de/fp/root2013-1/FP_Root_Felix.pdf · 25.02.2013 Felix Bührer - ROOT Einführung 2 Was ist ROOT? ROOT

Felix Bührer - ROOT Einführung25.02.2013 46

PyROOT

import ROOThist = ROOT.TH1F("hist", "hist", 20, -5, 5)hist.FillRandom("gaus",10000)hist.Draw()raw_input("Press Enter to Exit")

● Wer sich in Python sicherer fühlt als mit C++: Alle

ROOT-Klassen existieren als Python-Modul

● Um Python mit ROOT benutzen zu können: ROOT-Modul in

$PYTHONPATH eintragen