geant4 advanced visualizationgeant4.slac.stanford.edu/presentations/vis/g4visadvanced.pdf · 12...

48
12 January 2011 Geant4 Advanced Visualization J. Perl 1 DAWN OpenGL How to Control the Drawing Style and Filtering of Detector Geometry and Trajectories, plus a few other topics Geant4 Advanced Visualization Joseph Perl, SLAC HepRep/HepRApp Geant4 v9.4

Upload: ngominh

Post on 05-Jun-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

12 January 2011 Geant4 Advanced Visualization J. Perl 1

DAWN

OpenGL

How to Control the DrawingStyle and Filtering of Detector

Geometryand Trajectories,

plus a few other topics

Geant4 Advanced VisualizationJoseph Perl, SLACHepRep/HepRApp

Geant4 v9.4

12 January 2011 2Geant4 Advanced Visualization J. Perl

ContentsContents

Visualization AttributesVisualization Attributes to control color, line style, etc.to control color, line style, etc. toto represent particle type, charge, etc.represent particle type, charge, etc.

Trajectory ModelingTrajectory Modeling

Advanced Trajectory ModelingAdvanced Trajectory Modeling

Trajectory and Hit FilteringTrajectory and Hit Filtering

Additional TopicsAdditional Topics Controlling level of detail in geometryControlling level of detail in geometry Section planesSection planes Reviewing kept eventsReviewing kept events Standalone visualizationStandalone visualization

12 January 2011 3Geant4 Advanced Visualization J. Perl

How this Document Fits withHow this Document Fits withOther Tutorial MaterialsOther Tutorial Materials

This presentation can be used on its own, but gives the most comprehensiveThis presentation can be used on its own, but gives the most comprehensiveintroduction to Geant4 visualization when used as part of the following full set ofintroduction to Geant4 visualization when used as part of the following full set ofdocuments:documents: Introduction to Geant4 VisualizationIntroduction to Geant4 Visualization Geant4 Installation GuidesGeant4 Installation Guides Geant4 Visualization Tutorial using the HepRApp HepRep BrowserGeant4 Visualization Tutorial using the HepRApp HepRep Browser Geant4 Visualization Tutorial using the DAWN Event DisplayGeant4 Visualization Tutorial using the DAWN Event Display Geant4 Visualization Tutorial using the OpenGL Event DisplayGeant4 Visualization Tutorial using the OpenGL Event Display Geant4 Visualization CommandsGeant4 Visualization Commands Geant4 Advanced VisualizationGeant4 Advanced Visualization See the URLS at the end of this presentationSee the URLS at the end of this presentation

12 January 2011 4Geant4 Advanced Visualization J. Perl

Visualization AttributesVisualization Attributes

12 January 2011 5Geant4 Advanced Visualization J. Perl

Two Kinds of Visualization AttributesTwo Kinds of Visualization Attributes G4VisAttributes - carry standard drawing information:G4VisAttributes - carry standard drawing information:

ColorColor Visible/InvisibleVisible/Invisible Wireframe/Solid, etc.Wireframe/Solid, etc.

HepRep-Style Attributes - carry arbitrary, user-definedHepRep-Style Attributes - carry arbitrary, user-definedinformation:information: for trajectories:for trajectories:

momentummomentum particle type, etc.particle type, etc.

for hits:for hits: energyenergy electronics channel number, etc.electronics channel number, etc.

for geometry volumes:for geometry volumes: logical volume namelogical volume name material, etc.material, etc.

12 January 2011 6Geant4 Advanced Visualization J. Perl

G4VisAttributesG4VisAttributes

G4VisAttributes - carry standard drawing information:G4VisAttributes - carry standard drawing information: ColorColor Visible/InvisibleVisible/Invisible Wireframe/SolidWireframe/Solid etc.etc.

For the first half of Geant4For the first half of Geant4’’s life,s life,these were the only kind of Visualization Attributesthese were the only kind of Visualization Attributes

12 January 2011 7Geant4 Advanced Visualization J. Perl

LineStyle: WireFrame or SolidLineStyle: WireFrame or Solid

WireFrameWireFrame

SolidSolid

12 January 2011 8Geant4 Advanced Visualization J. Perl

Setting Geometry Vis Attributes from C++Setting Geometry Vis Attributes from C++

Create G4VisAttributes object and assign it to a volume:Create G4VisAttributes object and assign it to a volume: experimentalHall_logical -> SetVisAttributesexperimentalHall_logical -> SetVisAttributes

(G4VisAttributes::Invisible)(G4VisAttributes::Invisible)

12 January 2011 9Geant4 Advanced Visualization J. Perl

Setting Geometry Vis Attributes fromSetting Geometry Vis Attributes fromCommandsCommands

You can control the color, You can control the color, linewidth linewidth and other attributesand other attributesof detailed geometry drawing using /vis/geometryof detailed geometry drawing using /vis/geometrycommands such as:commands such as: /vis/geometry/set/colour </vis/geometry/set/colour <myvolumemyvolume> blue> blue For the full set of options, see the built-in command guidance.For the full set of options, see the built-in command guidance.

A few more examples:A few more examples: Change the line style of a particular volume to dashedChange the line style of a particular volume to dashed

/vis/geometry/set/lineStyle /vis/geometry/set/lineStyle <<myvolumemyvolume> dashed> dashed Change the line width of all volumes to 3Change the line width of all volumes to 3

/vis/geometry/set/lineWidth /vis/geometry/set/lineWidth all 3all 3 Change the number of line segments used to approximate aChange the number of line segments used to approximate a

circle for all volumes to 100circle for all volumes to 100 /vis/geometry/set/forceLineSegmentsPerCircle /vis/geometry/set/forceLineSegmentsPerCircle all 0 100all 0 100

12 January 2011 10Geant4 Advanced Visualization J. Perl

Setting Overall Vis Attributes from CommandsSetting Overall Vis Attributes from Commands

