ROOT-Einführung Julian Glatzer Fortgeschrittenenpraktikum Martin Flechl

Slides:



Advertisements
Ähnliche Präsentationen
Ein- und Ausgabe von Dateien
Advertisements

Mit dem Computer kann man ganz toll präsentieren
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Excel Kurs Teil I Excel starten, Verknüpfungen auf dem Desktop anlegen. F. Bäumer.
Eine Homepage für die Fachberatung Thomas Scholz.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Wismar Business School
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
FH-Hof HTML - Einführung Richard Göbel. FH-Hof Komponenten des World Wide Webs WWW Browser HyperText Transfer Protocol (HTTP) via Internet WWW Server.
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
EXCEL PROFESSIONAL KURS
Patrick Schmerlaib. Scriptsprachen: sind Programmiersprachen Verzichten auf Sprachelemente Vorteile: schnelle Erstellung kleiner Programme Flexible Sprache.
Power-Point Präsentation
HORIZONT 1 XINFO ® Das IT - Informationssystem Assembler HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
Objektorientiertes Konstruieren
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Die Gestaltung einer Präsentation
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
Einführung in PowerPoint Zum Seminar „Video und Multimedia im Unterricht DaF“ (Theorie und Praxis der Lehr- und Lernmittel) bei Prof. Dr. E. Tschirner.
RSS-Feed: Unser neuer Nachrichtendienst im Netz Dr. Ilona Rohde
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Einführung. Ziel der Veranstaltung  Vermittlung von Grundkenntnissen in C++  Solide Basis für anschließende Weiterentwicklung  Fähigkeit, kleine Programme.
Titel Diskursmodelle Name SoSe Folienformat Packen Sie die Folien nicht zu voll Das Datum können Sie ändern, indem Sie im Menü auf “Ansicht”
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Bereit, wenn Sie es sind Gute Neuigkeiten. Noch während die Installation im Hintergrund fortgesetzt wird, können Sie Office 2010 bereits verwenden. Sehen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
ROOT Tutorial für D. Liko. Was ist ROOT ? ● Am CERN entwickeltes Tool zur Analyse von Daten ● Funktionalität in vielen Bereichen ● Objekte.
ROOT Einführung Julian Glatzer freiburg.de) Fortgeschrittenenpraktikum Stefan Winkelmann freiburg.de)
ROOT Einführung Julian Glatzer freiburg.de Fortgeschrittenenpraktikum
ROOT Einführung Julian Glatzer freiburg.de) Fortgeschrittenenpraktikum 09/10 Stefan Winkelmann
ROOT Einführung im Rahmen des FP Julian Glatzer freiburg.de.
Mit dem Computer kann man ganz toll präsentieren
Präsentation mit dem Computer
Einführung in PowerPoint
Diagramme erstellen mit MS Excel
Anforderungen an die neue Datenstruktur
Verwendung des Datenloggers Dostmann LOG 32 TH
Herzlich willkommen im MathePortal von mathepower.de
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Häufigkeitswörter nach dem ABC ohne Verben und Nomen
Hinweis zu dieser Vorlage:
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Hinweis zu dieser Vorlage:
BOOK OF RA UND ANDEREN AGYPTISCHEN SLOT GAMES
Herzlich Willkommen Präsentation für das Angebot «einfache Verlinkung»
Hinweise zur Verwendung der PowerPoint Vorlage
Anleitung für Lehrer*innen – Verwendung des Materials
“<Titel>” Prozessbeschreibung
Hinweis zu dieser Vorlage:
Die PowerPoint-Arbeitsfläche
Übung: Star Wars - Erbaue eine Galaxie mit Hilfe von Code
“Sicherheitstechnische Kontrollen anlegen
Templates
Einführung in die Programmierung
«Delegierter» Methoden Schablone Funktionszeiger
9. Vererbung und Polymorphie
CompuTreff: Wallisellen
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
DB2 – SS 2019 von Baum allgemein bis B*-Baum
Einführung in die Programmierung
DB2 – SS 2019 von Baum allgemein bis B*-Baum
Auf einen Blick – die 24 wichtigsten Word Shortcuts
Schmock Mutter nicht ausreichend versorgt  fast verhungert Mutter bei Geburt verstorben Schmock mit Flasche aufgezogen.
 Präsentation transkript:

