Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

42
Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka

Transcript of Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Page 1: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Visualisation and (G)UI

Authors: Hajime Yoshida and Satoshi Tanaka

Page 2: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Contents (1)

Part 1: How to perform visualisation Introduction Visualizable Objects Visualisation Attributes Polyline and Marker Visualisation Drivers main() Function Visualisation Commands How to Visualize from C++ Codes Exercises Information

Page 3: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Visualisation and GUI

Part 1: Geant4 Visualisation

Page 4: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

1. Introduction

Geant4 Visualisation must respond to varieties of user requirements. For example,

Quick response to survey successive events Impressive special effects for demonstration High-quality output to prepare journal papers Flexible camera control for debugging geometry Highlighting overlapping of physical volumes Interactive picking of visualised objects Etc

Page 5: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

2. Visualisable Objects (1)

You can visualise simulation data such as: Detector components A hierarchical structure of physical volumes A piece of physical volume, logical volume, and solid Particle trajectories and tracking steps Hits of particles in detector components

Visualisation is performed either with commands or by writing C++ source codes of user-action classes

Page 6: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

2. Visualisable Objects (2)

You can also visualise other user defined objects such as:

A polyline, that is, a set of successive line segments for, e.g., coordinate axes

A marker which marks an arbitrary 3D position,for, e.g., eye guides

Texts, i.e., character strings for description, comments, or titles

Page 7: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

3. Visualisation Attributes

Necessary for visualisation, but not included in geometrical information

Colour, visibility, forced-wireframe style, etc A set of visualisation attributes is held by class G4VisAttributes

A G4VisAttributes object is assigned to a visualisable object with its SetVisAttributes () method, e.g.,

experimentalHall_logical -> SetVisAttributes (G4VisAttributes::Invisible)

Page 8: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

3.1 Constructors of G4VisAttributes

The following constructors are supported by class G4VisAttributes:

G4VisAttributes G4VisAttributes () G4VisAttributes (G4bool visibility) G4VisAttributes (const G4Colour& colour) G4VisAttributes (G4bool visibility,

const G4Colour& colour)

Page 9: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

3.2 Visibility

A boolean flag (G4bool) to control the visibility of objects

Access function G4VisAttributes::SetVisibility (G4bool

visibility) If you give false to the argument,

visualisation is skipped for objects for which this set of visualisation attributes is assigned. The default value of visibility is true.

Page 10: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

3.3 Colour (1)

Class G4VisAttributes holds its colour entry as an instance of class G4Colour

An equivalent class name, G4Color, is also available Class G4Colour is instantiated by giving RGB

components to its constructor: G4Colour::G4Colour ( G4double r = 1.0,

G4double g = 1.0, G4double b = 1.0 )

0<=r, g, b <= 1.0 The default arguments define “white” color

Page 11: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

3.3 Colour (2)

Access functions of G4VisAttributes to set G4Colour SetColour (const G4Colour& colour) SetColour ( G4double r ,

G4double g, G4double b)

Page 12: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

3.4 Assigning G4VisAttributes a logical volume

Class G4LogicalVolume holds a pointer of G4VisAttributes

Access functions of G4LogicalVolume SetVisAttributes (const

G4VisAttributes* pva)

Page 13: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

//----- C++ source codes: Assigning G4VisAttributes to a logical volume

...13

// Instantiation of a logical volume

myTargetLog = new G4LogicalVolume( myTargetTube,BGO, "TLog", 0, 0, 0);

...

// Instantiation of a set of visualization attributes with cyan colour

G4VisAttributes * calTubeVisAtt = new G4VisAttributes(G4Colour(0.,1.,1.));

// Set the forced wireframe style

calTubeVisAtt->SetForceWireframe(true);

// Assignment of the visualization attributes to the logical volume

myTargetLog->SetVisAttributes(calTubeVisAtt);

//----- end of C++ source codes

Sample C++ Codes:

Page 14: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

4. Polyline and Marker

Polyline and marker are defined in the graphics_reps category

They are available to model 3D scenes for visualisation

Page 15: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

4.1 Polyline

A set of successive line segments Defined with a class G4Polyline Used to visualise tracking steps, particle

trajectories, coordinate axes, etc G4Polyline is defined as a list of G4Point3D

objects. Elements of the list define vertex positions of a polyline.

Page 16: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

//----- C++ source codes: An example of defining a line segment // Instantiation G4Polyline x_axis;

// Vertex positions x_axis.append ( G4Point3D ( 0., 0., 0.) ); x_axis.append ( G4Point3D ( 5. * cm, 0., 0.) );

