https://github.com/root-project/root
Tip revision: c2f858c3c422037764ef1981039685210266cf52 authored by Philippe Canal on 11 November 2015, 04:43:55 UTC
Really configure LLVM to build in C++14 when asked.
Really configure LLVM to build in C++14 when asked.
Tip revision: c2f858c
hsimple.py
#*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
#*-*
#*-* This program creates :
#*-* - a one dimensional histogram
#*-* - a two dimensional histogram
#*-* - a profile histogram
#*-* - a memory-resident ntuple
#*-*
#*-* These objects are filled with some random numbers and saved on a file.
#*-*
#*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
from ROOT import TCanvas, TFile, TProfile, TNtuple, TH1F, TH2F
from ROOT import gROOT, gBenchmark, gRandom, gSystem, Double
# Create a new canvas, and customize it.
c1 = TCanvas( 'c1', 'Dynamic Filling Example', 200, 10, 700, 500 )
c1.SetFillColor( 42 )
c1.GetFrame().SetFillColor( 21 )
c1.GetFrame().SetBorderSize( 6 )
c1.GetFrame().SetBorderMode( -1 )
# Create a new ROOT binary machine independent file.
# Note that this file may contain any kind of ROOT objects, histograms,
# pictures, graphics objects, detector geometries, tracks, events, etc..
# This file is now becoming the current directory.
hfile = gROOT.FindObject( 'py-hsimple.root' )
if hfile:
hfile.Close()
hfile = TFile( 'py-hsimple.root', 'RECREATE', 'Demo ROOT file with histograms' )
# Create some histograms, a profile histogram and an ntuple
hpx = TH1F( 'hpx', 'This is the px distribution', 100, -4, 4 )
hpxpy = TH2F( 'hpxpy', 'py vs px', 40, -4, 4, 40, -4, 4 )
hprof = TProfile( 'hprof', 'Profile of pz versus px', 100, -4, 4, 0, 20 )
ntuple = TNtuple( 'ntuple', 'Demo ntuple', 'px:py:pz:random:i' )
# Set canvas/frame attributes.
hpx.SetFillColor( 48 )
gBenchmark.Start( 'hsimple' )
# Initialize random number generator.
gRandom.SetSeed()
rannor, rndm = gRandom.Rannor, gRandom.Rndm
# For speed, bind and cache the Fill member functions,
histos = [ 'hpx', 'hpxpy', 'hprof', 'ntuple' ]
for name in histos:
exec '%sFill = %s.Fill' % (name,name)
# Fill histograms randomly.
px, py = Double(), Double()
kUPDATE = 1000
for i in xrange( 25000 ):
# Generate random values.
rannor( px, py )
pz = px*px + py*py
random = rndm(1)
# Fill histograms.
hpxFill( px )
hpxpyFill( px, py )
hprofFill( px, pz )
ntupleFill( px, py, pz, random, i )
# Update display every kUPDATE events.
if i and i%kUPDATE == 0:
if i == kUPDATE:
hpx.Draw()
c1.Modified()
c1.Update()
if gSystem.ProcessEvents(): # allow user interrupt
break
# Destroy member functions cache.
for name in histos:
exec 'del %sFill' % name
del histos
gBenchmark.Show( 'hsimple' )
# Save all objects in this file.
hpx.SetFillColor( 0 )
hfile.Write()
hpx.SetFillColor( 48 )
c1.Modified()
c1.Update()
# Note that the file is automatically closed when application terminates
# or when the file destructor is called.