0% fanden dieses Dokument nützlich (0 Abstimmungen)
48 Ansichten15 Seiten

Pyroot

PyROOT ist eine Python-Bindung für ROOT, die die Nutzung von C++-Bibliotheken in Python ermöglicht und in der Version 6.26.06 verbessert wurde. Die Installation kann direkt, in einer virtuellen Umgebung wie Anaconda oder über Jupyter Lab erfolgen, wobei verschiedene Pakete und Funktionen zur Datenanalyse bereitgestellt werden. PyROOT bietet eine intuitive Schnittstelle für die Arbeit mit ROOT-Daten und ermöglicht den Zugriff auf Machine Learning-Umgebungen.

Hochgeladen von

Test
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
48 Ansichten15 Seiten

Pyroot

PyROOT ist eine Python-Bindung für ROOT, die die Nutzung von C++-Bibliotheken in Python ermöglicht und in der Version 6.26.06 verbessert wurde. Die Installation kann direkt, in einer virtuellen Umgebung wie Anaconda oder über Jupyter Lab erfolgen, wobei verschiedene Pakete und Funktionen zur Datenanalyse bereitgestellt werden. PyROOT bietet eine intuitive Schnittstelle für die Arbeit mit ROOT-Daten und ermöglicht den Zugriff auf Machine Learning-Umgebungen.

Hochgeladen von

Test
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

ROOT – Python Interface

ROOT hat ein Python binding (PyROOT) und vereinigt damit kompilierte
C++ Bibliotheken mit der Flexibilität von Python. Die Bindung wird
automatisch aufgesetzt. Für die aktuelle Version 6.26.06 wurde PyROOT
erheblich verbessert und stabilisiert. ROOT und pyROOT können entweder
direkt kompiliert, in einer virtuellen Python Umgebung wie anaconda3
installiert oder im CIP pool in der jupyter Lab Installation verwendet werden.
• Installation von PyROOT beim schon diskutierten ROOT Kompilieren
– Wenn python include files vorhanden sind, wird PyROOT automatisch
kompiliert.
– Einige Tipps:
Entscheiden Sie sich für eine Python Version, z.B. python3 und
installieren Sie keine Mischung von python2 und python3.
Installieren Sie header files der gewünschten Pakete (falls
vorhanden). Befehle für OpenSuSE als superuser
>$ zypper python3 python3-devel python3-numpy
python3-numpy-devel
Achten Sie beim Konfigurieren mit cmake (siehe obigen link und das
entspechende Text file) darauf, ob und welche Version für python ge-
funden wurde.
ROOT – Python Interface
• Installation von PyROOT in anaconda3
– anaconda3 Installation: Herunterladen von Anaconda3-2020.11-Linux-x86_64.sh
Installation der erforderlichen Pakete entsprechend Ihrem Betriebssystem
als superuser, aber anaconda3 installieren Sie als user
>$ bash Anaconda3-2020.11-Linux-x86_64.sh
Beantworten Sie die Frage Soll das environment ausgeführt werden
mit Yes und stellen Sie sicher, das es ausgeführt ist. Am besten kopieren
Sie die Zeilen, die dadurch in .bashrc hinzugefügt wurden in ein
separates file [Link] und führen es mit sh [Link]
aus, wenn anaconda3 verwendet werden soll.
– Benutzung:
• >$ conda create -n myFirstEnv python=3.6 ; conda myFirstEnv activate
Installation von zu verwendenden Paketen mit conda oder pip
(myFirstEnv) >$ conda install matplotlib scikit-learn
(myFirstEnv) >$ pip install numpy wheel ….
ROOT installation aus conda-forge In der conda Umgebung (myFirstEnv)
(myFirstEnv) >$ conda install -c conda-forge root
Verlassen von conda
(myFirstEnv) >$ conda deactivate
ROOT – Python Interface
PyROOT kann auch in der jupyter Lab Installation des CIP Pools unter der
folgenden Adresse verwendet werden
[Link]
• Benutzung
– Wählen Sie unter “Notebook“ oder “Console“ im Launcher “Python3“ aus
Sie erhalten Zugang zu einem File in das python code eingegeben werden
kann. In einem Notebook können Ihre Eingaben als iPython Notebook
Files gespeichert und ausgeführt werden (files *.ipynb).
– Im Notebook steht pyROOT der ROOT version 6.22.02 zur Verfügung,
andere nützliche installierte Pakete sind scikit-learn, numpy, matplotlib,
iminuit, ……
– Die Bedienung ist sehr intuitiv, die Dokumentation ist unter
[Link]
zu finden.
ROOT – Python Interface
Eine kurze python Einführung finden Sie unter
[Link]
ROOT erlaubt einen interaktiven Zugang zum Python Interface entweder mit
dem python Interpreter oder mit Hilfe von Web basierenden jupyter notebooks
• Python shell
• - python shell in einem Terminal python3 oder ipython3
- python Macros mit ROOT code python3 -i [Link]
ipython3 -i [Link]
• Start eines Jupyter notebooks root --notebook [Link]
Der Befehl öffnet einen Web Browser mit einer Jupyter Session in der
.ipynb notebooks ausgeführt werden können.
• Beispiel: [Link]

