ROOT Einführung Julian Glatzer freiburg.de) Fortgeschrittenenpraktikum Stefan Winkelmann freiburg.de)

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Ein- und Ausgabe von Dateien
Mit dem Computer kann man ganz toll präsentieren
Matlab Einführung Tobias Wunner 16. Oktober 2006.
Imperative Programmierung -Entwicklungswerkzeuge
Tomcat Web-Server installieren
Anne Wolkenhauer-Ratzke - Powerpoint
Java2D Richard Göbel.
GRASS - Anwendungsbeispiel
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Dynamische Webseiten mit PHP
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Das Java-Hamstermodell
Excel Kurs Teil I Excel starten, Verknüpfungen auf dem Desktop anlegen. F. Bäumer.
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
Einführung MySQL mit PHP
Einleitung Suse Linux (System- und Software-Entwicklung) Allgemein:
Installation FAQ-Forum Zope Basisinstallation Zusätzliche Module (Products) Grundkonfiguration Einrichten neuer Foren.
Java programmieren mit JavaKara
Installationsdiskette booten Startdiskette und CD-1 einlegen und den Rechner starten Auswahl: Deutsch Auswahl: Farbbildschirm Auswahl: Deutsch Auswahl:
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Kostenlose Alternative zu Microsoft Office
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Power-Point Präsentation
Graphics in PDF Universität zu Köln Intelligente Dateisysteme Prof. Dr. Manfred Thaller WS 2013/14 Leonard Bornefeld-Ettmann.
LabView Erste Schritte.
HORIZONT 1 XINFO ® Das IT - Informationssystem Assembler HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
Dynamische Datentypen
Objektorientiertes Konstruieren
Aus der Sicht eines Redakteurs Pflege von Textinhalten Pflege von Bilder – Bildverarbeitung Formulare Seiten anlegen / löschen -> Vorführung.
Software Struktur und Beispiele
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.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
orgAnice Pi Schulung /13 Einführung in orgAnice Pi2.
2 Datenabstraktion Geheimnisprinzip:
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
Technische Universität München, Informatik XI Angewandte Informatik / Kooperative Systeme Praktikum Mobile Web 2.0 – 2.Teil Wolfgang Wörndl, Robert Eigner.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Ein-/ Ausgabe in Java ein Überblick. © eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println()
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 Fortgeschrittenenpraktikum Martin Flechl
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
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
IOStreamLibrary.
Das IT - Informationssystem
Programmieren in C Wie speichert C
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Magische Wand Ein Spiel zum Thema: Betriebssysteme.
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Mobile Learning Engineering (MLE)
IOStreamLibrary.
Meine erste eigene Homepage mit Blogger
Einführung in die Programmierung
XINFO HORIZONT Überblick zu XINFO Software for Datacenters
Installation von AstroImageJ
«Delegierter» Methoden Schablone Funktionszeiger
Implementieren von Klassen
 Präsentation transkript:

ROOT Einführung Julian Glatzer freiburg.de) Fortgeschrittenenpraktikum Stefan Winkelmann freiburg.de)

9/21/2016Julian Glatzer - ROOT Einführung2 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

9/21/2016Julian Glatzer - ROOT Einführung3 ● – User's Guide in “Buchform” (PDFs) – Reference Guide Erklärung aller Klassen – HowTo's ● Google Suche – TH1F site:root.cern.ch ● Bei uns: GMH , Tel: 7691, ● Alle Beispiele sind auf der FP Webseite Hilfe

9/21/2016Julian Glatzer - ROOT Einführung4 Dokumentation n

9/21/2016Julian Glatzer - ROOT Einführung5 Installation ● Im CIP-Pool installiert ● Download – Linux: tar.gz unter Linux SLC5 downloaden (Ubuntu: Repository) ● tar xvfz root_v Linux-slc5-gcc4.3.tar.gz ● export ROOTSYS= z.B. /home/ /root ● export PATH=$ROOTSYS/bin:$PATH ● export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH – Mac: MacOS X >= 10.4 – Windows: WindowsXP/NT/w2000 with VC (runs with VC++6 and VC++8.0), version 5.22/00 ● Windows Installer, eventuell ftp://root.cern.ch/root/msvcp71.dll, msvcr71.dll nach C:\root\bin downloaden (VISTA, XP) ● Mit Icon auf Desktop starten oder MSDOS Eingabeaufforderung “root”

