ROOT Einführung Julian Glatzer freiburg.de Fortgeschrittenenpraktikum 2010 https://wwwhep.physik.uni-freiburg.de/~fp/root2010-

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.
Aufnahmen n An dem ersten CSL-Gerät ist keine Aufnahme möglich Sitzung 2.
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
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Das Java-Hamstermodell
Excel Kurs Teil I Excel starten, Verknüpfungen auf dem Desktop anlegen. F. Bäumer.
Batch-Programmierung Grundlagen
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:
Programmieren mit MS Small Basic
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.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Power-Point Präsentation
21 Datenimport und -export, OLEInhaltsverzeichnis 21. Datenimport und -export, OLE-Funktion 21.1 Importieren (Einlesen) von Fremdtexten 21.2 Exportieren.
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
Aus der Sicht eines Redakteurs Pflege von Textinhalten Pflege von Bilder – Bildverarbeitung Formulare Seiten anlegen / löschen -> Vorführung.
Unterprogramme in JAVA
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Anmeldung via Mit Mausklick Sprache wechseln Verfügbare Funktionen Maskenbeschrieb aufrufen - geschloss. Menü (640x480) + geöffnetes Menü (800x600)
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)
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.
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
05-Betriebssysteme1 Was ist ein Betriebssystem? l Programm, das die Verbindung zwischen dem Benutzer, der Software und der Hardware herstellt l Die Installation.
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 Stefan Winkelmann freiburg.de)
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.
Programmieren in C Wie speichert C
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Mobile Learning Engineering (MLE)
IOStreamLibrary.
Einführung in die Programmierung
«Delegierter» Methoden Schablone Funktionszeiger
Eigene Powerpoint Layouts
Implementieren von Klassen
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

ROOT Einführung Julian Glatzer freiburg.de Fortgeschrittenenpraktikum /

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. ● Aber keine Angst: Es ist nicht notwendig C++ im Detail zu können. Kenntnisse schaden aber nicht. ● Wobei kann mir ROOT helfen? – Histogramme, Fitten, u.v.m.

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

9/21/2016Julian Glatzer - ROOT Einführung4 Installation ● Im CIP-Pool bereits vorinstalliert ● 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/jglatzer/root ● export PATH=$ROOTSYS/bin:$PATH ● export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH – 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ührung5 Erste Schritte ● Starten durch Eingabe von root / Klick auf Desktop Icon Root ● Root hat einen eingebauten C++ Interpreter ● Mit den Tasten ↑ ↓ erreicht man die zuletzt benutzten Befehle ● Beenden mit.q

9/21/2016Julian Glatzer - ROOT Einführung6 Makros ● Makros automatisieren wiederkehrende Arbeiten ● Werden in Textdateien geschrieben (z.B. beispiel.C) und mit.x beispiel.C ausgeführt ● Der Dateiname hallo.C muss dem Namen der Funktion void hallo() entsprechen. void beispiel(){ gROOT->Reset(); cout << "Beispiel 1: "<<endl; cout << "Wurzel aus 2 = " << sqrt(2.) << endl; }

9/21/2016Julian Glatzer - ROOT Einführung7 Sehr kurze C++ Einführung void vartypen(){ int ganz=1; double fliesskomma=2.5; TString text="Hello world!"; cout << text << endl; //Rechnen ist moeglich 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ührung8 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = 7

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

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

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

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

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 = = = = = = = = = = 4

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

9/21/2016Julian Glatzer - ROOT Einführung16 Histogramme dienen der Visualisierung von Wahrscheinlichkeitsverteilungen = = = = = = = = = = 4 1/6 5/36 1/9 1/12 1/1 8 1/3 6

9/21/2016Julian Glatzer - ROOT Einführung17 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 Tite l Anzahl Bins X Achse von bis

9/21/2016Julian Glatzer - ROOT Einführung18 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ü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 Rechtsklickmenüs Viele Funktionen sind auch per Rechtsklick auf das passende Objekt erreichbar.

9/21/2016Julian Glatzer - ROOT Einführung21 Optionen ● Für Linien myHist->SetLineStyle(x); Hist->SetLineColor(x); Hist->SetLineWidth(x); ● Für Marker myHist->SetMarkerStyle(x); Hist->SetMarkerColor(x); Hist->SetMarkerSize(x); ● Für Flächen myHist->SetFillStyle(x); Hist->SetFillColor(x); ● Für Achsen myHist->GetXaxis()->SetTitle(“#phi_{2}^{2}”); myHist->GetYaxis()->SetRangeUser(-1.,1.); ● Für den Titel myHist->SetTitle(“Titel”); Latex mit # statt \

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

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

9/21/2016Julian Glatzer - ROOT Einführung24 Root Dateien Histogramm speichern Histogramm laden void readHisto(){ gROOT->Reset(); gROOT->SetStyle("Plain"); TFile* _file=new TFile("histo.root","READ"); 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 br ode r Histogramm laden

9/21/2016Julian Glatzer - ROOT Einführung25 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ührung26 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ü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 Graphen ● Histogramme sind nicht geeignet für nicht- äquidistante Messpunkte 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ührung29 Graphen ● Histogramme sind nicht geeignet für nicht- äquidistante Messpunkte 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"); }

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"); //Oeffnen der Datei Float_t xi; Float_t yi; Int_t nlines = 0; TH1F* _histo = new TH1F("_histo","Peaks", 350, 0., 350 ); while( !in.eof() ){ 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)+gauss(2)=[0]+[1]*x+ [2]*exp(-((x-[3])/(2*[4]))^2) func->SetParameter(Index,Wert); func->SetParLimits(Index, von, bis); gStyle->SetOptFit(1111);

9/21/2016Julian Glatzer - ROOT Einführung35 Ein komplizierterer Fit ● Funktion ● In Root ● Parameter... – Startwert: – Bereich: – Anzeige aller Parameter pol1(0)+gauss(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ührung36 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); in.close(); gStyle->SetOptFit(); _histo->Rebin(5); _histo->Fit("fitFunc"); _histo->Draw("E"); }

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

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

9/21/2016Julian Glatzer - ROOT Einführung40 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ührung41 2D-Histogramme

9/21/2016Julian Glatzer - ROOT Einführung42 Zusammenfassung ● Root zu benutzen ist eigentlich gar nicht so schwer ● Die Online-Hilfe ist empfehlenswert. ● Ansonsten fragt die Betreuer oder mich. Danke.