Trajectory Filtering

Trajectory filtering allows you to visualise a subset of available trajectories. This can be useful if you only want to view interesting trajectories and discard uninteresting ones. Trajectory filtering can be run in two modes:

  • Soft filtering: In this mode, uninteresting trajectories are marked invisible. Hence, they are still written, but (depending on the driver) will not be displayed. Some drivers, for example the HepRepFile driver, which writes an XML file for the HepRApp browser, will allow you to selectively view these soft filtered trajectories.

  • Hard filtering (default): In this mode, uninteresting trajectories are not drawn at all. This mode is especially useful if the job produces huge graphics files, dominated by data from uninteresting trajectories. It is essential to use this mode for most drivers, including those using OpenGL, because they are not adapted for soft filtering.

Change mode with /vis/filtering/trajectories/mode.

Trajectory filter models are used to apply filtering according to specific criteria. The following models are currently supplied with the Geant4 distribution:

  • G4TrajectoryChargeFilter (chargeFilter)

  • G4TrajectoryParticleFilter (particleFilter)

  • G4TrajectoryOriginVolumeFilter (originVolumeFilter)

  • G4TrajectoryTouchedVolumeFilter (touchedVolumeFilter)

  • G4TrajectoryAttributeFilter (attributeFilter)

Multiple filters are automatically chained together, and can configured either interactively or in commands or in compiled code. The filters can be inverted, set to be inactive or set in a verbose mode. The above models are described briefly below, followed by some example configuration commands.

G4TrajectoryChargeFilter

This model filters trajectories according to charge. In standard running mode, only trajectories with charges matching those registered with the model will pass the filter.

G4TrajectoryParticleFilter

This model filters trajectories according to particle type. In standard running mode, only trajectories with particle types matching those registered with the model will pass the filter.

G4TrajectoryOriginVolumeFilter

This model filters trajectories according to originating volume name. In standard running mode, only trajectories with originating volumes matching those registered with the model will pass the filter.

G4TrajectoryTouchedVolumeFilter

This model filters trajectories that touch one or more volumes according to the physical volume name(s). It requires rich trajectories, G4RichTrajectory (/vis/scene/add/trajectories rich). In standard running mode, only trajectories that touch volumes matching those registered with the model will pass the filter.

G4TrajectoryAttributeFilter

This model filters trajectories based on the HepRep style attributes (see Additional User-Defined Attributes) associated with trajectories. Each attribute drawer can be configured with interval and/or single value data. Single value data should override the interval data. Units should be specified on the command line if the attribute unit is specified either as a G4BestUnit or if the unit is part of the value string. Available attributes can be shown with /vis/list.

Controlling from Commands

Multiple trajectory filter models can be created and configured using commands in the “/vis/filtering/trajectories/” directory. All generated filter models are chained together automatically.

Model configuration commands are generated dynamically when a filter model is instantiated. These commands apply directly to that instance.

See the interactive help for more information on the available commands.

Example commands

# Create a particle filter. Configure to pass only gammas. Then
# invert to pass anything other than gammas. Set verbose printout,
# and then deactivate filter

/vis/filtering/trajectories/create/particleFilter
/vis/filtering/trajectories/particleFilter-0/add gamma
/vis/filtering/trajectories/particleFilter-0/invert true
/vis/filtering/trajectories/particleFilter-0/verbose true
/vis/filtering/trajectories/particleFilter-0/active false
# Create a charge filter. Configure to pass only neutral trajectories.
# Set verbose printout. Reset filter and reconfigure to pass only
# negatively charged trajectories.

/vis/filtering/trajectories/create/chargeFilter
/vis/filtering/trajectories/chargeFilter-0/add 0
/vis/filtering/trajectories/chargeFilter-0/verbose true
/vis/filtering/trajectories/chargeFilter-0/reset true
/vis/filtering/trajectories/chargeFilter-0/add -1
# Create an attribute filter named attributeFilter-0
/vis/filtering/trajectories/create/attributeFilter

# Select attribute "IMag"
/vis/filtering/trajectories/attributeFilter-0/setAttribute IMag

# Select trajectories with 2.5 MeV <= IMag< 1000 MeV
/vis/filtering/trajectories/attributeFilter-0/addInterval 2.5 MeV 1000 MeV
# List available attributes
/vis/list

# List filters
/vis/filtering/trajectories/list

Note that although particleFilter-0 and chargeFilter-0 are automatically chained, particleFilter-0 will not have any effect since it is has been deactivated.

Hit and Digi Filtering

The attribute based filtering can be used on hits and digitisations as well as trajectories. To active the interactive attribute based hit filtering, a filter call should be added to the “Draw” method of the hit (or digi) class:

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

Interactive filtering can then be done through the commands in /vis/filtering/hits or digi.