9/21/2016Julian Glatzer - ROOT Einführung6 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) ● Alternativ: PyROOT Python Modul

9/21/2016Julian Glatzer - ROOT Einführung7 ● 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

9/21/2016Julian Glatzer - ROOT Einführung8 Sehr kurze C++ Einführung 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: Kommandozeile endl: end line Komplexere Objekte: Typ* name=new Typ(Parameter) Aufruf von Objektfunktion mit - >

9/21/2016Julian Glatzer - ROOT Einführung9 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = 7

9/21/2016Julian Glatzer - ROOT Einführung10 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = 8

9/21/2016Julian Glatzer - ROOT Einführung11 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = 5

9/21/2016Julian Glatzer - ROOT Einführung12 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = 11

9/21/2016Julian Glatzer - ROOT Einführung13 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = 9

9/21/2016Julian Glatzer - ROOT Einführung14 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = 9

9/21/2016Julian Glatzer - ROOT Einführung15 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = 7...

9/21/2016Julian Glatzer - ROOT Einführung16 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = 7...

9/21/2016Julian Glatzer - ROOT Einführung17 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = /6 5/36 1/9 1/1 2 1/18 1/36

9/21/2016Julian Glatzer - ROOT Einführung18 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

9/21/2016Julian Glatzer - ROOT Einführung19 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

9/21/2016Julian Glatzer - ROOT Einführung20 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

9/21/2016Julian Glatzer - ROOT Einführung21 Rechtsklickmenüs Viele Funktionen sind auch per Rechtsklick auf das passende Objekt erreichbar.

9/21/2016Julian Glatzer - ROOT Einführung22 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 \

9/21/2016Julian Glatzer - ROOT Einführung23 Farben, Linien, Marker,...

9/21/2016Julian Glatzer - ROOT Einführung24 Farben, Linien, Marker,

9/21/2016Julian Glatzer - ROOT Einführung25 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

9/21/2016Julian Glatzer - ROOT Einführung26 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"); }

9/21/2016Julian Glatzer - ROOT Einführung27 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 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 : etc. z.B. Spannung in 0.1s Schritten

9/21/2016Julian Glatzer - ROOT Einführung28 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 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 : etc. z.B. Spannung in 0.1s Schritten

9/21/2016Julian Glatzer - ROOT Einführung29 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

9/21/2016Julian Glatzer - ROOT Einführung30 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"); }

