KAHIBARO
Discord Login Register

9.5. Displaying Particle Tracks

Table of Contents

Trajectories

When you visualize a Geant4 simulation, trajectories are the lines that show how particles move through your geometry. They turn the invisible process of particle transport into something you can see and inspect. For beginners, thinking of a trajectory as the visual history of one G4Track is a useful picture.

Geant4 can draw trajectories automatically if you enable the visualization system and tell it which trajectories to store and display. This is controlled mainly by the tracking manager, trajectory classes, and visualization commands. You do not need to write C++ code for simple use, because the default trajectory and macro commands are usually enough.

To see trajectories, you first need to make sure that the trajectory storage is turned on. This is often done through a macro:

txt
/tracking/storeTrajectory 1

A value of 0 disables storage, a value of 1 enables it. If trajectories are not stored, nothing will be drawn, even if visualization is active.

Once trajectories are being stored, you can control how they are drawn with visualization commands. A typical sequence in an interactive macro that shows the geometry, then trajectories, would look like:

txt
/vis/open OGL
/vis/drawVolume
/vis/viewer/set/viewpointThetaPhi 60 30 deg
/vis/scene/add/trajectories
/vis/scene/add/hits
/vis/scene/endOfEventAction accumulate

The command /vis/scene/add/trajectories tells the visualization manager to include all stored trajectories in the scene. The command /vis/scene/endOfEventAction accumulate keeps trajectories from multiple events on the screen instead of clearing them after each event. If you want to see only the last event, you can use:

txt
/vis/scene/endOfEventAction refresh

This refreshes the scene at the end of each event and discards previous trajectories.

It is often useful to control which trajectories are drawn. In more complex simulations you might have many secondaries and the screen can quickly become cluttered. You can filter by particle type or by minimum energy using macro commands. For example:

txt
/vis/trajectory/filter/create particleFilter
/vis/trajectory/filter/add particleFilter e-
/vis/trajectory/filter/add particleFilter gamma

This creates a filter that only allows electron and gamma trajectories to be drawn. Other trajectory filters can select by charge, parent ID, or other attributes. The exact filter types available can be listed interactively with:

txt
/vis/trajectory/filter/?

For many educational and debugging tasks, it is useful to run with a small number of events and watch trajectories evolve. You might first show only primaries, then add secondaries, or zoom into a region of interest while trajectories are visible. Combining camera commands and trajectory display helps you understand where interactions happen and how particles propagate through materials.

Internally, trajectories are represented by classes derived from G4VTrajectory. Geant4 provides a default implementation that already stores basic information like position at each step, particle name, and charge. For very simple use, you can rely on this default. If you later want to add extra information, such as custom markers for specific processes, you can define your own trajectory class and register it with the tracking manager, but that is beyond the beginner level and covered in more advanced contexts.

Geant4 only draws what is stored. If /tracking/storeTrajectory is off during a run, those trajectories cannot be recovered or drawn later.

Track colors

Colors are one of the most powerful tools for making trajectories easy to understand. Instead of all tracks being drawn in the same default color, you can assign different colors to different particle types, charges, or other properties. With a clear color scheme, you can look at the visualization and immediately recognize which trajectories belong to which particles.

Geant4 uses trajectory drawing models to decide the color and style of tracks. The default model, G4TrajectoryDrawByParticleID, assigns colors based on the type of particle. For example, electrons, positrons, gammas, and protons are often shown in distinct colors, which makes mixed particle fields easier to interpret.

You can enable and configure these drawing models through macro commands. A very common setup is:

txt
/vis/modeling/trajectories/create/drawByParticleID
/vis/modeling/trajectories/selectByParticleID

The first command ensures that the "draw by particle ID" model exists, and the second selects it as the active model. With this, Geant4 will apply built in colors for common particle types.

To see which trajectory models are currently available, you can use:

txt
/vis/modeling/trajectories/list

This will list models such as drawByCharge, drawByParticleID, and sometimes application specific models if you define them in C++.

You can also adjust the default colors for specific particles. For example, if you want protons to appear red and gammas green, you can do:

txt
/vis/modeling/trajectories/create/drawByParticleID
/vis/modeling/trajectories/drawByParticleID-0/set proton red
/vis/modeling/trajectories/drawByParticleID-0/set gamma green

The specific name drawByParticleID-0 may vary if you have several instances. You can list instances with the list command mentioned above. Geant4 understands a set of color names like red, green, blue, yellow, and also allows RGB definitions in some drivers, which you can check in the visualization documentation.

Besides color, you can control line style and thickness. For instance, you may want primaries to have thicker lines than secondaries. Some trajectory models allow settings such as:

txt
/vis/modeling/trajectories/drawByParticleID-0/set proton red 4 solid
/vis/modeling/trajectories/drawByParticleID-0/set e- blue 2 dashed

Here the number is the line width in pixels, and the style can be solid, dashed, or dotted, depending on the visualization driver. If a style is not supported by your driver, it will fall back to a basic style.

A simple and practical color scheme for beginners is:

Particle typeTypical colorReason
GammaGreenEasy to spot neutral electromagnetic rays
ElectronBlueDistinct from gamma but same interaction family
PositronMagentaStands out and shows annihilation regions
ProtonRedEmphasizes charged hadrons and beams
NeutronYellowHighlights neutral hadrons

You do not need to follow this table exactly, but choosing a consistent scheme helps you read your visualizations quickly.

If you want all trajectories in a single color, for example for a clean image, you can instead use a "single color" model:

txt
/vis/modeling/trajectories/create/drawByAttribute global
/vis/modeling/trajectories/select global
/vis/modeling/trajectories/global/set 0 0 1

Here the three numbers are the red, green, and blue components between 0 and 1, so 0 0 1 is blue. The exact syntax can vary, and you should check the in-application help with:

txt
/vis/modeling/trajectories/global/?

When combining colored trajectories with colored geometry, it is useful to ensure good contrast. For example, if your detectors are drawn in pale colors or semi transparent materials, dark or saturated trajectory colors will stand out. If your world is drawn in black or very dark tones, lighter track colors will be easier to see.

Choose a consistent coloring rule and stick to it. Changing meanings of colors between runs or figures can easily lead to misinterpretation of trajectories and detector behavior.

By carefully configuring how trajectories are drawn and colored, you turn your Geant4 visualization from a simple picture into a powerful diagnostic and educational tool, where different particles and their paths are immediately recognizable.

Views: 9

Comments

Please login to add a comment.

Don't have an account? Register now!