ROOT-Einführung Julian Glatzer Fortgeschrittenenpraktikum Martin Flechl Felix Bührer

Martin Flechl - ROOT-Einführung Zweck dieser Einführung ● ROOT ist ein Werkzeug, das ihr im FP häufig verwenden werdet ● Diese Einführung soll euch zeigen, – wie ihr ROOT überhaupt laufen können läßt, – was man damit machen kann, – und beinhaltet viele nützliche Beispiele ● Diese Folien sind im Netz (Link auf FP-Homepage): wwwhep.physik.uni-freiburg.de/fp/root2013-1/ damit sie im FP zum Nachschlagen verwendet werden können wwwhep.physik.uni-freiburg.de/fp/root2013-1/

Martin Flechl - ROOT-Einführung 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

Martin Flechl - ROOT-Einführung Warum ROOT? ● Mit ROOT: ● - es ist sehr einfach, häufig benutzte Schritte zu wiederholen - sehr mächtige Funktionen zur statistischen Auswertung, zum Fitten und zur Visualisierung von Ergebnissen - ideales Werkzeug für viele FP-Problemstellungen

Martin Flechl - ROOT-Einführung ● – User's Guide in “Buchform” (PDFs) – Reference Guide Erklärung aller Klassen – HowTo's ● Google Suche – TH1F site:root.cern.ch ● Bei uns: Westbau / GMH, Hilfe

Martin Flechl - ROOT-Einführung 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 roothttp://root.cern.ch/drupal/content/downloading- root ●...oder Source-Code selber kompilieren

Martin Flechl - ROOT-Einführung Erste Schritte ● Es gibt mehrere Möglichkeiten ROOT zu benutzen: - über eine interaktive Shell (CINT) - via Makros welche von ROOT ausgeführt werden können - durch Einbinden von ROOT-Klassen in kompilierfähigen C++-Code - über ein ROOT-Modul für Python

Martin Flechl - ROOT-Einführung Erste Schritte: Interaktiv ● Starten durch Eingabe von root (bzw. root.exe) im Terminal oder Klick auf Desktop-Icon ● Root hat einen eingebauten C++ Interpreter (CINT) ● Mit den Tasten ↑ ↓ erreicht man die zuletzt benutzten Befehle ● Beenden mit.q ● Nützlich zum Testen oder für schnelle einfache Rechnungen

Martin Flechl - ROOT-Einführung ● 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(){ cout << "Beispiel 1: "<<endl; cout << "Wurzel aus 2 = " << sqrt(2.) << endl; } Erste Schritte: Makros

Martin Flechl - ROOT-Einführung C++: Funktionen void 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( parameter) Aufruf: name() bzw. name(1) Variablendefinition: Typ name=wert Ausgabe: cout: Ausgabezeile endl: end line Komplexere Objekte: Typ* name=new Typ(Parameter) Aufruf von Objektfunktion mit ->

Martin Flechl - ROOT-Einführung 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

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = 7

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = 8

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = 5

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = 11

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = 9

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = 9

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = 7...

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = 7...

Martin Flechl - ROOT-Einführung Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = /6 5/36 1/9 1/12 1/18 1/36

Martin Flechl - ROOT-Einführung Histogramme ● Deklaration (“Objekt erstellen”) ● Werte einfüllen (z.B. x...Würfelergebnis) ● 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”,12,0.,12.); myHist->Fill(x); myHist->Draw(“Option”); Name des ObjektsRoot-interner Name Titel Anzahl Bins X Achse von bis

Martin Flechl - ROOT-Einführung 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

Martin Flechl - ROOT-Einführung 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

Martin Flechl - ROOT-Einführung Optionen ● Für Linien Hist->SetLineStyle(x); Hist->SetLineColor(x); Hist->SetLineWidth(x); ● Für Marker (Symbole für Datenpunkte) 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.); gPad->SetLogy(); ● Für den Titel Hist->SetTitle(“Titel”); Latex mit # statt \

Martin Flechl - ROOT-Einführung Farben, Linien, Marker,...

Martin Flechl - ROOT-Einführung Farben, Linien, Marker,

Martin Flechl - ROOT-Einführung Rechtsklickmenüs Viele Funktionen sind auch per Rechtsklick auf das passende Objekt erreichbar.