While the previously shown /vis/geometry commands allow themost detailed control over geometry drawing,the /vis/viewer commands allow you to control a few overall settings /vis/viewer/set/style wireframe /vis/viewer/set/globalLineWidthScale etc. see online command guidance for details

Watch out for fact that interactive commands do not override C++or /vis/geometry commands that have the “force” prefix, such as: experimentalHallVisAtt->SetForceWireframe(true) or /vis/geometry/set/forceSolid experimentalHall

12 January 2011 11Geant4 Advanced Visualization J. Perl

HepRep-Style AttributesHepRep-Style Attributes HepRep-Style Attributes - carry arbitrary, user-defined information:HepRep-Style Attributes - carry arbitrary, user-defined information:

for trajectories:for trajectories: momentummomentum particle type, etc.particle type, etc.

for hits:for hits: energyenergy electronics channel number, etc.electronics channel number, etc.

for geometry volumes:for geometry volumes: logical volume namelogical volume name material, etc.material, etc.

These attributes were added to Geant4 over the last few years toThese attributes were added to Geant4 over the last few years tosupport advanced features in the HepRep browsers (HepRApp,support advanced features in the HepRep browsers (HepRApp,Wired4 and FRED).Wired4 and FRED). display the attributes when you click on the graphics objectdisplay the attributes when you click on the graphics object perform cuts on these valuesperform cuts on these values label objects by these valueslabel objects by these values

12 January 2011 12Geant4 Advanced Visualization J. Perl

HepRApp: Pick to Show Physics AttributesHepRApp: Pick to Show Physics Attributes

Picked on thisvolume to show•Material•Density•Radlen•etc

Picked on thistrajectory to show•Particle ID•Charge•Momentum•etc.

12 January 2011 Geant4 Advanced Visualization J. Perl 13

HepRApp: Labeling by Any Attribute

12 January 2011 Geant4 Advanced Visualization J. Perl 14

HepRApp: Cut by Any Attribute

12 January 2011 15Geant4 Advanced Visualization J. Perl

HepRep Attributes beyond the HepRep BrowsersHepRep Attributes beyond the HepRep Browsers Other visualization drivers can also use the HepRep-style attributes:

Open Inventor will show the attributes when you click on the relevant object OpenGL also does this, with attributes shown in standard output window

Advanced visualization features described later in this presentation also useHepRep attributes and work for all Geant4 visualization drivers: Trajectory Modeling Trajectory and Hit Filtering

12 January 2011 16Geant4 Advanced Visualization J. Perl

Defining Your Own HepRep AttributesDefining Your Own HepRep Attributes While a useful set of attributes is already defined by default in the standardWhile a useful set of attributes is already defined by default in the standard

Geant4 trajectory, you are also free to define your own attributes:Geant4 trajectory, you are also free to define your own attributes: std::map<G4String,G4AttDef>* store =std::map<G4String,G4AttDef>* store =

G4AttDefStore::GetInstance("G4Trajectory",isNew);G4AttDefStore::GetInstance("G4Trajectory",isNew); G4String PN("PN");G4String PN("PN"); (*store)[PN] = G4AttDef(PN,"Particle Name","Physics","","G4String");(*store)[PN] = G4AttDef(PN,"Particle Name","Physics","","G4String"); G4String IMom("IMom");G4String IMom("IMom"); (*store)[IMom] = G4AttDef(IMom, "Momentum of track at start of trajectory",(*store)[IMom] = G4AttDef(IMom, "Momentum of track at start of trajectory",

"Physics","","G4ThreeVector");"Physics","","G4ThreeVector"); Then fill the attributes with lines such as:Then fill the attributes with lines such as:

std::vector<G4AttValue>* values = new std::vector<G4AttValue>;std::vector<G4AttValue>* values = new std::vector<G4AttValue>; values->push_back(G4AttValue("PN",ParticleName,""));values->push_back(G4AttValue("PN",ParticleName,"")); s.seekp(std::ios::beg);s.seekp(std::ios::beg); s << G4BestUnit(initialMomentum,"Energy") << std::ends;s << G4BestUnit(initialMomentum,"Energy") << std::ends; values->push_back(G4AttValue("IMom",c,""));values->push_back(G4AttValue("IMom",c,""));

See geant4/source/tracking/src/G4Trajectory.cc for a good example.See geant4/source/tracking/src/G4Trajectory.cc for a good example.

12 January 2011 17Geant4 Advanced Visualization J. Perl

Trajectory ModelingTrajectory Modeling

12 January 2011 18Geant4 Advanced Visualization J. Perl

Enhanced Trajectory DrawingEnhanced Trajectory Drawing Ability to change trajectory drawing model through interactiveAbility to change trajectory drawing model through interactive

commandscommands

Lets you, for example,Lets you, for example, declare that trajectories should be color-coded by charge,declare that trajectories should be color-coded by charge, then change to have themthen change to have them color-coded by particle type color-coded by particle type

Eliminates the most common reason users had to code their ownEliminates the most common reason users had to code their owntrajectory classestrajectory classes

Most examples include a vis.mac that demonstrates some of theseMost examples include a vis.mac that demonstrates some of thesefeaturesfeatures

12 January 2011 19Geant4 Advanced Visualization J. Perl

Creator Process

— muIoni— Decay— annihil— eIoni— brem

Momentum (MeV)— 0-1— 1-10— 10-20— 20-30— 30-50— 50+

Charge

— +1— 0— -1

Example A01, five events, drawBy various models

12 January 2011 20Geant4 Advanced Visualization J. Perl

Standard Models Supplied with Geant4Standard Models Supplied with Geant4

drawByChargedrawByCharge Default modelDefault model Colors trajectories according to chargeColors trajectories according to charge