// Color G4Colour red ( 1.0, 0.0, 0.0 ); // color for x-axis G4VisAttributes att ( red ); x_axis.SetVisAttributes( att );//----- end of C++ source codes

Sample C++ Codes:

Page 17: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

4.2 Marker (1)

Set a mark to an arbitrary 3D position Usually used to visualise hits of particles Designed as a 2-dimensional primitive with shape (square,

circle, etc), color, and special properties of

(a) always facing the camera and (b) having the possibility of its size (diameter) defined either in

real 3D or 2D screen units (pixels)

Page 18: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

4.2 Marker (2)

Kinds of markers Square : G4Square Circle : G4Circle Text : G4Text

Constructors G4Circle (const G4Point3D& pos ) G4Square (const G4Point3D& pos) G4Text (const G4String& text, const

G4Point3D& pos)

Page 19: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

4.2 Marker (3)

Each marker class inherits class G4VMarker All access functions of G4VMarker are available. For

example, SetPosition( const G4Point3D& ) SetWorldSize( G4double real_3d_size) SetScreenSize( G4double 2d_size_pixel) etc.

Page 20: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Sample C++ Codes to define a small red circle as a marker :

//----- C++ source codes: An example of defining a red small maker

G4Circle circle(position); // Instantiate a circle with its 3D

// position. The argument "position"

// is defined as G4Point3D instance

circle.SetScreenDiameter (1.0); // Should be circle.SetScreenDiameter

// (1.0 * pixels) - to be implemented

circle.SetFillStyle (G4Circle::filled); // Make it a filled circle

G4Colour colour(1.,0.,0.); // Define red color

G4VisAttributes attribs(colour); // Define a red visualization attribute

circle.SetVisAttributes(attribs); // Assign the red attribute to the circle

//----- end of C++ source codes

Page 21: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

5. Visualisation Drivers

Visualisation drivers are interfaces to 3D graphics software

You can select your favorite one(s) depending on your purposes such as

Demo Preparing precise figures for journal papers Publication of results on Web Debugging geometry Etc

Page 22: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

5.1 Available Graphics Software

By default, Geant4 provides visualisation drivers, i.e. interfaces for

DAWN : Technical High-quality PostScript output OPACS: Interactivity, unified GUI OpenGL: Quick and flexible visualisation OpenInventor: Interactivity, virtual reality, etc RayTracer : Photo-realistic rendering VRML: Interactivity, 3D graphics on Web

Page 23: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

5.2 Available Visualisation Drivers and its Driver Name

DAWNFILE Fukui Renderer DAWN

OPENGLX OpenGL with Xlib OPACS OPACS (o packages) OIX OpenInventor with Xlib RAYTRACER JPEG files VRMLFILE VRML 1.0/2.0 viewer and file etc

Page 24: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

5.3 How to Use Visualisation Drivers Users can select/use visualisation driver(s) by setting

environmental variables before compilation: setenv G4VIS_USE_DRIVERNAME 1

Example (DAWNFILE, OpenGLXlib, and VRMLFILE drivers): setenv G4VIS_USE_DAWNFILE 1 setenv G4VIS_USE_OPENGLX 1 setenv G4VIS_USE_VRMLFILE 1

Note that Geant4 library should be installed with setting the corresponding environmental variables G4VIS_BUILD_DRIVERNAME_DRIVER to “1” beforehand , e.g.,

setenv G4VIS_BUILD_DAWNFILE_DRIVER 1

Page 25: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

6. main() Function (1)

Derive your own concrete class from G4VisManager according to your computer environments

Describe the followings in your main(): Include the header file of your visualisation manager Instantiate and initialize your visualisation manager.

The Initialize() method do the initialization Delete your visualisation manager at the end

You can use the C macro “G4VIS_USE”, which is automatically set if you incorporate a visualisation driver in compilation.

Page 26: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

6. main() Function (2) A typical form of main() function:

..... // Include the header file of your visualisation manager #ifdef G4VIS_USE #include “ExN03VisManager.hh”#endif ..... // Instantiate and initialize the visualisation manager #ifdef G4VIS_USE G4VisManager* visManager = new ExN03VisManager; visManager->Initialize();#endif..... // Delete the visualisation manager#ifdef G4VIS_USE delete visManager;#endif

Page 27: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7. Visualisation Commands

Here, we introduce some frequently-used built-in visualisation commands

For simplicity, we assume that the Geant4 executable is compiled, incorporating DAWNFILE, OPENGLX, and VRMLFILE drivers

setenv G4VIS_USE_DAWNFILE 1 setenv G4VIS_USE_OPENGLX 1 setenv G4VIS_USE_VRMLFILE 1

