38
ROOT courses 1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 René Brun/EP http://root.cern.ch Graphics

ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP Graphics

Embed Size (px)

Citation preview

Page 1: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

ROOT courses 1

The ROOT SystemA Data Access & Analysis Framework

4-5-6 February 2003René Brun/EP

http://root.cern.ch

Graphics

Page 2: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

ROOT courses 2

The Graphics libraries

Basic principles

TPad, list of primitives

Painting, Picking

2-D, 3-D primitives

Page 3: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 3

Page 4: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 5: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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??

Page 6: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 7: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 8: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 9: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 9

Page 10: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 10

Canvas pixmaps

600x400

1200x800Scroll bars

Need Help?

Page 11: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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.

Page 12: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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”)

Page 13: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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.

Page 14: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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.

Page 15: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 16: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 16

Basic Primitives

TButton

TLine TArrow TEllipse

TCurvyLine

TPaveLabel

TPave

TDiamond

TPavesText

TPolyLine

TLatex

TCrown

TMarker

TText

TCurlyArc

TBox

Page 17: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 17

The Graphics EditorSee HELP button

to use the graphics editor

Page 18: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 18

Graphics attributes

Most Root classes derive from very light weight data objects classes like TAttLine, TAttFill, TAttMarker, TAttText

Page 19: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 19

Annotations, Paves

quarks.C

Page 20: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 21: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 22: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 22

Graphszdemo.C

Page 23: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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();

Page 24: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 24

TGaxisgaxis.C

Page 25: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 26: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 27: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 28: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 28

GUI User example

Example of GUI

based on ROOT tools

Each elementis clickable

Page 29: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 29

Event Displays

Page 30: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 31: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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)

Page 32: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 32

Some detectors in ROOT geometry

Page 33: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 33

Alice 3 million nodes

Page 34: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 34

Page 35: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 36: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 36

RootPython (Pere Mato)

TClassTClassWrap

TMethodWrap

TObjectWrap

TCArrayWrap

TObject

TMethod

RootModule

CIN

T

Boost

.Pyth

on

OtherROOT

LibrariesTROOTWrap

Pythoninterpreter

Page 37: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

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

Page 38: ROOT courses1 The ROOT System A Data Access & Analysis Framework 4-5-6 February 2003 Ren é Brun/EP  Graphics

R.Brun LCG ROOT corses 38

CINT vs Java/Python/Jython

CINT: 280 Rootmarks

JAVA: 105 Rootmarks

JYTHON: 52 Rootmarks