drawByParticleIDdrawByParticleID Colors trajectories according to particle typeColors trajectories according to particle type All trajectories are colored grey by defaultAll trajectories are colored grey by default Configure to highlight chosen particle types with chosen colorsConfigure to highlight chosen particle types with chosen colors No limit on the number of particle types that can be highlightedNo limit on the number of particle types that can be highlighted

drawByOriginVolumedrawByOriginVolume Colors trajectories according to volume in which they originatedColors trajectories according to volume in which they originated for example, to highlight all particles that backscattered from a particular collimatorfor example, to highlight all particles that backscattered from a particular collimator

genericgeneric Draws all trajectories the sameDraws all trajectories the same

control over more than just color, including:control over more than just color, including: Whether to show trajectory as line, step points or bothWhether to show trajectory as line, step points or both width of trajectory lines, type of marker to use for points, point size, etc.width of trajectory lines, type of marker to use for points, point size, etc.

GreenGreen00

RedRed-1-1

BlueBlue+1+1

12 January 2011 21Geant4 Advanced Visualization J. Perl

Model ConfigurationModel Configuration You can create and configure multiple models through eitherYou can create and configure multiple models through either

Interactive commandsInteractive commands Compiled codeCompiled code

Interactive commandsInteractive commands Located inLocated in /vis/modeling/trajectories /vis/modeling/trajectories directorydirectory Possible to have multiple instances of given model typePossible to have multiple instances of given model type

e.g., toggle between two different ways of coloring by chargee.g., toggle between two different ways of coloring by charge List and select instantiated models with commands:List and select instantiated models with commands:

/vis/modeling/trajectories/list/vis/modeling/trajectories/list /vis/modeling/trajectories/select <model-instance-name>/vis/modeling/trajectories/select <model-instance-name>

Note that detailed help for a given model is not shown in the help system untilNote that detailed help for a given model is not shown in the help system untilyou have created an instance of that modelyou have created an instance of that model e.g., only after you do your first:e.g., only after you do your first:

/vis/modeling/trajectories/create/drawByCharge/vis/modeling/trajectories/create/drawByCharge will the help system will include details on drawByChargewill the help system will include details on drawByCharge

12 January 2011 22Geant4 Advanced Visualization J. Perl

Trajectory Modeling ExamplesTrajectory Modeling ExamplesExample macro#Standard setup/vis/scene/create/vis/open OGLIX/vis/scene/add/volume/vis/scene/add/trajectories/vis/scene/add/hits/vis/viewer/set/lightsThetaPhi 90. 0./vis/viewer/set/viewpointThetaPhi 150. 90./vis/viewer/set/style surface/vis/viewer/set/hiddenEdge true#Create drawByParticleID model, highlighting photons/vis/modeling/trajectories/create/drawByParticleID/vis/modeling/trajectories/drawByParticleID-0/set gammared/run/beamOn 1

#Create drawByCharge model, coloring neutrals white/vis/modeling/trajectories/create/drawByCharge/vis/modeling/trajectories/drawByCharge-0/set 1 blue/vis/modeling/trajectories/drawByCharge-0/set -1 red/vis/modeling/trajectories/drawByCharge-0/set 0 white/run/beamOn 1a

12 January 2011 23Geant4 Advanced Visualization J. Perl

More Sample Commands: drawByParticleID modelMore Sample Commands: drawByParticleID model# Create a drawByParticleID model named drawByParticleID-0# Create a drawByParticleID model named drawByParticleID-0/vis/modeling/trajectories/create/drawByParticleID/vis/modeling/trajectories/create/drawByParticleID

# Configure drawByParticleID-0 model# Configure drawByParticleID-0 model/vis/modeling/trajectories/drawByParticleID-0/set gamma red/vis/modeling/trajectories/drawByParticleID-0/set gamma red/vis/modeling/trajectories/drawByParticleID-0/set proton yellow/vis/modeling/trajectories/drawByParticleID-0/set proton yellow/vis/modeling/trajectories/drawByParticleID-0/setRGBA e+ 1 0 1 1/vis/modeling/trajectories/drawByParticleID-0/setRGBA e+ 1 0 1 1

Note that if you just select drawByParticleID but donNote that if you just select drawByParticleID but don’’t do anyt do any commands to set colors,commands to set colors,all particles will be grey.all particles will be grey.In future releases (starting with 9.4Beta1), default will be better:In future releases (starting with 9.4Beta1), default will be better:/vis/modeling/trajectories/drawByParticleID-0/set e- red/vis/modeling/trajectories/drawByParticleID-0/set e- red/vis/modeling/trajectories/drawByParticleID-0/set e+ blue/vis/modeling/trajectories/drawByParticleID-0/set e+ blue/vis/modeling/trajectories/drawByParticleID-0/set proton cyan/vis/modeling/trajectories/drawByParticleID-0/set proton cyan/vis/modeling/trajectories/drawByParticleID-0/set gamma green/vis/modeling/trajectories/drawByParticleID-0/set gamma green/vis/modeling/trajectories/drawByParticleID-0/set neutron yellow/vis/modeling/trajectories/drawByParticleID-0/set neutron yellow/vis/modeling/trajectories/drawByParticleID-0/set pi+ magenta/vis/modeling/trajectories/drawByParticleID-0/set pi+ magenta/vis/modeling/trajectories/drawByParticleID-0/set pi- magenta/vis/modeling/trajectories/drawByParticleID-0/set pi- magenta/vis/modeling/trajectories/drawByParticleID-0/set pi0 magenta/vis/modeling/trajectories/drawByParticleID-0/set pi0 magenta

12 January 2011 24Geant4 Advanced Visualization J. Perl

More Sample Commands: drawByCharge ModelMore Sample Commands: drawByCharge Modeland Toggling Between Two Modelsand Toggling Between Two Models

# Create a drawByCharge model (will get default name of drawCharge-0)# Create a drawByCharge model (will get default name of drawCharge-0)/vis/modeling/trajectories/create/drawByCharge/vis/modeling/trajectories/create/drawByCharge

