Visualizing geometries with Paraview

It is possible to write a Geant4 geometry with the VRML2 visualisation driver and view the resulting file with Paraview. The result allows visualisation of the complete scene, but it is a bit of a mess. The user has no control over individual elements and the outer “World” box is problematic.

By using “/vis/drawVolume Part1”, where Part1 is a physical volume of the detector being described, a VRML file will be produced containing only Part1. By producing multiple files, one for each physical volume, and displaying them simultaneously in Paraview, the previous limitations are avoided. This macro automates the procedure and renames the files produced.

# vrml output 
/control/shell rm *.wrl
#
/vis/open VRML2FILE
/vis/viewer/reset
/vis/drawVolume Part1
/vis/viewer/flush
/control/shell mv g4_00.wrl Part1.wrl
#
/vis/open VRML2FILE
/vis/viewer/reset
/vis/drawVolume Part2
/vis/viewer/flush
/control/shell mv g4_00.wrl Part2.wrl
#
# etc. for all constituent parts of the detector, excluding World.
# Part1, Part2... need replacing with names from your own system

These VRML files can be read in by Paraview. The easiest way to do this is to drag and drop them onto the Pipeline Browser. For some reason this must be done one file at a time. After that, the result is rather good. By clicking on the eyeball next to the file, the specific physical volume can be added to the overall 3D scene or removed again. By selecting Properties, the colours of the individual physical volumes can be changed, as can their transparency. The scene can be viewed from any angle, rotation or zoom and the resulting 2D graphic exported in a wide range of formats.

Visualisation of tracks using the same approach is possible. No method could be found of adding trajectories before /vis/drawVolume was called, which adds a World box which screens the tracks. A solution was found by deleting the unwanted box using sed. It’s a bit ugly, but it works.

/vis/open VRML2FILE
/vis/viewer/reset
/vis/drawVolume
/vis/scene/add/trajectories
/vis/scene/endOfEventAction accumulate
/run/beamOn 50
/control/shell mv g4_00.wrl Tracks.wrl
/control/shell sed -i '/SOLID/,/POLYLINE/d' Tracks.wrl

The above macros were developed with Geant4.10.07 on Xubuntu and will probably run on most Linux and MacOS. Windows users can expect to have to make major modifications. The macros are admittedly somewhat makeshift, requiring hand editing for each particular case. Perhaps somebody might like to write a more general version using parameters.

Nice work.

You can add sub-detectors selectively to a scene. For example

/vis/drawVolume Part1
/vis/scene/add/volume Part2

See Debugging geometry with vis — Book For Application Developers 10.7 documentation.

You can control the depth:
/vis/drawVolume Part1 ! 0
would draw just the top level volume. Similarly
/vis/scene/add/volume Part2 ! 0

Use “help <command>” to see guidance - or, if you’re using Qt, browse the hep tag. Or see Built-in Commands — Book For Application Developers 10.7 documentation.

When developing macros, it’s always useful to
/control/verbose 2
and if you want to see what the vis manager is doing
/vis/verbose confirmations