Martin Flechl - ROOT-Einführung 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 (“Fit”) durchzuführen ● 1. Einlesen der Daten ● 2. Füllen der Messwerte in geeignete Datenstruktur ● 3. Anpassung einer Funktion an die Daten peaks.dat: etc.

Martin Flechl - ROOT-Einführung Einlesen von Daten void readFile(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peaks.dat"); //Oeffnen der Datei Float_t xi; Int_t iline = 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 iline++; cout << iline << ": " << xi <<endl; } cout<<"found "<<iline<<" data points"<<endl; in.close(); _histo->Draw(); } peaks.dat: etc.

Martin Flechl - ROOT-Einführung Füllen in ein Histogramm void readFile(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peaks.dat"); //Oeffnen der Datei Float_t xi; Int_t iline = 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( iline, xi ); //Setzen des Bin Inhalts iline++; cout << iline << ": " << xi <<endl; } cout<<"found "<<iline<<" data points"<<endl; in.close(); _histo->Draw(); } peaks.dat: etc.

Martin Flechl - ROOT-Einführung Füllen in ein Histogramm void readFile(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peaks.dat"); //Oeffnen der Datei Float_t xi; Int_t iline = 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( iline, xi ); //Setzen des Bin Inhalts iline++; cout << iline << ": " << xi <<endl; } cout<<"found "<<iline<<" data points"<<endl; in.close(); _histo->Draw(); } peaks.dat: etc.

Martin Flechl - ROOT-Einführung D-Fit

Martin Flechl - ROOT-Einführung Einschub: Funktionen ROOT kann ● exp(x), sin(x), log(x), sqrt(x) ● gaus (mit 1 s!), Landau,... ● TMath Funktionen ● 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"); }

Martin Flechl - ROOT-Einführung D-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 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 im Bereich x=55-83

Martin Flechl - ROOT-Einführung D-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 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

Martin Flechl - ROOT-Einführung 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 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

Martin Flechl - ROOT-Einführung 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 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

Martin Flechl - ROOT-Einführung D-Histos/-Funktionen void 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); //sonst: h2->Fill(2.3,4.4); 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"); }

Martin Flechl - ROOT-Einführung D-Histogramme

Martin Flechl - ROOT-Einführung void graph(){ gROOT->Reset(); gROOT->SetStyle("Plain"); const int n = 300; //Anzahl der Datenpunkte //const wird zur Array-Initialisierung benoetigt double x[n]={0}; double y[n]={0}; //Vektoren mit (x/y)-Werten ifstream in; //Input Stream in.open("peak.dat"); //Oeffnen der Datei Int_t iline = 0; while( !in.eof() && iline < n ){ //Bis zum Ende der Datei if(in >> x[iline] >> y[iline]){ //Einlesen einer Zeile iline++; cout << iline << ": " << x[iline] << " " << y[iline] << endl; } cout << "found "<< iline << " data points."<<endl; in.close(); TGraph *gr = new TGraph(n,x,y); gr->Draw("AL");//Option A zeichnet Achsen, L Linien } Graphen 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 } Menge von (x/y)-Werten [(x/y/z) für 2D] (auch) für nicht-äquidistante Messpunkte peak.dat: etc.

Martin Flechl - ROOT-Einführung 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 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 } Für nicht-äquidistante Messpunkte

Martin Flechl - ROOT-Einführung Graphen mit Fehlern void 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"); } void 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"); } x, y:Koordinaten des Messpunkts ex, ey:Fehlerbalkengröße in x/y-Richtung [TGraphAsymmErrors: unabhängige Fehlergröße in +/- –Richtung]

Martin Flechl - ROOT-Einführung Zusammenfassung ● Root zu benutzen ist eigentlich gar nicht so schwer ● Die Online-Hilfe ist empfehlenswert unverzichtbar ● Ansonsten eure Betreuer fragen.

Martin Flechl - ROOT-Einführung Zum Weiterlesen Diese Einführung mit allen Code-Beispielen ist zu finden unter: wwwhep.physik.uni-freiburg.de/fp/root2013-1/ Viele zusätzliche Code-Beispiele gibt es hier: wwwhep.physik.uni-freiburg.de/fp/root2013-1/

Martin Flechl - ROOT-Einführung Backup

Martin Flechl - ROOT-Einführung 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

Martin Flechl - ROOT-Einführung PyROOT void 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"); } import ROOT hist = 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