import ROOT
%jsroot on
c = [Link]()
f1 = ROOT.TF1("func1", "sin(x)", 0, 10)
[Link]()
[Link]() # show graphics!
PyROOT
Erste Schritte in PyROOT: Fast alle bisher betrachteten ROOT Beispiele
lassen sich mehr oder weniger einfach auf python übertragen. Beispiele sind
auch im tutorial Bereich jeder ROOT Installation zu finden oder in
[Link]
/
• Füllen eines Histogramms mit einer Gauss-Verteilung.
>$ python3
Python 3.6.12 (default, Dec 02 2020, [Link]) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more
information.
>>> import ROOT
>>> h = ROOT.TH1F("myHist", "myTitle", 64, -4, 4)
>>> [Link]("gaus")
>>> [Link]()
• Zeichnen einer Funktion
>>> f = ROOT.TF1("f1", "sin(x)/x", 0., 10.)
>>> [Link]()
Direkt in Linux - oder in ancondo3 python öffnen die obigen Befehle ein
TCanvas. In einem jupyter notebook muss das TCanvas instanziert,
gezeichnet werden, es enthält dann die zuvor hinzugefügten Elemente.
>>> c = TCanvas('c', 'My Plot',700, 500 )
>>> [Link]()
PyROOT
Wie schon im ROOT interpreter können python Befehle in “python macros“
gespeichert werden (files *.py). Damit ROOT Canvases sichtbar bleiben,
sollten PyROOT Anwendungen in der Linux oder anaconda3 shell interaktiv
gestartet werden.
>$ python3 -i [Link]

• Ähnliche Eigenschaften in python nutzbar wie in C++, e.g.


>>> import ROOT - Up to factor 10 more CPU time same task → C++
>>> import sys + Impression of more simple usage → python
>>> if len( sys . argv ) != 3:
>>> print "USAGE:%s <input file> <output file>"
%(sys . argv [0])
>>> sys . exit (1)
>>> inFileName = sys . argv [1] [Link]
>>> outFileName = sys . argv [2]
>>> print "Reading from ",inFileName,"and writing to",
outFileName
Aufrufen des python scripts in der shell
>$ python [Link] [Link] [Link]
PyROOT
• Input/ Output → Important: get the physics data into the python environment
- text format and root format including objects
- text → use numpy, z.B. die Daten werden in numpy array kopiert, es gibt
Optione, die auch komplexe Strukturen unterstützen
>>> import numpy as np
>>> data = [Link]('[Link]', dtype='d')
- root → benutze PyROOT auch um python oder numpy arrays zu füllen
>>> file = TFile("[Link]",'update')
>>> tree = [Link]("FitTest")
>>> sig = TH1D( 'signal', 'Signaldistribution', 100, 0., 250.)
>>> N = [Link]()
>>> x = [Link](N)
>>> for i in range(N):
>>> [Link](i)
>>> x[i] = tree.signal_1
>>> [Link](tree.signal_1)
- Output
>>> myfile = TFile( '[Link]', 'RECREATE' )
>>> [Link]()
>>> [Link]()
PyROOT - Objekte
• Bei der Instanzierung einer C++ Klasse in pyROOT wird ein C++ Objekt
und ein python Proxy Objekt erzeugt. Der python Aufruf wird an das C++
Objekt weitergeleitet. Es gibt Funktionen, die den Zugriff auf den python
Proxy mit cppyy erlauben.
- obtain the address of an internal C++ object from its Python proxy
>>> import ROOT
>>> [Link]("struct Particle{int
charge = 1; double mass = 30 ; double
energy=400 ;};")

>>> pion = [Link]()


