template<typename charged_selector_t, typename charged_simulator_t, typename neutral_selector_t, typename neutral_simulator_t>
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
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