9/21/2016Julian Glatzer - ROOT Einführung31 1D-Fits void fit(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TH1F* myH1 = new TH1F("myHisto","gaussian distribution",100,-5.,5.); TF1* myGaus = new TF1("myGaus","gaus",-5,5); //Fitbereich [-5,5] // Gauss “gaus” 3 Fitparameter: Konstante, mu, sigma // Polynom “pol0”, ”pol1”, “pol2”,... // Eigene Funktionen: z.B. “[0]*sin([1]*x)” myH1->FillRandom("gaus",6000);//Histogramm zufaellig nach Gauss myH1->SetMarkerColor(2); myH1->SetMarkerStyle(20); myH1->Fit("myGaus"); myH1->Draw("E"); cout<<" " <<endl; cout GetChisquare()/myGaus->GetNDF()<<endl; cout GetParameter(1) GetParError(1)<<endl; cout GetParameter(2) GetParError(2)<<endl; }

9/21/2016Julian Glatzer - ROOT Einführung32 Ausgabe des 1D-Fits root [17].x fit.C FCN= FROM MIGRAD STATUS=CONVERGED 62 CALLS 63 TOTAL EDM= e-09 STRATEGY= 1 ERROR MATRIX ACCURATE EXT PARAMETER STEP FIRST NO. NAME VALUE ERROR SIZE DERIVATIVE 1 Constant e e e e-06 2 Mean e e e e-03 3 Sigma e e e e-03 : created default TCanvas with name c chi2/dof: mean: / sigma: / root [18]

9/21/2016Julian Glatzer - ROOT Einführung33 Ein komplizierterer Fit void fit2_nurhist(){ gROOT->Reset(); gROOT->SetStyle("Plain"); ifstream in; //Input Stream in.open("peak.dat"); //Öffnen der Datei Float_t xi; Float_t yi; Int_t nlines = 0; TH1F* _histo = new TH1F("_histo","Peaks", 350, 0., 350 ); while( !in.eof() ){ //Einlesen if(in >> xi >> yi){ _histo->SetBinContent( xi, yi ); nlines++; cout << nlines << ": " << xi << " " << yi << endl; } cout << nlines << " data points."<<endl; in.close(); gStyle->SetOptFit(); _histo->Rebin(5); _histo->Draw("E"); }

9/21/2016Julian Glatzer - ROOT Einführung34 Ein komplizierterer Fit ● Funktion ● In Root ● Parameter... – Startwert: – Bereich: – Anzeige aller Parameter pol1(0)+gaus(2)=[0]+[1]*x+ [2]*exp(-((x-[3])/(2*[4]))^2) func->SetParameter(Index,Wert); func->SetParLimits(Index, von, bis); gStyle->SetOptFit(1111); Format pcev (Standard 111 und 11 statt 0011) p = 1; Probability c = 1; Chisquare/Number of DOF e = 1; errors (if e=1, v must be 1) v = 1; name/values of parameters

9/21/2016Julian Glatzer - ROOT Einführung35 Ein komplizierterer Fit void fit2(){ [... Initialisierung...] TH1F* _histo = new TH1F("_histo","Peaks", 350, 0., 350 ); [... Daten einlesen...] TF1* fitFunc = new TF1("fitFunc","pol1(0)+gaus(2)",0,300); //Polynom ersten Grades [0]+[1]*x //(Parameternummerierung startet bei 0) //multipliziert mit Gaussfunktion [2]*exp(-((x-[3])/(2*[4]))^2) //(Parameternummerierung startet bei 2) fitFunc->SetParameter(3,175); fitFunc->SetParameter(4,20); gStyle->SetOptFit(); _histo->Rebin(5); _histo->Fit("fitFunc"); _histo->Draw("E"); }

9/21/2016Julian Glatzer - ROOT Einführung36 Ein komplizierterer Fit

9/21/2016Julian Glatzer - ROOT Einführung37 Kovarianzmatrix void linRegression(){ gROOT->Reset(); gROOT->SetStyle("Plain"); gStyle->SetOptFit(); TH1F* myH1 = new TH1F("myHisto","lin. regression",10,0.,10.); TF1* myPol1 = new TF1("myPol1","2*x",0.,10.); myH1->FillRandom("myPol1",100); myH1->SetMarkerColor(2); myH1->SetMarkerStyle(20); myH1->Fit("pol1"); myH1->Draw("E"); TVirtualFitter *fitter = TVirtualFitter::GetFitter(); TMatrixD *matrix = new TMatrixD(2,2,fitter->GetCovarianceMatrix()); matrix->Print(); }

9/21/2016Julian Glatzer - ROOT Einführung38 Kovarianzmatrix

9/21/2016Julian Glatzer - ROOT Einführung39 2D-Histogramme 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); 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"); }

9/21/2016Julian Glatzer - ROOT Einführung40 2D-Histogramme

9/21/2016Julian Glatzer - ROOT Einführung41 Zusammenfassung ● Root zu benutzen ist eigentlich gar nicht so schwer ● Die Online-Hilfe ist empfehlenswert unverzichtbar ● “Google ist dein Freund” ● Ansonsten eure Betreuer fragen. h ROOT is user friendly (but it picks its friends carefully)