>>> print("Address of pion:",[Link](pion))
>>> print("Mass of pion:",[Link])
>>> [Link] = 55
>>> print("Address of mass in
pion:",[Link](pion,'mass'))
>>> print("Mass of pion:",[Link])
PyROOT - Objekte
• Bei der Instanzierung einer C++ Klasse in pyROOT wird ein C++ Objekt
und ein python Proxy Objekt erzeugt. Der python Aufruf wird an das C++
Objekt weitergeleitet. Es gibt Funktionen, die den Zugriff auf den python
Proxy mit cppyy erlauben.
- Create a C++ templated class instance
>>> import ROOT
>>> vInt = [Link][int]()
>>> for i in range(0, 10):
vInt.push_back(i)
>>> for i in vInt:
print(i, end=' ')

[Link]
PyROOT - Funktionen
• TF{1,2,3} Konstruktoren benötigen als Argument Python Funktionen oder
Klassen, die Operationen wie plotting and fitting erlauben. Typischerweise
werden ein Datenarray mit {1, 2, 3} Dimensionen und ein Parameterarray
zur Verfügung gestellt. Die SetParameter Methoden setzen
Funktionsparameter nach der Instanzierung der TF Objekte.
- Use a function instancianting a TF object
>>> import ROOT Funktionsdefinition mit Daten- und
>>> def myFunc(arr, par): Parameterarray
return par[0]+par[1]*arr[0]+par[2]*arr[0]*arr[0]
>>> f = ROOT.TF1('pyfunc', myFunc, -5., 5.,3)
>>> [Link](5., 2., 0.5)
Parameter
>>> c = [Link]()
>>> [Link]()

[Link]
PyROOT - Funktionen
• TF{1,2,3} Konstruktoren benötigen als Argument Python Funktionen oder
Klassen, die Operationen wie plotting and fitting erlauben. Typischerweise
werden ein Datenarray mit {1, 2, 3} Dimensionen und ein Parameterarray
zur Verfügung gestellt. Die SetParameter Methoden setzen
Funktionsparameter nach der Instanzierung der TF Objekte.
- Use a class instancianting a TF object
>>> import ROOT Klassendefinition mit Daten- und
>>> class polyFunc: Parameterarray
def __call__(self, arr, par):
return par[0]+par[1]*arr[0]+par[2]*arr[0]*arr[0]
>>> myPol = PolyFunc()
>>> f = ROOT.TF1('pyfunc', myPol, -5., 5.,3)
>>> [Link](5., 2., 0.5)
Parameter
>>> c = [Link]()
>>> [Link]()
[Link]
PyROOT - TTree
• Schreiben eines TTree Objektes:
>>> from ROOT import TFile, TTree, gRandom
>>> from array import array
>>> f = TFile("[Link]", 'recreate')
>>> tree = TTree("myTree", "My first Tree in python")
>>> sig = array('d',[0]) serves as pointer
>>> [Link]("sig", sig, 'sig/D') create branch
>>> for i in range(10000):
sig = [Link](5,1)
[Link]()
>>> [Link]()
>>> [Link]()
• Lesen eines TTree Objektes:
>>> N = [Link]()
>>> sig = array('d',[0])
>>> [Link]("sig", sig, 'sig/D')
>>> for i in range(N):
[Link](i)
print([Link])
PyROOT - TTree
• Schreiben eines TTree Objektes:
>>> from ROOT import TFile, TTree, gRandom
>>> from array import array
>>> f = TFile("[Link]", 'recreate')
>>> tree = TTree("myTree", "My first Tree in python")
>>> sig = array('d',[0]) serves as pointer
>>> [Link]("sig", sig, 'sig/D') create branch
>>> for i in range(10000):
Ein komplexeres Beispiel
sig zum Schreiben eines ROOT trees ist die im File Roo
= [Link](5,1)
[Link] Seite 80 beschriebene
[Link]()Simulation eines Zerfalls.
>>> [Link]()
[Link]
>>> [Link]()
• Lesen eines TTree Objektes:
>>> N = [Link]()
>>> sig = array('d',[0])
>>> [Link]("sig", sig, 'sig/D')
>>> for i in range(N):
[Link](i)
print([Link])
PyROOT - Beispiele
• PyROOT Beispiele sind in der tutorial section im Web und dem tutorial
directory der ROOT Installation
[Link]

•Einige an unseren Kurs angelehnte Beispiele sind im Beispielbereich


in form von iPython files zu finden.
- reading text file and gaussian fit → [Link]
- LSQ fit of a polynomial to numpy array in Minuit 2 with iminuit and
plot → [Link]
- Graph fitting with options using a python function with confidence level
plotting → [Link]
- Read root tree and fit gaus + exponential defining the fit function in
python and as TFormula → [Link]
- rooFit example of fitting extended gaussian PDF and plotting
residuals → [Link]
Zusammenfassung
• PyROOT ist sicher eine extrem nützliche Ergänzung zum ROOT
Datenanalyse Environment → das Konvertieren unserer Kurs Beispiele
in python code ist einfach.
• Insbesondere gibt es Zugang von in ROOT gespeicherten Daten zu
Machine Learning Umgebungen wie scikit-learn und TensorFlow mit dem
einfach zu bedienendem Keras.
• Ein anderes Tools zum Einlesen von in ROOT gespeicherten Daten in
numpy und awkward arrays ist uproot (ohne ROOT Installation nutzbar)

Das könnte Ihnen auch gefallen