Page 28: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.1 Scene, Scene Hander, and Viewer

In order to use visualisation commands, you should understand ideas of “scene”, “scene handler”, and “viewer”.

Scene: A set of visualizable 3D data Scene handler: CG-data modeler, which uses raw data in a

scene Viewer: Image generator Each scene handler is assigned to a scene Each viewer is assigned to a scene handler “visualisation driver”

= “scene_handler” + “viewer”

Page 29: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.2 Steps of Visualisation Step 1: Create a scene handler and a viewer Step 2: Create an empty scene Step 3: Add 3D data to the created scene Step 4: Attach the current scene handler

to the current scene Step 5: Set camera parameters, drawing style

(wireframe/surface), etc Step 6: Make the viewer execute visualisation Step 7: Declare the end of visualisation

Page 30: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.3 An Example of Visualizing Detector # Invoke the OGLIX driver: Create a scene handler and a view

er./vis/open OGLIX

# Set camera and drawing style /vis/viewer/reset/vis/viewer/viewpointThetaPhi 70 20/vis/viewer/set/style wireframe

# Visualize of the whole detector geometry# The “/vis/drawVolume” create a scene, add the world volume # to it, and let viewer execute visualisation.. # The “/vis/viewer/update” declare the end of visualisation. /vis/drawVolume/vis/viewer/update

Page 31: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.4 An Example of Visualizing Events

# Store particle trajactories for visualisation/tracking/storeTrajectory

# Invoke the DAWNFILE driver: Create a scene handler and a viewer. /vis/open DAWNFILE

….. Canera setting, and drawing style selection, if necessary …..

# Create a new empty scene /vis/scene/create

# Add the world volume and trajectories to the current scene/vis/scene/add/volume/vis/scene/add/trajectories

# Let the viewer visualise the scene, and declare end of visualisation/run/beamOn 10

Page 32: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.5 /vis/open Command Command

Idle> /vis/open <driver_tag_name> The “driver_tag_name” is a name which shows

“driver name” + “mode” Action: Create a visualisation driver

In other words, create a scene hander and a viewer

Example: Creating the OPENGLX driver in the immediate mode:

Idle> /vis/open OGLIX How to list available driver_tag_name

Idle> help /vis/open or Idle> help /vis/sceneHandler/create

Page 33: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.6 /vis/viewer/… Commands

Commands Viewpoint setting:

Idle> /vis/viewer/viewpointThetaPhi <theta_deg> <phi_deg>

ZoomingIdle> /vis/viewer/zoom <scale_factor>

Initialization of camera parameters: Idle> /vis/viewer/reset

Page 34: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.7 /vis/viewer/set/style Command

Command Idle> /vis/viewer/set/style <style_name> The “style_name” is “wireframe”,

“surface”, etc

Page 35: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.8 /vis/drawVolume and/vis/viewer/update Commands

Commands: Idle> /vis/drawVolume <physical-volume-

name> (Default: world) Idle> /vis/viewer/update

Note that /vis/viewer/update should be executed to declare end of visualisation.

You can add visualisation commands of, say, coordinate axes between the two commands. For example,

Idle> /vis/drawVolume Idle> /vis/draw/axes <Ox> <Oy> <Oz> <length>Idle> /vis/viewer/update

Note: “/vis/draw/axes” will be renamed to “/vis/scene/add/axes”

Page 36: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

7.9 Commands to Visualize Events

Commands Idle> /tracking/storeTrajectory 1

Idle> /vis/scene/add/trajectoriesIdle> /run/beamOn <number_of_events>

Action: Automatic visualisation of events

Page 37: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Sample Visualisation (1)

Page 38: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Sample Visualisation (2)

Page 39: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

Sample Visualisation (3)

Page 40: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

8. Visualisation from C++ codes

It is also possible to perform visualisation from C++ codes

You can describe the visualisation commands in C++ codes via the ApplyCommand() method of the UI manager:

pUI->ApplyCommand(“/vis/…”);

Or you can use Draw() methods of visualizable classes

Page 41: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

9. Exercises

Read and execute sample visualisation macros for examples/novice/N03

The macro files are “exN03VisX.mac”, where X=0,1,2,…

Explanation of macros is all described in the macro files as comment lines.

Page 42: Visualisation and (G)UI Authors: Hajime Yoshida and Satoshi Tanaka.

10. Information

Geant4 User Guide (and source codes) README file:

geant4/source/visualisation/README Link collection

http://geant4.kek.jp/~tanaka/GEANT4/g4_vis_gui_linkpage.html

Information on Geant4 visualisation on Linux http://geant4.kek.jp/~tanaka/GEANT4/g4vis_on_linux.html