Common parameters#

Sources are the objects that create particles ex nihilo. The particles created from sources are called the Event in the Geant4 terminology, they got a EventID which is unique in a given Run.

Several sources can be defined and are managed at the same time. To add a source description to the simulation, you do:

source1 = sim.add_source('GenericSource', 'source1')
source1.number_of_primaries = 100

source2 = sim.add_source('VoxelSource', 'source2')
source2.activity = 10 * g4_units.Bq

There are several source types, each one with different parameter. In this example, source1.number_of_primaries indicates that this source will generate 100 Events. The second source manages the time and will generate 10 Events per second, so according to the simulation run timing, a different number of Events will be generated.

Information about the sources may be displayed with:

# Print all types of source
print(sim.dump_source_types())

# Print information about all sources
print(sim.dump_sources())

Some of the parameters are common to all types of sources, while others are specific to a certain type of source. Given a source source, use print(source) to display the source’s parameters and their default values.

Common parameters are:

  • attached_to: the name of the volume to which the source is attached (world by default) in the hierarchy of volumes.
    See Details: Volumes for more details.
  • position.translation: list of 2 numerical values, e.g. [0, 2 * cm, 3 * mm].
    It defines the translation of the source with respect to the reference frame of the attached volume.
    Note: the origin of the reference frame is always at the center of the shape in Geant4.
  • rotation: a 3×3 rotation matrix.
    Rotation of the volume with respect to the attached volume.
    We advocate the use of scipy.spatial.transform.Rotation to manage the rotation matrix.
  • n: the number (integer or a list) of particles to emit (the number of Geant4 Events).
  • activity: the number (real, in Bq) of particle to emit per second.
    The number of Geant4 Events will depend on the simulation time.

If you want to start a multi-run simulation using the parameter n, you can provide a list of the number of particles to simulate for each run (see test096)

A minimal working example would be:

source = sim.add_source("GenericSource", "mySource")
source.number_of_primaries = [10000, 150000, 36]

sim.run_timing_intervals = [[0, 1 * sec], [2 * sec, 2.5 * sec], [4 * sec, 5 * sec]]

Please note that sim.run_timing_intervals must have the same length as source.number_of_primaries. By default, all particles of a given run will be emitted at a timestamp equal to the minimum time of the corresponding timing interval.

Coordinate system#

The attached_to option indicates the coordinate system of the source. By default, it is the world, but it is possible to attach a source to any volume. In that case, the coordinate system of all emitted particles will follow the given volume. Using source.direction_relative_to_attached_volume = True will make your source direction change following the rotation of that volume.

All primary particles must start inside the world volume (or on its surface). If a source generates a particle outside the world, the simulation stops with an error that gives the name of the source and the position: move the source inside the world, or enlarge the world (sim.world.size).

Reference#

property SourceBase.attached_to[source]#

attached_to:

  • Default value: world

  • Description: Name of the volume to which the source is attached.