Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ActsFatras::InteractionList< processes_t > Class Template Reference

#include <acts/blob/sPHENIX/Fatras/include/ActsFatras/Kernel/InteractionList.hpp>

+ Collaboration diagram for ActsFatras::InteractionList< processes_t >:

Classes

struct  Selection
 Point-like interaction selection. More...
 

Public Member Functions

void disable (size_t process)
 Disable a specific process identified by index.
 
template<typename process_t >
void disable ()
 
template<size_t kProcess>
std::tuple_element_t< kProcess,
Processes > & 
get ()
 Access a specific process identified by index.
 
template<typename process_t >
process_t & get ()
 
template<typename generator_t >
bool runContinuous (generator_t &rng, const Acts::MaterialSlab &slab, Particle &particle, std::vector< Particle > &generated) const
 
template<typename generator_t >
Selection armPointLike (generator_t &rng, const Particle &particle) const
 
template<typename generator_t >
bool runPointLike (generator_t &rng, size_t processIndex, Particle &particle, std::vector< Particle > &generated) const
 

Private Types

using Mask = std::bitset< sizeof...(processes_t)>
 
using Processes = std::tuple< processes_t...>
 
using ContinuousIndices = detail::ContinuousIndices< Processes >
 
using PointLikeIndices = detail::PointLikeIndices< Processes >
 

Private Member Functions

template<typename generator_t , std::size_t kI0, std::size_t... kIs>
bool runContinuousImpl (generator_t &rng, const Acts::MaterialSlab &slab, Particle &particle, std::vector< Particle > &generated, std::index_sequence< kI0, kIs...>) const
 
template<typename generator_t >
bool runContinuousImpl (generator_t &, const Acts::MaterialSlab &, Particle &, std::vector< Particle > &, std::index_sequence<>) const
 
template<typename generator_t , std::size_t kI0, std::size_t... kIs>
void armPointLikeImpl (generator_t &rng, const Particle &particle, Selection &selection, std::index_sequence< kI0, kIs...>) const
 
template<typename generator_t >
void armPointLikeImpl (generator_t &, const Particle &, Selection &, std::index_sequence<>) const
 
template<typename generator_t , size_t kI0, size_t... kIs>
bool runPointLikeImpl (generator_t &rng, size_t processIndex, Particle &particle, std::vector< Particle > &generated, std::index_sequence< kI0, kIs...>) const
 
template<typename generator_t >
bool runPointLikeImpl (generator_t &, size_t, Particle &, std::vector< Particle > &, std::index_sequence<>) const
 

Private Attributes

Mask m_mask
 
Processes m_processes
 

Detailed Description

template<typename... processes_t>
class ActsFatras::InteractionList< processes_t >

Compile-time set of interaction processes for the simulation.

Two different type of interaction processes are supported: continuous and point-like interactions.

Continuous processes scale with the passed material. They tpyically describe effective results of a large number of small interactions such as multiple scattering or ionisation. Continous process types must provide a call operator with the following signature:

template <typename generator_t>
bool
operator()(
    generator_t& rng,
    const Acts::MaterialSlab& slab,
    Particle& particle,
    std::vector<Particle>& generatedParticles) const

If multiple continuous processes are defined, they are executed serially in the order in which they are given.

For point-like processes, the passed material only affects the probability with which they occur but not the interaction itself, e.g. photon conversion into electron pairs. They are simulated by first drawing a limit on the material paths and then executing the interaction with the shortest limit when the drawn amount of material has been passed. Point-like process types must provide the following two member functions:

// generate X0/L0 limits
template <typename generator_t>
std::pair<Scalar, Scalar>
generatePathLimits(
    generator& rng,
    const Particle& particle) const

// run the process simulation
template <typename generator_t>
bool
run(
    generator_t& rng,
    Particle& particle,
    std::vector<Particle>& generatedParticles) const

For both continuous and point-like interactions, the output particle is modified in-place (if needed) and the return value indicates a break condition in the simulation, i.e. the particle is dead (true) or alive (false) after the interaction.

Note
If an interaction destroys the incoming particle, the process simulation should indicate this via the break condition only and not by reducing the particle momentum to zero. The incoming particle should retain its initial kinematic state; the final kinematic state before destruction is typically of more interest to the user and this simplifies validation.

The physics processes are extendable by the user to accomodate their specific requirements. While the set of available physics processes must be configured at compile-time, within that set, processes can again be selectively disabled at run-time. By default all processes are applied.

Definition at line 175 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 175 of file InteractionList.hpp

Member Typedef Documentation

template<typename... processes_t>
using ActsFatras::InteractionList< processes_t >::ContinuousIndices = detail::ContinuousIndices<Processes>
private

Definition at line 178 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 178 of file InteractionList.hpp

template<typename... processes_t>
using ActsFatras::InteractionList< processes_t >::Mask = std::bitset<sizeof...(processes_t)>
private

Definition at line 176 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 176 of file InteractionList.hpp

template<typename... processes_t>
using ActsFatras::InteractionList< processes_t >::PointLikeIndices = detail::PointLikeIndices<Processes>
private

Definition at line 179 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 179 of file InteractionList.hpp

template<typename... processes_t>
using ActsFatras::InteractionList< processes_t >::Processes = std::tuple<processes_t...>
private

Definition at line 177 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 177 of file InteractionList.hpp

Member Function Documentation

template<typename... processes_t>
template<typename generator_t >
Selection ActsFatras::InteractionList< processes_t >::armPointLike ( generator_t &  rng,
const Particle particle 
) const
inline