# Create another drawByCharge model with an explicit name of testChargeModel# Create another drawByCharge model with an explicit name of testChargeModel/vis/modeling/trajectories/create/drawByCharge testChargeModel/vis/modeling/trajectories/create/drawByCharge testChargeModel

# Configure these two drawByCharge models and# Configure these two drawByCharge models and visualize using either one of themvisualize using either one of them

# Configure drawByCharge-0 model# Configure drawByCharge-0 model/vis/modeling/trajectories/drawByCharge-0/set 1 red/vis/modeling/trajectories/drawByCharge-0/set 1 red/vis/modeling/trajectories/drawByCharge-0/set -1 red/vis/modeling/trajectories/drawByCharge-0/set -1 red/vis/modeling/trajectories/drawByCharge-0/set 0 white/vis/modeling/trajectories/drawByCharge-0/set 0 white

# Configure testCharge model (showing different way of setting colors)# Configure testCharge model (showing different way of setting colors)/vis/modeling/trajectories/testChargeModel/setRGBA /vis/modeling/trajectories/testChargeModel/setRGBA 1 0 1 1 11 0 1 1 1/vis/modeling/trajectories/testChargeModel/setRGBA -1 0.5 0.5 0.5 1/vis/modeling/trajectories/testChargeModel/setRGBA -1 0.5 0.5 0.5 1/vis/modeling/trajectories/testChargeModel/setRGBA 0 1 1 0 1/vis/modeling/trajectories/testChargeModel/setRGBA 0 1 1 0 1

# List available models# List available models/vis/modeling/trajectories/list/vis/modeling/trajectories/list

# select drawByCharge-0 to be current# select drawByCharge-0 to be current/vis/modeling/trajectories/select drawByCharge-0/vis/modeling/trajectories/select drawByCharge-0

12 January 2011 25Geant4 Advanced Visualization J. Perl

Trajectory Modeling by HepRep-Style AttributesTrajectory Modeling by HepRep-Style Attributes

/vis/modeling/trajectories/create/drawByAttribute/vis/modeling/trajectories/create/drawByAttribute/vis/modeling/trajectories/drawByCharge-0/verbose true/vis/modeling/trajectories/drawByCharge-0/verbose true/vis/modeling/trajectories/drawByCharge-0/setAttribute CPN/vis/modeling/trajectories/drawByCharge-0/setAttribute CPN

/vis/modeling/trajectories/drawByAttribute-0/addValue brem_key eBrem/vis/modeling/trajectories/drawByAttribute-0/addValue brem_key eBrem/vis/modeling/trajectories/drawByAttribute-0/addValue annihil_key annihil/vis/modeling/trajectories/drawByAttribute-0/addValue annihil_key annihil/vis/modeling/trajectories/drawByAttribute-0/addValue decay_key Decay/vis/modeling/trajectories/drawByAttribute-0/addValue decay_key Decay/vis/modeling/trajectories/drawByAttribute-0/addValue muIon_key muIoni/vis/modeling/trajectories/drawByAttribute-0/addValue muIon_key muIoni/vis/modeling/trajectories/drawByAttribute-0/addValue eIon_key eIoni/vis/modeling/trajectories/drawByAttribute-0/addValue eIon_key eIoni

/vis/modeling/trajectories/drawByAttribute-0/brem_key/setLineColour red/vis/modeling/trajectories/drawByAttribute-0/brem_key/setLineColour red/vis/modeling/trajectories/drawByAttribute-0/annihil_key/setLineColour green/vis/modeling/trajectories/drawByAttribute-0/annihil_key/setLineColour green/vis/modeling/trajectories/drawByAttribute-0/decay_key/setLineColour cyan/vis/modeling/trajectories/drawByAttribute-0/decay_key/setLineColour cyan/vis/modeling/trajectories/drawByAttribute-0/eIon_key/setLineColour yellow/vis/modeling/trajectories/drawByAttribute-0/eIon_key/setLineColour yellow/vis/modeling/trajectories/drawByAttribute-0/muIon_key/setLineColour magenta/vis/modeling/trajectories/drawByAttribute-0/muIon_key/setLineColour magenta

Draw by theattribute calledCPN

Configurevisualisationparameters

Select relevantattribute values

For even greater flexibility, you can model the trajectory based on any ofFor even greater flexibility, you can model the trajectory based on any ofthe HepRep-style attributes, whether it is one ofthe HepRep-style attributes, whether it is one of the default ones orthe default ones or ananattribute that you have defined for yourself.attribute that you have defined for yourself. E.g., set color based the value of the attribute CPNE.g., set color based the value of the attribute CPN (for (for ““creator process namecreator process name””))

12 January 2011 26Geant4 Advanced Visualization J. Perl

Creator Process

— muIoni— Decay— annihil— eIoni— brem

Momentum (MeV)— 0-1— 1-10— 10-20— 20-30— 30-50— 50+

Example A01, five events, drawByAttribute models

12 January 2011 27Geant4 Advanced Visualization J. Perl

Trajectory Lines, StepTrajectory Lines, Step Points, Regular and SmoothPoints, Regular and Smooth

Yellow are the actual step points used by Geant4Magenta are auxiliary points added just for purposes of visualization

12 January 2011 28Geant4 Advanced Visualization J. Perl

Modeling Trajectory as Line, Step Points or BothModeling Trajectory as Line, Step Points or Both In the discussion of models up to now, we’ve only shown you how to set the

