View
220
Download
4
Tags:
Embed Size (px)
Citation preview
12 January 2011 Geant4 Advanced Visualization J. Perl 1
DAWN
OpenGL
How to Control the Drawing Style and Filtering of Detector
Geometryand Trajectories,
plus a few other topics
Geant4 Advanced Visualization
Joseph 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. to represent particle type, charge, etc.to 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 comprehensive This presentation can be used on its own, but gives the most comprehensive introduction to Geant4 visualization when used as part of the following full set of introduction to Geant4 visualization when used as part of the following full set of documents: 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-defined HepRep-Style Attributes - carry arbitrary, user-defined information: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 Geant4’s life,For the first half of Geant4’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 -> SetVisAttributes experimentalHall_logical -> SetVisAttributes
(G4VisAttributes::Invisible)(G4VisAttributes::Invisible)
12 January 2011 9Geant4 Advanced Visualization J. Perl
Setting Geometry Vis Attributes from Setting Geometry Vis Attributes from CommandsCommands
You can control the color, linewidth and other attributes You can control the color, linewidth and other attributes of detailed geometry drawing using /vis/geometry of detailed geometry drawing using /vis/geometry commands such as:commands such as: /vis/geometry/set/colour <myvolume> blue/vis/geometry/set/colour <myvolume> 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 <myvolume> dashed/vis/geometry/set/lineStyle <myvolume> dashed Change the line width of all volumes to 3Change the line width of all volumes to 3
/vis/geometry/set/lineWidth all 3/vis/geometry/set/lineWidth all 3 Change the number of line segments used to approximate a Change the number of line segments used to approximate a
circle for all volumes to 100circle for all volumes to 100 /vis/geometry/set/forceLineSegmentsPerCircle all 0 100/vis/geometry/set/forceLineSegmentsPerCircle all 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 the most 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 to support These attributes were added to Geant4 over the last few years to support advanced features in the HepRep browsers (HepRApp, Wired4 and advanced features in the HepRep browsers (HepRApp, Wired4 and FRED).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 this trajectory 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 use HepRep 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 standard While 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 interactive Ability 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 them color-coded by particle typethen change to have them color-coded by particle type
Eliminates the most common reason users had to code their own Eliminates the most common reason users had to code their own trajectory classestrajectory classes
Most examples include a vis.mac that demonstrates some of these Most examples include a vis.mac that demonstrates some of these featuresfeatures
19Geant4 Advanced Visualization J. Perl12 January 2011
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.
+1+1 BlueBlue
-1-1 RedRed
00 GreenGreen
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 until Note that detailed help for a given model is not shown in the help system until you 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 gamma red/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 don’t do any commands to set colors,Note that if you just select drawByParticleID but don’t do any 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 visualize using either one of them# Configure these two drawByCharge models and visualize 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 1 0 1 1 1/vis/modeling/trajectories/testChargeModel/setRGBA 1 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 the attribute called CPN
Configure visualisation parameters
Select relevant attribute 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 of the default ones or anthe HepRep-style attributes, whether it is one of the default ones or anattribute that you have defined for yourself.attribute that you have defined for yourself.
E.g., set color based the value of the attribute CPN (for “creator process name”)E.g., set color based the value of the attribute CPN (for “creator process name”)
26Geant4 Advanced Visualization J. Perl12 January 2011
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, Step Points, Regular and SmoothTrajectory Lines, Step Points, Regular and Smooth
Yellow are the actual step points used by Geant4
Magenta 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 show the trajectory as a line, a set of step points or both:
setDrawLine * Set draw line commandsetDrawLine * Set draw line command setLineVisible * Set line visibility commandsetLineVisible * Set line visibility command setLineColour * Set colour through a stringsetLineColour * Set colour through a string setLineColourRGBA * Set colour through red, green, blue and alpha componentssetLineColourRGBA * Set colour through red, green, blue and alpha components setDrawStepPts * Set draw step points commandsetDrawStepPts * Set draw step points command setStepPtsVisible * Set step points colour commandsetStepPtsVisible * Set step points colour command setStepPtsColour * Set colour through a stringsetStepPtsColour * Set colour through a string setStepPtsColourRGBA * Set colour through red, green, blue and alpha componentssetStepPtsColourRGBA * Set colour through red, green, blue and alpha components setStepPtsSize * Set step points colour commandsetStepPtsSize * 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 “smooth trajectory”)(the following items relate to special kind of points discussed later under “smooth trajectory”) setDrawAuxPts * Set draw auxiliary points commandsetDrawAuxPts * Set draw auxiliary points command setAuxPtsVisible * Set auxiliary points visibility commandsetAuxPtsVisible * Set auxiliary points visibility command setAuxPtsColour * Set colour through a stringsetAuxPtsColour * Set colour through a string setAuxPtsColourRGBA * Set colour through red, green, blue and alpha componentssetAuxPtsColourRGBA * Set colour through red, green, blue and alpha components setAuxPtsSize * Set auxiliary points size commandsetAuxPtsSize * 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 or just the trajectory line, etc.# whether to show step points 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 visualization Register with visualization
managermanager
main.cc
// Create and initialise visualization manager
G4VisManager* visManager = new G4VisExecutive;
visManager->Initialize();
// Create new drawByParticleID model
G4TrajectoryDrawByParticleID* model =
new G4TrajectoryDrawByParticleID;
// Configure model
model->SetDefault("cyan");
model->Set("gamma", "green");
model->Set("e+", "magenta");
model->Set("e-", G4Color(0.3, 0.3, 0.3));
//Register model with visualization manager
visManager->RegisterModel(model);
12 January 2011 32Geant4 Advanced Visualization J. Perl
Defining Your Own ModelDefining Your Own Model
New trajectory models must inherit from G4VTrajectoryModel and New 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 model
MyCustomTrajectoryModel* 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 from To Make User Defined Model Available from Interactive 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 template The concrete trajectory model type should be used for the template parameterparameter
and a Factory classand a Factory class A factory class responsible for the model and associated messenger creation A 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.cc
ModelAndMessengersG4TrajectoryDrawByParticleIDFactory::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.cc
G4VisExecutive::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 Filters trajectories according to chargeFilters 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
37Geant4 Advanced Visualization J. Perl12 January 2011
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 to Important 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
Momentum interval based colour scale
Momentum filter
Gamma filter
Configure visualisation properties
Momentum filter
12 January 2011 40Geant4 Advanced Visualization J. Perl
Hit FilteringHit Filtering The Attribute-Based filtering discussed above for Trajectories was The 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 implements pply to any class which implements the 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;
const std::map<G4String,G4AttDef>* GetAttDefs() const;
std::vector<G4AttValue>* CreateAttValues() const;
void MyHit::Draw() { … if (! pVVisManager->FilterHit(*this)) return; …
void MyHit::Draw() { … if (! pVVisManager->FilterHit(*this)) return; …
12 January 2011 41Geant4 Advanced Visualization J. Perl
Additional TopicsAdditional Topics
12 January 2011 42Geant4 Advanced Visualization J. Perl
Controlling Detail Level of Detector Controlling Detail Level of Detector GeometryGeometry
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 of You can specify additional arguments to limit the amount of geometry 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 in Even more Control over Level of Detail in Detector GeometryDetector Geometry
Additional commands allow finer control including whether or not to Additional commands allow finer control including whether or not to draw 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 density Culling allows you to specify that covered daughters or low density volumes are omitted:volumes are omitted: /vis/viewer/set/culling global|coveredDaughters|invisible|density [true|/vis/viewer/set/culling global|coveredDaughters|invisible|density [true|
false] [density] [unit]false] [density] [unit] HepRepFile will still include these culled objects, but just make them HepRepFile 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 the To really omit them from the HepRepFile, as you may wish to do to make the
file smaller:file smaller: /vis/heprep/setCullInvisibles true/vis/heprep/setCullInvisibles true
12 January 2011 44Geant4 Advanced Visualization J. Perl
Section Planes / CutawaysSection Planes / Cutaways
Some drivers allow you to section the view, that is, cut it Some drivers allow you to section the view, that is, cut it away along a specified plane (but this generally works away along a specified plane (but this generally works only 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, output For each event, you can execute various vis commands to rotate, zoom, output to a different vis driver, etc.to a different vis driver, etc.
/vis/reviewKeptEvents/vis/reviewKeptEvents Each time you type “continue”, you will get to the next kept event.Each time you type “continue”, you will get to the next kept event.
To quit reviewing events:To quit reviewing events: /vis/abortReviewKeptEvents/vis/abortReviewKeptEvents and then again type “continue”and then again type “continue”
You can also use a command or c++ calls to force keeping of specific events You can also use a command or c++ calls to force keeping of specific events regardless of how visualization is accumulating them.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->KeepTheCurrentEvent()G4EventManager->KeepTheCurrentEvent() This feature makes it easy to do a large run and then recall for visualization This feature makes it easy to do a large run and then recall for visualization
only 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 you’re using C++ to flag which events to keep, so that you can do If you’re using C++ to flag which events to keep, so that you can do a large run but only visualize a few special events, mix event a large run but only visualize a few special events, mix event keeping 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 through In this way, the visualization is disabled when you first run through the 1000 events, and is enabled only when you are reviewing the the 1000 events, and is enabled only when you are reviewing the small number of special events that you flagged from your C++ call:small number of special events that you flagged from your C++ call: G4EventManager->KeepTheCurrentEvent()G4EventManager->KeepTheCurrentEvent()
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 “by hand” from the Geant4 geometry primitives and Build something “by hand” 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("box",2*m,2*m,2*m), G4Box("box",2*m,2*m,2*m),
G4VisAttributes(G4Colour(1,1,0)));G4VisAttributes(G4Colour(1,1,0)));
// Boolean solid...// Boolean solid...G4Box boxA("boxA",3*m,3*m,3*m);G4Box boxA("boxA",3*m,3*m,3*m);G4Box boxB("boxB",1*m,1*m,1*m);G4Box boxB("boxB",1*m,1*m,1*m);G4SubtractionSolid subtracted(G4SubtractionSolid subtracted("subtracted_boxes",&boxA,&boxB, "subtracted_boxes",&boxA,&boxB,
G4Translate3D(3*m,3*m,3*m));G4Translate3D(3*m,3*m,3*m));pVisManager->Draw(pVisManager->Draw( subtracted,subtracted,
G4VisAttributes(G4Colour(0,1,1)), G4VisAttributes(G4Colour(0,1,1)), G4Translate3D(-6*m,-6*m,-G4Translate3D(-6*m,-6*m,-6*m));6*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.html
Hands on DAWN Tutorialhttp://geant4.slac.stanford.edu/Presentations/vis/G4DAWNTutorial/G4DAWNTutorial.htmlHands on OpenGL Tutorialhttp://geant4.slac.stanford.edu/Presentations/vis/G4OpenGLTutorial/G4OpenGLTutorial.html
Geant4 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