Arm the point-like interactions by generating limits and select processes.

Template Parameters
generator_tmust be a RandomNumberEngine
Parameters
[in]rngis the random number generator
[in]particleis the initial particle state
Returns
X0/L0 limits for the particle and the process index that should be executed once the limit has been reached.

Definition at line 241 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 241 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::armPointLikeImpl().

Referenced by BOOST_AUTO_TEST_CASE().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename generator_t , std::size_t kI0, std::size_t... kIs>
void ActsFatras::InteractionList< processes_t >::armPointLikeImpl ( generator_t &  rng,
const Particle particle,
Selection selection,
std::index_sequence< kI0, kIs...>   
) const
inlineprivate
template<typename... processes_t>
template<typename generator_t >
void ActsFatras::InteractionList< processes_t >::armPointLikeImpl ( generator_t &  ,
const Particle ,
Selection ,
std::index_sequence<>   
) const
inlineprivate

Definition at line 320 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 320 of file InteractionList.hpp

template<typename... processes_t>
void ActsFatras::InteractionList< processes_t >::disable ( size_t  process)
inline

Disable a specific process identified by index.

Definition at line 193 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 193 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::m_mask.

Referenced by BOOST_AUTO_TEST_CASE().

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename process_t >
void ActsFatras::InteractionList< processes_t >::disable ( )
inline

Disable a specific process identified by type.

Note
Disables only the first element, if multiple elements of the same type exist.

Definition at line 199 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 199 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::m_mask, and value.

template<typename... processes_t>
template<size_t kProcess>
std::tuple_element_t<kProcess, Processes>& ActsFatras::InteractionList< processes_t >::get ( )
inline

Access a specific process identified by index.

Definition at line 205 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 205 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::m_processes.

Referenced by ActsFatras::makeStandardChargedElectroMagneticInteractions().

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename process_t >
process_t& ActsFatras::InteractionList< processes_t >::get ( )
inline

Access a specific process identified by type.

Warning
This function only works if all configured processes have different types.

Definition at line 213 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 213 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::m_processes.

template<typename... processes_t>
template<typename generator_t >
bool ActsFatras::InteractionList< processes_t >::runContinuous ( generator_t &  rng,
const Acts::MaterialSlab slab,
Particle particle,
std::vector< Particle > &  generated 
) const
inline

Simulate the combined effects from all continuous interactions.

Template Parameters
generator_tmust be a RandomNumberEngine
Parameters
[in]rngis the random number generator
[in]slabis the passed material
[in,out]particleis the particle being updated
[out]generatedis the container of generated particles
Returns
Break condition, i.e. whether a process stoped the propagation

Definition at line 226 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 226 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::runContinuousImpl().

Referenced by BOOST_AUTO_TEST_CASE().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename generator_t , std::size_t kI0, std::size_t... kIs>
bool ActsFatras::InteractionList< processes_t >::runContinuousImpl ( generator_t &  rng,
const Acts::MaterialSlab slab,
Particle particle,
std::vector< Particle > &  generated,
std::index_sequence< kI0, kIs...>   
) const
inlineprivate

Definition at line 275 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 275 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::m_mask, ActsFatras::InteractionList< processes_t >::m_processes, and tgeo-response2json::process().

Referenced by ActsFatras::InteractionList< processes_t >::runContinuous().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename generator_t >
bool ActsFatras::InteractionList< processes_t >::runContinuousImpl ( generator_t &  ,
const Acts::MaterialSlab ,
Particle ,
std::vector< Particle > &  ,
std::index_sequence<>   
) const
inlineprivate

Definition at line 288 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 288 of file InteractionList.hpp

template<typename... processes_t>
template<typename generator_t >
bool ActsFatras::InteractionList< processes_t >::runPointLike ( generator_t &  rng,
size_t  processIndex,
Particle particle,
std::vector< Particle > &  generated 
) const
inline

Simulate the effects from a single point-like interaction.

Template Parameters
generator_tmust be a RandomNumberEngine
Parameters
[in]rngis the random number generator
[in]processIndexis the index of the process to be executed
[in,out]particleis the particle being updated
[out]generatedis the container of generated particles
Returns
Break condition, i.e. whether a process killed the particle

The process index is expected to originate from a previous armPointLike(...) call, but this is not enforced. How to select the correct process requires more information that is not available here.

Definition at line 260 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 260 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::runPointLikeImpl().

Referenced by BOOST_AUTO_TEST_CASE().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename generator_t , size_t kI0, size_t... kIs>
bool ActsFatras::InteractionList< processes_t >::runPointLikeImpl ( generator_t &  rng,
size_t  processIndex,
Particle particle,
std::vector< Particle > &  generated,
std::index_sequence< kI0, kIs...>   
) const
inlineprivate

Definition at line 329 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 329 of file InteractionList.hpp

References ActsFatras::InteractionList< processes_t >::m_mask, ActsFatras::InteractionList< processes_t >::m_processes, and utils::run.

Referenced by ActsFatras::InteractionList< processes_t >::runPointLike().

+ Here is the caller graph for this function:

template<typename... processes_t>
template<typename generator_t >
bool ActsFatras::InteractionList< processes_t >::runPointLikeImpl ( generator_t &  ,
size_t  ,
Particle ,
std::vector< Particle > &  ,
std::index_sequence<>   
) const
inlineprivate

Definition at line 345 of file InteractionList.hpp.

View newest version in sPHENIX GitHub at line 345 of file InteractionList.hpp

Member Data Documentation


The documentation for this class was generated from the following file: