Upload
german-reyner
View
221
Download
1
Embed Size (px)
Citation preview
ROOT courses 1
The ROOT SystemA Data Access & Analysis Framework
4-5-6 February 2003René Brun/EP
http://root.cern.ch
Graphics
ROOT courses 2
The Graphics libraries
Basic principles
TPad, list of primitives
Painting, Picking
2-D, 3-D primitives
R.Brun LCG ROOT corses 3
R.Brun LCG ROOT corses 4
ROOT libs
203856 libASImage.so 1273308 libCint.so 5658143 libCore.so 419481 libEG.so 152912 libEGPythia.so 160874 libEGPythia6.so 162181 libEGVenus.so 326000 libGX11.so 183065 libGX11TTF.so 2306421 libGeom.so 158895 libGeomPainter.so 1019977 libGpad.so 1602106 libGraf.so 1028762 libGraf3d.so 3669409 libGui.so 1605344 libHbook.so 1940222 libHist.so 332268 libHistPainter.so 114970 libHtml.so
167670 libMC.so 580851 libMatrix.so 319945 libMinuit.so 268321 libMySQL.so 21981 libNew.so 88438 libPgSQL.so 336736 libPhysics.so 196318 libPostscript.so 576691 libProof.so 681086 libRFIO.so 2017467 libRGL.so 177657 libRint.so 35410 libSRPAuth.so 1120731 libTable.so 312785 libThread.so 1067715 libTree.so 356186 libTreePlayer.so 409350 libTreeViewer.so 155664 libX3d.so
1434404 libgrafX11.a
1046944 libgraflib.a 4981896 libkernlib.a 2002460 libmathlib.a 11849762 libpacklib.a 4350440 libpawlib.a
ls -l $ROOTSYS/lib ls -l /cern/pro/lib
TOTAL = 30.7 MBytes
TOTAL = 25.2 MBytes
R O O T CERNLIB
R.Brun LCG ROOT corses 5
Gui/Graphics strategy
TVirtualX
TGWin32 TGX11 TGWin32GDKTGQt
TVirtualPad
TPad
User/Root GUI and Graphics classesApplications see onlyAbstract Interfaces
Low levelscreen graphics
and GUI
High levelpad graphics
TG??
R.Brun LCG ROOT corses 6
Coordinate Systems Pixel coordinates [0,32000] (TVirtualX)
(0,0) at top left corner NDC (Normalized Device Coordinates)
[0,1], (0,0) at bottom left corner System used for annotations
Normal User coordinates (TVirtualPad) Linear/Log scale in x,y,z Can switch between lin/log scale without calling Draw
again. TVirtualPad/TPad have functions to convert
between systems
R.Brun LCG ROOT corses 7
TPad: main graphics container
Hello
Root > TLine line(.1,.9,.6,.6)
Root > line.Draw()
Root > TText text(.5,.2,”Hello”)
Root > text.Draw()
The Draw function adds the object to the list of primitives of the current pad.
If no pad exists, a pad is automatically created with a default range [0,1].
When the pad needs to be drawn or redrawn, the object Paint function is called.
Only objects derivingfrom TObject may be drawn
in a padRoot Objects or User objects
R.Brun LCG ROOT corses 8
TPad hierarchy
A primitive in the pad can be another pad.
The top level pad is a TCanvas.
A pad has an associate pixmap.
Painting is in the pixmap. When the pad must be redrawn, the pixmap is flushed to the window
canvas
pad1
pad3pad2
pad1a
The pixmap is flushed when the pad is declared “modified” and TPad::Update called
R.Brun LCG ROOT corses 9
R.Brun LCG ROOT corses 10
Canvas pixmaps
600x400
1200x800Scroll bars
Need Help?
R.Brun LCG ROOT corses 11
Saving a pad/canvas
A pad/canvas may be saved in many formats using the GUI menu or via TPad::SaveAs canvas.C : a C++ script is automatically
generated. The canvas may be generated again via .x canvas.C
canvas.ps(eps) Postscript or encapsulated ps canvas.svg : scalable vector graphics canvas.gif canvas.root: keep objects in a compressed and
portable format.
R.Brun LCG ROOT corses 12
Graphics in Batch mode
No changes required to your program X11 libs are not loaded Can produce output
with .ps,.eps,.svg,.root example:
canvas.SavesAs(“file.ps”)
R.Brun LCG ROOT corses 13
Picking- Graphics event loop
TCanvas::HandleInput manages the event loop. When the
mouse moves to a pad, TPad::Pick is called.
TPad::Pick loops on all primitives in the pad, calling their function DistancetoPrimitive. The selected object is the one with the smallest distance.
Activate the tool bar option “ShowEventStatus” to understand the behaviour.
R.Brun LCG ROOT corses 14
Picking- Graphics event loop
When an object has been selected by DistancetoPrimitive, its
ExecuteEvent function is called.
The result of ExecuteEvent is object dependent. The cursor changes shape to suggest possible actions : grow/shrink/move box, rotation, etc.
Pressing the right mouse button on an object shows its context menu.
R.Brun LCG ROOT corses 15
The Graphics Event Loop
The ROOT event handler supports: keyboard interrupts system signals X11, Xt, Xm events Sockets interrupts Special messages (shared memory, threads..)
Foreign systems (eg Inventor, X3d..) can easily be integrated in the ROOT loop.
ROOT will dispatch the foreign events using Timers.
Signals and Slots like in Qt Qt and ROOT can work together
R.Brun LCG ROOT corses 16
Basic Primitives
TButton
TLine TArrow TEllipse
TCurvyLine
TPaveLabel
TPave
TDiamond
TPavesText
TPolyLine
TLatex
TCrown
TMarker
TText
TCurlyArc
TBox
R.Brun LCG ROOT corses 17
The Graphics EditorSee HELP button
to use the graphics editor
R.Brun LCG ROOT corses 18
Graphics attributes
Most Root classes derive from very light weight data objects classes like TAttLine, TAttFill, TAttMarker, TAttText
R.Brun LCG ROOT corses 19
Annotations, Paves
quarks.C
R.Brun LCG ROOT corses 20
Full LateX
support on
screen and
postscript
TCurlyArcTCurlyLineTWavyLineand other
building blocks for Feynmann
diagrams
Formula or diagrams can be
edited with the mouse
Feynman.C
latex3.C
R.Brun LCG ROOT corses 21
Graphs
TGraph(n,x,y)
TCutG(n,x,y)
TGraphErrors(n,x,y,ex,ey)
TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh)
TMultiGraph
gerrors2.C
R.Brun LCG ROOT corses 22
Graphszdemo.C
R.Brun LCG ROOT corses 23
Graphics : 1,2,3-D functions
surfaces.CFittingDemo.C
TF3 f3(“f3”,”sin(x*x+y*y+z*z-36)”,-2,2,-2,2,-2,2);
f3->Draw();
R.Brun LCG ROOT corses 24
TGaxisgaxis.C
R.Brun LCG ROOT corses 25
Adding dynamic objects to a pad
A TExec object may be added to the pad. Its Paint function can call any CINT command.
DynamicSlice.C
R.Brun LCG ROOT corses 26
Using Timers with graphicsDouble_t pi = TMath::Pi();TF2 *f2;Float_t t = 0;Float_t phi = 30;void anim() { gStyle->SetFrameFillColor(42); TCanvas *c1 = new TCanvas("c1"); c1->SetFillColor(17); f2 = new TF2("f2","sin(2*x)*sin(2*y)*[0]",0,pi,0,pi); f2->SetParameter(0,1); f2->SetNpx(15); f2->SetNpy(15); f2->SetMaximum(1); f2->SetMinimum(-1); f2->Draw("surf1"); TTimer *timer = new TTimer(20); timer->SetCommand("Animate()"); timer->TurnOn();} void Animate() { t += 0.05*pi; f2->SetParameter(0,TMath::Cos(t)); phi += 2; gPad->SetPhi(phi); gPad->Modified(); gPad->Update();}
Every 20 milliseconds:
-Modify the function parameter
-Change the view angle
anim.C
R.Brun LCG ROOT corses 27
More on Timers with Graphics
{ // run the dancing Hello World Hello hello;
// run the analog clock Aclock clock;
// run the Tetris game Tetris tetris;}
The 3 canvases
run in parallel
games.C
R.Brun LCG ROOT corses 28
GUI User example
Example of GUI
based on ROOT tools
Each elementis clickable
R.Brun LCG ROOT corses 29
Event Displays
R.Brun LCG ROOT corses 30
TASImage classesNew set of image processing classes. The TImage class is the abstract image base class and TASImage is the concrete implementation using the libAfterImage imaging library of Sasha Vasko <[email protected]>.
A large part of the development was done by Reiner Rohlfs from the ISDC based on a set of astrophysics user requirements.
The image class allows for the reading and writing of images in different formats, several image manipulations (scaling, tiling, merging, etc.) and displaying in pads. The size of the image on the screen does not depend on the original size of the image but on the size of the pad.Therefore it is very easy to resize the image on the screen by resizing the pad.
Rose_image.C
Galaxy_image.C
R.Brun LCG ROOT corses 31
3-D Graphics
Basic primitives TPolyLine3D, TPolyMarker3D, THelix,
TMarker3DBox,TAxis3D
Geant primitives Support for all Geant3 volumes + a few new volume types TBRIK,TCONE,TCONS,TCTUB,TELTU,TGTRA,THYPE,TPARA,TPCON,
TPGON,TSPHE,TTUBE,TTUBS,TTRAP,TTRD1,TTRD2,TXTRU
Geometry package Rendering with:
TPad X3D (very fast. Unix only. Good on networks) OpenGL OpenInventor (new addition in 3.01)
R.Brun LCG ROOT corses 32
Some detectors in ROOT geometry
R.Brun LCG ROOT corses 33
Alice 3 million nodes
R.Brun LCG ROOT corses 34
R.Brun LCG ROOT corses 35
Interfaces with other systems
RootPython interface by Pere Mato http://root.cern.ch/root/R2002/Program.html
JavaRoot by Subir Sarkar http://sarkar.home.cern.ch/sarkar/jroot/main.html
The ROOT interface to Mathematica http://mathroot.sourceforge.net
and many more, see; http://root.cern.ch/root/ExApplications.html
R.Brun LCG ROOT corses 36
RootPython (Pere Mato)
TClassTClassWrap
TMethodWrap
TObjectWrap
TCArrayWrap
TObject
TMethod
RootModule
CIN
T
Boost
.Pyth
on
OtherROOT
LibrariesTROOTWrap
Pythoninterpreter
R.Brun LCG ROOT corses 37
JavaRoot
Extend Java with Root libraries
Java gets a matured Histograming API, Fitting and Physics analysis classes, a HEP specific Socket programming API
Root reaches an even wider audience, finds a number of interpreter and scripting environments that are (re)implemented in Java (Jython, BeanShell etc.)
JNI
ROOT
JAVA
JythonBeanShell NetRexx Jacl
http://sarkar.home.cern.ch/sarkar/jroot/main.html
R.Brun LCG ROOT corses 38
CINT vs Java/Python/Jython
CINT: 280 Rootmarks
JAVA: 105 Rootmarks
JYTHON: 52 Rootmarks