color, but a model can include many more options including whether to showthe trajectory as a line, a set of step points or both: setDrawLine * Set draw line command setDrawLine * Set draw line command setLineVisible * Set line visibility command setLineVisible * Set line visibility command setLineColour * Set colour through a string setLineColour * Set colour through a string setLineColourRGBA * Set colour through red, green, blue and alpha components setLineColourRGBA * Set colour through red, green, blue and alpha components setDrawStepPts * Set draw step points command setDrawStepPts * Set draw step points command setStepPtsVisible * Set step points colour command setStepPtsVisible * Set step points colour command setStepPtsColour * Set colour through a string setStepPtsColour * Set colour through a string setStepPtsColourRGBA * Set colour through red, green, blue and alpha components setStepPtsColourRGBA * Set colour through red, green, blue and alpha components setStepPtsSize * Set step points colour command setStepPtsSize * Set step points colour command setStepPtsType * Set step points type. setStepPtsType * Set step points type. setStepPtsFillStyle * Set step fill style type. setStepPtsFillStyle * Set step fill style type. (the following items relate to special kind of points discussed later under (the following items relate to special kind of points discussed later under ““smooth trajectorysmooth trajectory””)) setDrawAuxPts * Set draw auxiliary points command setDrawAuxPts * Set draw auxiliary points command setAuxPtsVisible * Set auxiliary points visibility command setAuxPtsVisible * Set auxiliary points visibility command setAuxPtsColour * Set colour through a string setAuxPtsColour * Set colour through a string setAuxPtsColourRGBA * Set colour through red, green, blue and alpha components setAuxPtsColourRGBA * Set colour through red, green, blue and alpha components setAuxPtsSize * Set auxiliary points size command setAuxPtsSize * Set auxiliary points size command setAuxPtsType * Set auxiliary points type. setAuxPtsType * Set auxiliary points type. setAuxPtsFillStyle * Set auxiliary fill style. setAuxPtsFillStyle * Set auxiliary fill style.

12 January 2011 29Geant4 Advanced Visualization J. Perl

Sample Commands: generic trajectory modelSample Commands: generic trajectory model# Create a generic model (will get default name of generic-0)# Create a generic model (will get default name of generic-0)# From here we can set overall defaults for things like line color,# From here we can set overall defaults for things like line color,# # whether to show step points whether to show step points or just the trajectory line, etc.or just the trajectory line, etc./vis/modeling/trajectories/create/generic/vis/modeling/trajectories/create/generic

# Configure the generic model to colour all trajectories cyan and to show step points# Configure the generic model to colour all trajectories cyan and to show step points/vis/modeling/trajectories/generic-0/default/setDrawStepPts true/vis/modeling/trajectories/generic-0/default/setDrawStepPts true/vis/modeling/trajectories/generic-0/default/setStepPtsSize 16/vis/modeling/trajectories/generic-0/default/setStepPtsSize 16/vis/modeling/trajectories/generic-0/default/setLineColour cyan/vis/modeling/trajectories/generic-0/default/setLineColour cyan/vis/modeling/trajectories/generic-0/default/setStepPtsColour red/vis/modeling/trajectories/generic-0/default/setStepPtsColour red

12 January 2011 30Geant4 Advanced Visualization J. Perl

Advanced Trajectory ModelingAdvanced Trajectory Modeling

12 January 2011 31Geant4 Advanced Visualization J. Perl

Controlling Model from Compiled CodeControlling Model from Compiled Code

Instantiate modelInstantiate model Configure modelConfigure model Register with visualizationRegister with visualization

managermanager

main.cc// Create and initialise visualization managerG4VisManager* visManager = new G4VisExecutive;visManager->Initialize();

// Create new drawByParticleID modelG4TrajectoryDrawByParticleID* model = new G4TrajectoryDrawByParticleID;

// Configure modelmodel->SetDefault("cyan");model->Set("gamma", "green");model->Set("e+", "magenta");model->Set("e-", G4Color(0.3, 0.3, 0.3));

//Register model with visualization managervisManager->RegisterModel(model);

12 January 2011 32Geant4 Advanced Visualization J. Perl

Defining Your Own ModelDefining Your Own Model New trajectory models must inherit from G4VTrajectoryModel andNew trajectory models must inherit from G4VTrajectoryModel and

implement these pure virtual methods:implement these pure virtual methods: virtual void Draw(const G4VTrajectory&, G4int i_mode = 0) const = 0;virtual void Draw(const G4VTrajectory&, G4int i_mode = 0) const = 0; virtual void Print(std::ostream& ostr) const = 0; virtual void Print(std::ostream& ostr) const = 0;

New models can be used directly in compiled codeNew models can be used directly in compiled code Need to be registered with visualization managerNeed to be registered with visualization manager

main.cc// Create custom modelMyCustomTrajectoryModel* myModel = new MyCustomTrajectoryModel("custom");

// Configure it if necessary and then register with G4VisManager...visManager->RegisterModel(myModel)

12 January 2011 33Geant4 Advanced Visualization J. Perl

To Make User Defined Model Available fromTo Make User Defined Model Available fromInteractive CommandsInteractive Commands

You will need to write Messenger classesYou will need to write Messenger classes Messengers to configure the model should inherit from G4VModelCommand.Messengers to configure the model should inherit from G4VModelCommand.

The concrete trajectory model type should be used for the templateThe concrete trajectory model type should be used for the templateparameterparameter

and a Factory classand a Factory class A factory class responsible for the model and associated messenger creationA factory class responsible for the model and associated messenger creation

must also be written. The factory should inherit from G4VModelFactory.must also be written. The factory should inherit from G4VModelFactory.The abstract model type should be used for the template parameter, e.g.:The abstract model type should be used for the template parameter, e.g.:

G4ModelCommandDrawByParticleIDSet.ccclass G4ModelCommandDrawByParticleIDSet : public

: G4VModelCommand<G4TrajectoryDrawByParticleID> { ... };

G4TrajectoryDrawByChargeFactory.ccclass G4TrajectoryDrawByChargeFactory : public G4VModelFactory<G4VTrajectoryModel> { ... };

12 January 2011 34Geant4 Advanced Visualization J. Perl

Construct the Model and Associated MessengersConstruct the Model and Associated Messengers

