Folien
Folien
Folien
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Schaltungstechnik<br />
und Simulation<br />
gnuplot & ROOT<br />
Michael Ritzert<br />
michael.ritzert@ziti.uni-heidelberg.de<br />
Vorlesung „Tools“<br />
Heidelberg<br />
02.12.2011
gnuplot<br />
• Tool zum 2- und 3-dimensionalen Plotten von Daten:<br />
Funktionen und Datenfiles.<br />
• Einfache Fits von Funktionen<br />
• Viele Ausgabeformate:<br />
– Auf Bildschirm,<br />
– Postscript,<br />
– Bitmap (JPEG, PNG, GIF, ...),<br />
– EPS + LaTeX (sehr nützlich für Papers, etc.),<br />
– EMF (für Powerpoint-Präsentationen)<br />
– Noch VIEL mehr...<br />
• Hauptsächlich Steuerung über Kommandozeile.<br />
Details zu Befehlen immer mit help Befehl.<br />
Fast alle Befehle können viel mehr als hier gezeigt...<br />
• http://www.gnuplot.info<br />
Galerie: http://gnuplot.sourceforge.net/demo_4.5/<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
2
• gnuplot starten mit<br />
> gnuplot<br />
• Einfache 2D-Plots:<br />
> plot Funktion<br />
• „Übliche“ Funktionen sofort<br />
verfügbar. Potenz x y mit x**y.<br />
• Achsen skalieren:<br />
> set xrange [20:20]<br />
ebenso yrange, zrange, cbrange<br />
• Y-Achse skaliert per default<br />
automatisch, x-Achse nur bei<br />
Plots aus Daten-Files.<br />
• Mehrere Plots:<br />
ein plot-Befehl, Funktionen mit<br />
Komma getrennt.<br />
• Kurzformen fast aller Befehle.<br />
gnuplot : erste Plots<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
3
gnuplot : Datenfiles plotten<br />
• Üblich: Text-File als Input (binary möglich)<br />
• Kürzeste Form:<br />
plot 'Datei' (with lines title "Titel")<br />
• Beliebige Anzahl Spalten, mit Leerzeichen getrennt<br />
Adressierung über using.<br />
• Mehrere Datensätze pro Datei mit zwei Leerzeilen getrennt.<br />
Addressierung über index.<br />
• Kommentare mit # am Zeilenanfang.<br />
• DEMO<br />
– Datenfile plotten, verschiedene Spalten und Blöcke<br />
– Plot-Stile<br />
– 2. y-Achse<br />
• Besondere Dateinamen:<br />
– '': gleiche Datei wie zuvor<br />
– '': lies von Kommandozeile. Ende mit e.<br />
1 1 1<br />
2 4 8<br />
3 9 27<br />
4 16 64<br />
1 1<br />
2 1.41<br />
3 1.73<br />
4 2<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
4
• Angabe mit „with“ nach der<br />
zu plottenden Funktion.<br />
• Linien, Punkte, Flächen.<br />
lines, points,<br />
linespoints,<br />
filledcurve<br />
• Treppen, Histogramme,<br />
Fehlerbalken.<br />
steps, boxes,<br />
errorbars<br />
• Farben<br />
linecolor rgb 'name'<br />
(ohne with)<br />
• Eigene Stile (Kombinationen<br />
von Eigenschaften)<br />
definieren mit set style.<br />
gnuplot : Plotstile<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
5
gnuplot : Rechnen mit Werten aus Spalten<br />
• gnuplot kann nach Belieben mit Werten rechnen, auch aus<br />
mehreren Spalten.<br />
• Die Syntax ist using mit () um das Argument, das berechnet<br />
werden soll. Die Spalten werden mit $1, $2, ... angesprochen.<br />
• $0 ist ein Sonderfall: Nummer des aktuelles Punkts (ab 0).<br />
• plot 'Datei' using 3:($1+sqrt($2)) with lines<br />
• Funktionen können auch vorher definiert werden:<br />
squaredSum(a,b)=sqrt(a**2+b**2)<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
6
• Überschrift über dem Plot:<br />
set title "Text"<br />
gnuplot : Beschriftungen, Dekorationen<br />
• Achsenbeschriftung:<br />
set xlabel "Text". Ebenso für y, cb, etc.<br />
• Legende:<br />
set key on/off zum ein-/ausschalten<br />
set key bottom left oder set key at x,y<br />
• Striche an Achsen:<br />
(un)set xtics, etc. zum ein-/ausschalten<br />
• Textlabels im Plot:<br />
set label "Text" at x,y<br />
• Pfeile im Plot:<br />
set arrow from x1,y1 to x2,y2<br />
• Änderungen übernehmen (letzten plot-Befehl mit neuen<br />
Einstellungen ausführen):<br />
replot<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
7
gnuplot : Beispiele für Fits<br />
• fit Funktion 'Datensatz' via var1, var2, ...<br />
• Anfangswerte für Variablen: einfach vorher zuweisen<br />
var1=42<br />
• Nach dem Fit: Variablen entsprechen dem Fit-Ergebnis.<br />
• Bereich einschränken:<br />
fit [von:bis] ...<br />
• Gewichte können aus einer 3. Spalte gelesen werden.<br />
einfach using um 1 Spalte erweitern.<br />
• Probleme bei sehr großen oder kleinen Zahlen!<br />
(groß/klein: >~10 10 ,
• einfachster 3D-Plot:<br />
plot ... with image<br />
• x-y-Matrix in 2D, z-Werte<br />
farbcodiert.<br />
• Farbbalken als Legende für z-<br />
Werte. Angesprochen als<br />
colorbox (cb).<br />
• In Datenfiles:<br />
3 Spalten für x, y, z.<br />
Matrix muss vollständig und<br />
sortiert sein!<br />
• oder matrix<br />
gnuplot : Einfache 3D-Plots<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
9
• eigener Befehl für 3D-Plots:<br />
splot<br />
• für „bunte“ Plots:<br />
set pm3d<br />
• unabhängige Variablen:<br />
x und y<br />
• In Datenfiles:<br />
3 Spalten,<br />
x-Blöcke mit Leerzeilen<br />
getrennt<br />
• oder<br />
matrix<br />
gnuplot : echte 3D-Plots<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
10
gnuplot : parametrische Plots<br />
• parametrischer Plot: Keine Funktion von x, sondern x und y<br />
abhängig von einem weiteren Parameter.<br />
• In parametrischen Modus:<br />
set parametric<br />
⇒ t ist jetzt die unabhängige Variable.<br />
• plot-Befehl nimmt zwei Funktionen für x(t) und y(t), mit Komma<br />
getrennt:<br />
plot [0:2*pi] sin(t),cos(t)<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
11
gnuplot : weitere Tricks<br />
• Kurve sieht eckig aus? Anzahl Punkte erhöhen:<br />
set samples #<br />
• Kein Taschenrechner zur Hand? gnuplot hilft:<br />
gnuplot> print sqrt(24792) + 725 ** 0.274<br />
163.532362408873<br />
• Andere Spaltentrenner (z.B. CSV):<br />
set datafile separator ","<br />
• Formatierung der Achsenbeschriftungen:<br />
set format [x|y|...] "Formatstring"<br />
z.B. "%.1s %c" für Zahlen mit 1 Nachkommastelle und SI-<br />
Präfix.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
12
gnuplot : Ausgabe in Datei<br />
• Zuerst Ausgabeformat („Terminal“) festlegen. Hier: Postscript<br />
set term postscript enhanced color solid<br />
Jedes Terminal hat viele Optionen ⇒ help<br />
• Dann Ausgabedatei öffnen:<br />
set out "Datei.ps"<br />
• Plot ausgeben<br />
replot<br />
• Datei schließen(!)<br />
set out<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
13
gnuplot : Zusammenspiel mit LaTeX<br />
• epslatex Terminal: 2 Ausgabedateien:<br />
– Grafische Elemente als EPS,<br />
– Text als TeX.<br />
• In TeX wird die .tex-Datei eingebunden, die .eps-Datei wird dann<br />
automatisch geladen.<br />
• Für pdflatex: .eps mit epstopdf nach .pdf wandeln.<br />
• (Zur Zeit noch? ¹) Probleme mit der Breite von LaTeX-Text<br />
⇒ viel Handarbeit nötig: Breite der Legende, Position der<br />
Achsenbeschriftungen, etc.<br />
¹ http://sourceforge.net/tracker/index.php?<br />
func=detail&aid=3434978&group_id=2055&atid=352055<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
14
gnuplot : Batch<br />
• Üblicherweise werden gnuplot-Befehle aus Skript-Dateien<br />
ausgeführt.<br />
– Analysen müssen oft wiederholt mit verschiedenen Daten<br />
durchgeführt werden. Die benötigten Einstellungen und Funktionen<br />
werden dann nur 1x geschrieben und wiederverwendet.<br />
• Dazu werden einfach die Befehle untereinander in eine Textdatei<br />
geschrieben.<br />
• Zum Ausführen:<br />
– gnuplot auf der Kommandozeile den Namen der Datei übergeben.<br />
Springt sofort zurück auf die Kommandozeile nach Beendigung,<br />
außer gnuplot wird mit -persist aufgerufen.<br />
– gnuplot starten und load “Datei.gnuplot“ eingeben.<br />
Liest die Datei in der aktuellen Sitzung ein.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
15
ROOT<br />
• DAS Allround-Tool der Teilchenphysiker<br />
• Plotting, Datenspeicherung, Datenanalyse (Histogramme).<br />
• Interface über C++-Interpreter(!)<br />
– Auf der Kommandozeile: Relativ laxe Syntax.<br />
– ROOT-Skripte lassen sich auch compilieren.<br />
• Hier wird nur ein WINZIGER Teil des Funktionsumfangs<br />
vorgestellt.<br />
• http://root.cern.ch/<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
16
• ROOT starten mit<br />
> root<br />
ROOT : erste Plots<br />
• im Pool: /opt/root5.28/bin/root<br />
• Funktion definieren:<br />
> f = new TF1( "f", "sin(x)<br />
* x", 10., 10. );<br />
Argumente:<br />
Name der Funktion<br />
Funktion<br />
min x, max x<br />
Beachte: kein Typ für f angegeben.<br />
• Funktion sich zeichnen lassen:<br />
> f>Draw();<br />
• Mehrere Plots: Mehrere Funktionen<br />
definieren, jede Funktion mit<br />
Draw() zeichnen. Zweite und<br />
weitere Funktionen mit Option<br />
"SAME".<br />
Farben manuell setzen über<br />
f>setLineColor( kGreen );<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
17
ROOT : Plots<br />
• Plots sind nicht unbedingt einfach, aber der Funktionsumfang ist<br />
riesig.<br />
– Ableitungen, Integrale (numerisch)<br />
– Fits!<br />
• Plots (und andere Objekte im Canvas) können angeklickt<br />
werden.<br />
– Zeichenstil ändern<br />
– Fits mit GUI ausführen<br />
• Wichtige Funktion: Beenden von ROOT:<br />
.q oder exit();<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
18
ROOT : Plots aus Datei<br />
• Dateiformat: Zeilenweise Datensätze, mehrere Spalten<br />
• Option1: Mit TGraph (per Default nur 2 Spalten):<br />
g = new TGraph( "file.dat" );<br />
g>Draw( "ALP" );<br />
Optionen: http://root.cern.ch/root/html/TGraphPainter.html<br />
• Option2: mit TTree:<br />
– Zuerst in einen TTree einlesen (Spaltennamen sp1, sp2, sp3)<br />
t = new TTree();<br />
t>ReadFile( "file.dat", "sp1:sp2:sp3" );<br />
(beliebige, sinnvolle(!) Namen für Spalten)<br />
– Dann die interessanten Spalten zeichnen. Format: y:x.<br />
t>Draw( "sp2:sp1", "", "line" );<br />
Rechnen in der Spaltenliste ist möglich.<br />
(2. Argument wird später erklärt)<br />
Optionen: http://root.cern.ch/root/html/THistPainter.html (viele...)<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
19
ROOT : Histogramme<br />
• Übliche Anwendung von ROOT:<br />
Messdaten werden in .root-Dateien gespeichert und (meist<br />
offline) ausgewertet.<br />
• .root-Datei: Kann alle ROOT-Objekte beinhalten. Funktionen,<br />
Histogramme, ..., und Trees.<br />
• TTree: Liste von Einträgen gleichen (beliebig komplexen) Typs,<br />
üblicherweise Messdaten<br />
• Sehr einfaches Erstellen von Histogrammen aus TTrees.<br />
– Statistiken über die Häufigkeit von Einträgen. 1D und 2D.<br />
– Verschiedenste Zeichenstile.<br />
– Filtern nach (komplexen) Kriterien.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
20
ROOT : Zu zeichnende Daten filtern<br />
• ROOT kann Einträge aus einem Tree nach beliebigen<br />
Eigenschaften auswählen.<br />
• Sehr wichtige Funktion, da die wenigstens Daten in der Reinform<br />
sofort zu verwenden sind.<br />
• Das Kriterium (der „Cut“) wird der Draw()-Funktion von TTree<br />
als 2. Argument übergeben.<br />
t>Draw( "sp2:sp1", "sp3>42", "line" );<br />
• C++-Syntax. Also z.B. und-Verknüpfung:<br />
"sp3>42 && sin(sp1/sp2)
ROOT : Histogramm aus Tree berechnen<br />
• Häufigkeitsverteilung eines<br />
Eintrags als Histogramm<br />
darstellen.<br />
T>Draw( "Spalte",<br />
"Bedingung" );<br />
• Ergebnis ist ein neues<br />
Histogramm mit Default-<br />
Namen htemp.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
22
ROOT : 3D-Histogramme<br />
• Einfach mehrere Spalten angeben und passende Plotoption<br />
auswählen, z.B. LEGO oder COL2.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
23
ROOT : Fits<br />
• Einfachste Möglichkeit: Über Rechtsklick auf ein Histogramm und<br />
„Fit-Panel“.<br />
• Zu fittende Funktion auswählen aus vordefinierter Liste,<br />
z.B. „gaus“ (ohne Parameter!),<br />
oder selbst eingeben: Parameter [0], [1], etc.<br />
Gerade a*x+b: [0]*x + [1] (oder pol1)<br />
• Fit-Ergebnis im Plot anzeigen:<br />
Options->Fit Parameters im Menü.<br />
• Auf der Kommandozeile:<br />
zunächst eine Funktion (TF1) definieren.<br />
Dann den Fit durchführen:<br />
o>Fit( "Funktion" );<br />
(o kann ein Histogramm oder ein TGraph sein).<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
24
ROOT : Skripte<br />
• ROOT kann Skripte verarbeiten.<br />
• Skripte sind kurze C++-Codestücke in .cpp-Dateien.<br />
Der Code ist komplett mit {} zu umschließen.<br />
{<br />
ehochx = new TF1( "ehochx", "exp(x)", 0, 10 );<br />
ehochx>Draw();<br />
}<br />
• Wird ROOT mit dem Namen der Datei auf der Kommandozeile<br />
gestartet, so wird der Inhalt sofort zu Beginn der Sitzung<br />
ausgeführt.<br />
Um ROOT nach Ausführen der Datei automatisch zu beenden<br />
Kommandozeilenoption q verwenden.<br />
• Innerhalb einer Sitzung kann die Datei mit .x "Dateiname"<br />
ausgeführt werden.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
25
ROOT : .root-Dateien lesen<br />
• Stehen Daten schon im .root-Format zur Verfügung, kann root<br />
einfach mit root Datei.root gestartet werden.<br />
• Alle Objekte in der Datei stehen dann sofort mit Ihrem Namen<br />
zur Verfügung.<br />
• Weiß man nicht, was in der Datei ist, hilft TBrowser weiter.<br />
Starten mit new TBrowser();<br />
• Unter „ROOT Files“ findet man dann die Datei und kann<br />
browsen.<br />
• Für Trees gibt es im Kontextmenü (rechte Maustaste) die Option<br />
„Start Viewer“, die ein mächtiges Tool zum analysieren des<br />
Trees (zusammenklicken von Histogrammen inkl. Cuts etc.)<br />
zur Verfügung stellt. (Ausführen: Symbol unten links)<br />
• Der Viewer lässt sich auch direkt für jeden Tree starten, egal wie<br />
er erstellt wurde.<br />
tree>StartViewer();<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
26
ROOT : Plots speichern<br />
• Auch ROOT kann Plots in vielen Vektor- und Bitmap-Formaten<br />
speichern.<br />
• Allerdings mit weniger Einstellmöglichkeiten als gnuplot.<br />
• Zum Speichern im Menü File->Save As... auswählen<br />
• oder zunächst einen Canvas selbst anlegen:<br />
c = new TCanvas();<br />
Dann ganz normal zeichnen, und mit<br />
c>Print( "Dateiname" );<br />
in Ausgabedatei speichern. Der Dateityp wird durch die<br />
Endung (.pdf, .png, ...) festgelegt.<br />
LS Schaltungstechnik<br />
gnuplot & ROOT<br />
& Simulation<br />
27
Thank you!