Struct ActsFatras::Simulation

template<typename charged_selector_t, typename charged_simulator_t, typename neutral_selector_t, typename neutral_simulator_t>
struct Simulation

Multi-particle/event simulation.

The selector types for charged and neutral particles do not need to check for the particle charge. This is done automatically by the simulator to ensure consistency.

Template Parameters
  • charged_selector_t – Callable selector type for charged particles

  • charged_simulator_t – Single particle simulator for charged particles

  • neutral_selector_t – Callable selector type for neutral particles

  • neutral_simulator_t – Single particle simulator for neutral particles

Public Functions

inline Simulation(charged_simulator_t &&charged_, neutral_simulator_t &&neutral_)

Construct from the single charged/neutral particle simulators.

template<typename generator_t, typename input_particles_t, typename output_particles_t, typename hits_t>
inline Acts::Result<std::vector<FailedParticle>> simulate(const Acts::GeometryContext &geoCtx, const Acts::MagneticFieldContext &magCtx, generator_t &generator, const input_particles_t &inputParticles, output_particles_t &simulatedParticlesInitial, output_particles_t &simulatedParticlesFinal, hits_t &hits) const

Simulate multiple particles and generated secondaries.

This takes all input particles and simulates those passing the selection using the appropriate simulator. All selected particle states including additional ones generated from interactions are stored in separate output containers; both the initial state at the production vertex and the final state after propagation are stored. Hits generated from selected input and generated particles are stored in the hit container.


Parameter edge-cases can lead to errors in the underlying propagator and thus to particles that fail to simulate. Here, full events are simulated and the failure to simulate one particle should not be considered a general failure of the simulator. Instead, a list of particles that fail to simulate is provided to the user. It is the users responsibility to handle them.


Failed particles are removed from the regular output, i.e. they do not appear in the simulated particles containers nor do they generate hits.


Particle-hit association is based on particle ids generated during the simulation. This requires that all input particles must have generation and sub-particle number set to zero.

  • geoCtx – is the geometry context to access surface geometries

  • magCtx – is the magnetic field context to access field values

  • generator – is the random number generator

  • inputParticles – contains all particles that should be simulated

  • simulatedParticlesInitial – contains initial particle states

  • simulatedParticlesFinal – contains final particle states

  • hits – contains all generated hits

Return values
  • Acts::Result::Error – if there is a fundamental issue

  • Acts::Result::Success – with all particles that failed to simulate

Template Parameters
  • generator_t – is the type of the random number generator

  • input_particles_t – is a Container for particles

  • output_particles_t – is a SequenceContainer for particles

  • hits_t – is a SequenceContainer for hits

Public Members

charged_simulator_t charged
neutral_simulator_t neutral
charged_selector_t selectCharged
neutral_selector_t selectNeutral