Subsections

Arbeiten mit ROOT - Python

ROOT initialisieren und starten

Vor dem ersten Mal: Python/Root starten:
# Pfade setzen (evt. in .bashrc kopieren)
module load marabou/6.09.02 (oder: module load root/6.09.02)
cd root
#
# interaktive Python Umgebung starten
ipython
»> import ROOT

Python beenden:
Ctrl-d


Python Operationen - Python/ROOT als Taschenrechner


>>> import ROOT
>>> 5**2
25
>>> 25.1*3.5
87.85000000000001
>>> 25.1**3.5
79224.22969296658
>>> sin(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sin' is not defined
>>> import math
>>> math.sin(2)
0.9092974268256817
>>> math.atan(1)*4
3.141592653589793
>>> math.log(2)
0.6931471805599453
>>> math.log(1)
0.0
>>> math.exp(1)
2.718281828459045
>>> 2<<10
2048
>>> math.atan2(1,1)
0.7853981633974483

Schleifen

>>> s=1.
>>> for i in range(1,70): s *= i # Fakultaet
... 
>>> s
1.711224524281413e+98
>>> ROOT.TMath.Gamma(70) # Root Gamma Fkt
1.7112245242814127e+98

Macros


# file fak.py
def fak( n = 1 ):
    t = 1.0
    for i in range(1,n+1):
        t *= i
    return(t)
>>> execfile("fak.py") # execute commands in file fak.py
>>> fak(99)
9.33262154439441e+155

Macros cont ...

Vorsicht mit Gültigkeitsbereich von Variablen: Alle Variablen, die in der Funktion angelegt werden, sind nach Ausführung wieder verschwunden (local scope)


def fillH1( n=100000 ):
    h2 = ROOT.TH1F("h2","mytitle",100,0,1)
    for i in xrange(n): 
        h2.Fill(ROOT.gRandom.Rndm())
    h2.Draw()
#
fillH1( 100000 ) # histo wird gefuellt aber nach Draw() wieder weg


def fillH1( n=100000 ):
    h2 = ROOT.TH1F("h2","mytitle",100,0,1)
    for i in xrange(n): 
        h2.Fill(ROOT.gRandom.Rndm())
    h2.Draw()
    return h2
#
h = fillH1( 100000 ) # histo wird gefuellt und histo Objekt zurueckgegeben
# --> histo bleibt bestehen

Funktionen


>>> f1 = ROOT.TF1("f1","sin(x)", 0, 10 )
>>> f1.Draw()
Info in <TCanvas::MakeDefCanvas>:  created default TCanvas with name c1
>>> f2 = ROOT.TF1("f2","cos(x)", 0, 10 )
>>> f2.Draw()
Info in <TCanvas::MakeDefCanvas>:  created default TCanvas with name c1
>>> f1.Draw("same")
>>> f4 = ROOT.TF1("f4","abs(f1)*exp(x)", 0, 10 )
>>> f4.Draw()

Image funcs

Histogramme und Zufallszahlen


>>> h1 = ROOT.TH1F("h1","mytitle",100,0,1)
>>> for i in xrange(1000000): 
...   x = float(i)/1e6
...   r=h1.Fill(x,x**3)
... 
>>> h1.Draw()
>>> h2 = ROOT.TH1F("h2","uniform Random",100,0,1)
>>> for i in xrange(1000000): r=h2.Fill(ROOT.gRandom.Rndm())
... 
>>> h2.Draw()
>>> h3 = ROOT.TH1F("h3","Random Gauss",100,-4,4)
>>> for i in xrange(1000000): r=h3.Fill(ROOT.gRandom.Gaus())
... 
>>> h3.Draw()

Image histo

Fitten


# file pgausf.py
from array import array
nit = 10
mean=array('d',nit*[0])
emean=array('d',nit*[0])
xv=array('d',nit*[0])
ex=array('d',nit*[0])

h3 = ROOT.TH1F("h3","Random Gauss",100,-4,4)

for i in range(nit):
    nrnd = 100*pow(2,i)
    xv[i] = i
    ex[i] = 0.1
    for j in xrange(nrnd):
        r=h3.Fill(ROOT.gRandom.Gaus())   
    h3.Fit("gaus","eq")
    h3.Draw()
    fit = h3.GetFunction("gaus")
    mean[i] = fit.GetParameter(1)
    emean[i] = fit.GetParError(1)
    print i , " Mean = " , mean[i] , " +- " , emean[i]

ce = ROOT.TCanvas("ce", "ce")
# TGraphErrors needs python array, not just list
tg = ROOT.TGraphErrors( len(xv), xv, mean, ex, emean )
tg.Draw("AP");
# 
# in ROOT
#>>>  execfile(pgausf.py)

NTuple und Tree Ausgabe

GDuckeck 2018-04-10