G4TrajectoryDrawByParticleIDFactory.ccModelAndMessengersG4TrajectoryDrawByParticleIDFactory::Create(const G4String& placement, const G4String& name) { // Create model with given name G4TrajectoryDrawByParticleID* model = new G4TrajectoryDrawByParticleID(name);

// Create associated messengers with commands in ``placement'’ command directory. Messengers messengers; messengers.push_back(new G4ModelCommandDrawByParticleIDSet(model, placement)); ... return ModelAndMessengers(model, messengers);}

G4VisExecutive.ccG4VisExecutive::RegisterModelFactories() {... RegisterModelFactory(new G4TrajectoryDrawByParticleIDFactory());}

12 January 2011 35Geant4 Advanced Visualization J. Perl

Trajectory and Hit FilteringTrajectory and Hit Filtering

12 January 2011 36Geant4 Advanced Visualization J. Perl

Trajectory and Hit FilteringTrajectory and Hit Filtering Display user-defined subset of trajectoriesDisplay user-defined subset of trajectories

Solves problems with overly busy graphics or excessively large graphics filesSolves problems with overly busy graphics or excessively large graphics files

Similar structure to enhanced trajectory drawingSimilar structure to enhanced trajectory drawing Set of simple filter modelsSet of simple filter models Similar Interactive creation/configuration structureSimilar Interactive creation/configuration structure

chargeFilterchargeFilter FiltersFilters trajectories according to charge trajectories according to charge

particleFilterparticleFilter Filters trajectories according to particle typeFilters trajectories according to particle type

originVolumeFilteroriginVolumeFilter Filters trajectories according to volume in which they originatedFilters trajectories according to volume in which they originated

Project Lead: Jane TinslayProject Lead: Jane Tinslay

12 January 2011 37Geant4 Advanced Visualization J. Perl

Momentum (MeV)— 0-2.5— 2.5-5— 5-7.5— 7.5-10— 10-10.25— 12.5+

HandsOn5, McGill tutorial, 1000 events, Attribute Filter

IMag > 2.5 MeV

IMag > 2.5 MeV,particle = gamma

12 January 2011 38Geant4 Advanced Visualization J. Perl

Trajectory FilteringTrajectory Filtering Simplest example:Simplest example:

/vis/filtering/trajectories/create/particleFilter /vis/filtering/trajectories/particleFilter-0/add e- will cause everything except electrons to be filtered out

You can chain multiple filtersYou can chain multiple filters e.g., filter out gammase.g., filter out gammas and filter out particles with momentum less than 100 MeVand filter out particles with momentum less than 100 MeV

Two modes of filtering:Two modes of filtering: Important issue when working with those visualization drivers that allow you toImportant issue when working with those visualization drivers that allow you to

turn visibility on and off from the vis application (HepRApp or OpenInventor)turn visibility on and off from the vis application (HepRApp or OpenInventor) One mode has rejected trajectories marked invisible but still sent to vis appOne mode has rejected trajectories marked invisible but still sent to vis app

user can toggle them back to visible from within the vis appuser can toggle them back to visible from within the vis app but if there is a very large number of these invisible trajectories,but if there is a very large number of these invisible trajectories,

application may be slowed down and files may be very largeapplication may be slowed down and files may be very large Other mode has rejected trajectories entirely omittedOther mode has rejected trajectories entirely omitted

user cannot toggle them back to visible from within the vis appuser cannot toggle them back to visible from within the vis app but application stays fast and files stay smallbut application stays fast and files stay small

12 January 2011 39Geant4 Advanced Visualization J. Perl

Filtering ExampleFiltering Example

/vis/modeling/trajectories/drawByAttribute-0/setAttribute IMag/vis/modeling/trajectories/drawByAttribute-0/setAttribute IMag/vis/modeling/trajectories/drawByAttribute-0/addInterval interval1 0.0 keV 2.5MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval1 0.0 keV 2.5MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval2 2.5 MeV 5 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval2 2.5 MeV 5 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval3 5 MeV 7.5 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval3 5 MeV 7.5 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval4 7.5 MeV 10 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval4 7.5 MeV 10 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval5 10 MeV 12.5 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval5 10 MeV 12.5 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval6 12.5 MeV 10000 MeV/vis/modeling/trajectories/drawByAttribute-0/addInterval interval6 12.5 MeV 10000 MeV

/vis/modeling/trajectories/drawByAttribute-0/interval1/setLineColourRGBA 0.8 0 0.8 1/vis/modeling/trajectories/drawByAttribute-0/interval1/setLineColourRGBA 0.8 0 0.8 1/vis/modeling/trajectories/drawByAttribute-0/interval2/setLineColourRGBA 0.23 0.41 1 1/vis/modeling/trajectories/drawByAttribute-0/interval2/setLineColourRGBA 0.23 0.41 1 1/vis/modeling/trajectories/drawByAttribute-0/interval3/setLineColourRGBA 0 1 0 1/vis/modeling/trajectories/drawByAttribute-0/interval3/setLineColourRGBA 0 1 0 1/vis/modeling/trajectories/drawByAttribute-0/interval4/setLineColourRGBA 1 1 0 1/vis/modeling/trajectories/drawByAttribute-0/interval4/setLineColourRGBA 1 1 0 1/vis/modeling/trajectories/drawByAttribute-0/interval5/setLineColourRGBA 1 0.3 0 1/vis/modeling/trajectories/drawByAttribute-0/interval5/setLineColourRGBA 1 0.3 0 1/vis/modeling/trajectories/drawByAttribute-0/interval6/setLineColourRGBA 1 0 0 1/vis/modeling/trajectories/drawByAttribute-0/interval6/setLineColourRGBA 1 0 0 1

/vis/filtering/trajectories/create/attributeFilter/vis/filtering/trajectories/create/attributeFilter/vis/filtering/trajectories/attributeFilter-0/setAttribute IMag/vis/filtering/trajectories/attributeFilter-0/setAttribute IMag/vis/filtering/trajectories/attributeFilter-0/addInterval 2.5 MeV 1000 MeV/vis/filtering/trajectories/attributeFilter-0/addInterval 2.5 MeV 1000 MeV

/vis/filtering/trajectories/create/particleFilter/vis/filtering/trajectories/create/particleFilter/vis/filtering/trajectories/particleFilter-0/add gamma/vis/filtering/trajectories/particleFilter-0/add gamma

Momentuminterval basedcolour scale

Momentumfilter

Gamma filter

Configurevisualisationproperties

Momentumfilter

12 January 2011 40Geant4 Advanced Visualization J. Perl

Hit FilteringHit Filtering The Attribute-Based filtering discussed above for Trajectories wasThe Attribute-Based filtering discussed above for Trajectories was

implemented generically so that it can aimplemented generically so that it can apply to any class which implementspply to any class which implementsthe Geant4 generic attributes method:the Geant4 generic attributes method:

Whatever your Hit class, you can basically get interactive hit filtering for freeWhatever your Hit class, you can basically get interactive hit filtering for free

To activate, add a filter call to G4VVisManager in Draw method of hit classTo activate, add a filter call to G4VVisManager in Draw method of hit class

const std::map<G4String,G4AttDef>* GetAttDefs() const;std::vector<G4AttValue>* CreateAttValues() const;

void MyHit::Draw() { … if (! pVVisManager->FilterHit(*this)) return; …

12 January 2011 41Geant4 Advanced Visualization J. Perl

AdditionalAdditional TopicsTopics

12 January 2011 42Geant4 Advanced Visualization J. Perl

Controlling Detail Level of DetectorControlling Detail Level of DetectorGeometryGeometry

By default, /vis/drawVolume will draw the entire detector geometry.By default, /vis/drawVolume will draw the entire detector geometry.This is equivalent to the commands:This is equivalent to the commands: /vis/scene/create/vis/scene/create /vis/scene/add/volume world/vis/scene/add/volume world

You can specify additional arguments to limit the amount ofYou can specify additional arguments to limit the amount ofgeometry detail shown:geometry detail shown: /vis/scene/add/volume [<physical-volume-name>] [<copy-no>] [<depth-/vis/scene/add/volume [<physical-volume-name>] [<copy-no>] [<depth-

of-descending>]of-descending>] 1st parameter: volume name1st parameter: volume name

(default "world").(default "world"). 2nd parameter: copy number2nd parameter: copy number

(default -1 meaning first occurrence of physical-volume-name is selected.(default -1 meaning first occurrence of physical-volume-name is selected. 3rd parameter: depth of descending geometry hierarchy3rd parameter: depth of descending geometry hierarchy

(default G4Scene::UNLIMITED (-1)).(default G4Scene::UNLIMITED (-1)).

Still more arguments can be given to specify a clipping volume.Still more arguments can be given to specify a clipping volume. vis/scene/add/volume world -1 -1 box km 0 1 0 1 0 1vis/scene/add/volume world -1 -1 box km 0 1 0 1 0 1

will draw the world with the positive octant cut away.will draw the world with the positive octant cut away.

12 January 2011 43Geant4 Advanced Visualization J. Perl

Even more Control over Level of Detail inEven more Control over Level of Detail inDetector GeometryDetector Geometry

Additional commands allow finer control including whether or not toAdditional commands allow finer control including whether or not todraw Boolean components, voxels and readout geometries:draw Boolean components, voxels and readout geometries: /vis/specify <logical-volume-name> [depth-of-descent] [<booleans-flag>]/vis/specify <logical-volume-name> [depth-of-descent] [<booleans-flag>]

[<voxels-flag>] [<readout-flag>][<voxels-flag>] [<readout-flag>] /vis/scene/add/logicalVolume <logical-volume-name> [<depth-of-/vis/scene/add/logicalVolume <logical-volume-name> [<depth-of-

descending>] [<voxels-flag>] [<readout-flag>]descending>] [<voxels-flag>] [<readout-flag>]

Culling allows you to specify that covered daughters or low densityCulling allows you to specify that covered daughters or low densityvolumes are omitted:volumes are omitted: /vis/viewer/set/culling global|coveredDaughters|invisible|density/vis/viewer/set/culling global|coveredDaughters|invisible|density

[true|false] [density] [unit][true|false] [density] [unit] HepRepFile will still include these culled objects, but just make themHepRepFile will still include these culled objects, but just make them

initially invisible.initially invisible. Idea is that you might later decide you want to see these.Idea is that you might later decide you want to see these. To really omit them from the HepRepFile, as you may wish to do to make theTo really omit them from the HepRepFile, as you may wish to do to make the

file smaller:file smaller: /vis/heprep/setCullInvisibles /vis/heprep/setCullInvisibles truetrue

12 January 2011 44Geant4 Advanced Visualization J. Perl

Section Planes / CutawaysSection Planes / Cutaways

Some drivers allow you to section the view, that is, cut itSome drivers allow you to section the view, that is, cut itaway along a specified plane (but this generally worksaway along a specified plane (but this generally worksonly for simple geometries)only for simple geometries) /vis/viewer/set/sectionPlane [on|off]/vis/viewer/set/sectionPlane [on|off]

<3 vector of point> [unit of point] <3 vector of plane normal> <3 vector of point> [unit of point] <3 vector of plane normal> e.g., for a y-z plane at x = 1 cm:e.g., for a y-z plane at x = 1 cm:

/vis/viewer/set/sectionPlane on 1 0 0 cm 1 0 0/vis/viewer/set/sectionPlane on 1 0 0 cm 1 0 0

12 January 2011 45Geant4 Advanced Visualization J. Perl

Reviewing Kept EventsReviewing Kept Events If you have accumulated several events in your visualization,If you have accumulated several events in your visualization,

you can still go back afterwards and view the events individually.you can still go back afterwards and view the events individually.For each event, you can execute various vis commands to rotate, zoom,For each event, you can execute various vis commands to rotate, zoom,output to a different vis driver, etc.output to a different vis driver, etc. /vis/reviewKeptEvents/vis/reviewKeptEvents Each time you type Each time you type ““continuecontinue””, you will get to the next kept event., you will get to the next kept event.

To quit reviewing events:To quit reviewing events: /vis/abortReviewKeptEvents/vis/abortReviewKeptEvents and then again type and then again type ““continuecontinue””

You can also use a command or c++ calls to force keeping of specificYou can also use a command or c++ calls to force keeping of specificevents regardless of how visualization is accumulating them.events regardless of how visualization is accumulating them. e.g., keep events based on a particular hit or trigger patterne.g., keep events based on a particular hit or trigger pattern

From the command line:From the command line: /event/keepCurrentEvent/event/keepCurrentEvent

From C++From C++ G4EventManager->G4EventManager->KeepTheCurrentEventKeepTheCurrentEvent()()

This feature makes it easy to do a large run and then recall for visualizationThis feature makes it easy to do a large run and then recall for visualizationonly those events that are of interestonly those events that are of interest

12 January 2011 46Geant4 Advanced Visualization J. Perl

Reviewing Kept Events flagged from C++Reviewing Kept Events flagged from C++

If youIf you’’re using C++ to flag which events to keep, so that you can dore using C++ to flag which events to keep, so that you can doa large run but only visualize a few special events, mix eventa large run but only visualize a few special events, mix eventkeeping with the vis disable/enable commands, as follows:keeping with the vis disable/enable commands, as follows: /vis/open HepRepFile/vis/open HepRepFile /vis/drawVolume/vis/drawVolume /vis/scene/add/trajectories/vis/scene/add/trajectories /vis/disable/vis/disable /run/beamOn 1000/run/beamOn 1000 /vis/enable/vis/enable /vis/reviewKeptEvents/vis/reviewKeptEvents

In this way, the visualization is disabled when you first run throughIn this way, the visualization is disabled when you first run throughthe 1000 events, and is enabled only when you are reviewing thethe 1000 events, and is enabled only when you are reviewing thesmall number of special events that you flagged from your C++ call:small number of special events that you flagged from your C++ call: G4EventManager->G4EventManager->KeepTheCurrentEventKeepTheCurrentEvent()()

12 January 2011 47Geant4 Advanced Visualization J. Perl

Geant4 Visualization in Standalone ModeGeant4 Visualization in Standalone Mode The Geant4 Visualization system can be used on its own -The Geant4 Visualization system can be used on its own -

without the rest of Geant4.without the rest of Geant4. Build something Build something ““by handby hand”” from the Geant4 geometry primitives and from the Geant4 geometry primitives and

placement apparatus, but without any of the main parts of Geant4placement apparatus, but without any of the main parts of Geant4such as detector construction, run manager or physics list.such as detector construction, run manager or physics list.

Still preserves all of the interactive apparatus of the visualization system.Still preserves all of the interactive apparatus of the visualization system. See the example: /examples/extended/visualization/standaloneSee the example: /examples/extended/visualization/standalone

// Simple box...// Simple box...pVisManager->Draw(pVisManager->Draw( G4Box(G4Box("box""box",,22*m,*m,22*m,*m,22*m), *m),

G4VisAttributes(G4Colour(G4VisAttributes(G4Colour(11,,11,,00)));)));

// Boolean solid...// Boolean solid...G4Box boxA(G4Box boxA("boxA""boxA",,33*m,*m,33*m,*m,33*m);*m);G4Box boxB(G4Box boxB("boxB""boxB",,11*m,*m,11*m,*m,11*m);*m);G4SubtractionSolid subtracted(G4SubtractionSolid subtracted( "subtracted_boxes""subtracted_boxes",&boxA,&boxB,,&boxA,&boxB,

G4Translate3D(G4Translate3D(33*m,*m,33*m,*m,33*m));*m));pVisManager->Draw(pVisManager->Draw( subtracted,subtracted,

G4VisAttributes(G4Colour(G4VisAttributes(G4Colour(00,,11,,11)),)),G4Translate3D(G4Translate3D(-6-6*m,*m,-6-6*m,*m,-6-6*m));*m));

12 January 2011 48Geant4 Advanced Visualization J. Perl

Geant4 Visualization ResourcesGeant4 Visualization ResourcesGeant4 Installation Guideshttp://geant4.slac.stanford.edu/installationHands on HepRApp Tutorialhttp://geant4.slac.stanford.edu/Presentations/vis/G4HepRAppTutorial/G4HepRAppTutorial.htmlHands on DAWN Tutorialhttp://geant4.slac.stanford.edu/Presentations/vis/G4DAWNTutorial/G4DAWNTutorial.htmlHands on OpenGL Tutorialhttp://geant4.slac.stanford.edu/Presentations/vis/G4OpenGLTutorial/G4OpenGLTutorial.htmlGeant4 Visualization Commandshttp://geant4.slac.stanford.edu/Presentations/vis/G4VisCommands.ppt (and .pdf)Geant4 Advanced Visualizationhttp://geant4.slac.stanford.edu/Presentations/vis/G4VisAdvanced.ppt (and .pdf)How to Make a Moviehttp://geant4.slac.stanford.edu/Presentations/vis/HowToMakeAMovie.ppt (and .pdf)

Visualization Chapter of the Geant4 User’s Guide for Application Developershttp://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/List of Visualization Commands:http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/AllResources/Control/UIcommands/_vis_.html

For Questions or Comments: Geant4 Visualization Online Forum:http://geant4-hn.slac.stanford.edu:5090/HyperNews/public/get/visualization.html