|
CORSIKA
@c8_version@
The framework to simulate particle cascades for astroparticle physics
|
Physics processes in CORSIKA 8 are clustered in ProcessSequence and SwitchProcessSequence containers. More...
Classes | |
| struct | corsika::BaseProcess< TDerived > |
| Each process in C8 must derive from BaseProcess. More... | |
| class | corsika::BoundaryCrossingProcess< TDerived > |
| Processes acting on the particles traversion from one volume into another volume. More... | |
| class | corsika::CascadeEquationsProcess< TDerived > |
| Processes executing cascade-equations calculations. More... | |
| class | corsika::ContinuousProcess< TDerived > |
| Processes with continuous effects along a particle Trajectory. More... | |
| class | corsika::ContinuousProcessIndex |
| To index individual processes (continuous processes) inside a ProcessSequence. More... | |
| class | corsika::ContinuousProcessStepLength |
| To store step length in LengthType and unique index in ProcessSequence of shortest step ContinuousProcess. More... | |
| struct | corsika::DecayProcess< TDerived > |
| Process decribing the decay of particles. More... | |
| class | corsika::InteractionCounter< TCountedProcess > |
Wrapper around an InteractionProcess that fills histograms of the number of calls to doInteraction() binned in projectile energy (both in lab and center-of-mass frame) and species. More... | |
| class | corsika::InteractionHistogram |
| Class that creates and stores histograms of collisions \(dN/dE_{lab}\), \(dN/d\sqrt{s}\) which is used by class InteractionCounter. More... | |
| class | corsika::InteractionLengthModifier< TUnderlyingProcess > |
| class | corsika::InteractionProcess< TModel > |
| Process describing the interaction of particles. More... | |
| class | corsika::NullModel |
| Process that does nothing. More... | |
| class | corsika::SecondariesProcess< TDerived > |
| Processes acting on the secondaries produced by other processes. More... | |
| class | corsika::StackProcess< TDerived > |
| Process to act on the entire particle stack. More... | |
| class | corsika::SwitchProcessSequence< TCondition, TSequence, USequence, IndexFirstProcess, IndexOfProcess1, IndexOfProcess2 > |
| Class to switch between two process branches. More... | |
| class | corsika::ProcessSequence< TProcess1, TProcess2, ProcessIndexOffset, IndexOfProcess1, IndexOfProcess2 > |
| Definition of a static process list/sequence. More... | |
Physics processes in CORSIKA 8 are clustered in ProcessSequence and SwitchProcessSequence containers.
The former is a mere (ordered) collection, while the latter has the option to switch between two alternative ProcessSequences.
Depending on the type of data to act on and on the allowed actions of processes there are several interface options:
And all processes (including ProcessSequence and SwitchProcessSequence) are derived from BaseProcess.
Processes of any type (e.g. p1, p2, p3,...) can be assembled into a ProcessSequence using the make_sequence factory function.
Note, if the order of processes matters, the order of occurence in the ProcessSequence determines the executiion order.
SecondariesProcess alyways act on new secondaries produced (i.e. in InteractionProcess and DecayProcess) in the scope of their ProcessSequence. For example if i1 and i2 are InteractionProcesses and s1 is a SecondariesProcess, then:
will result in s1 acting only on the particles produced by i2 and not by i1. This can be very useful, e.g. to fine tune thinning.
A special type of ProcessSequence is SwitchProcessSequence, which has two branches and a functor that can select between these two branches.
where the only requirement to selector is that it provides a SwitchResult operator()(Particle const& particle) const method. Thus, based on the dynamic properties of particle the functor can make its decision. This is clearly important for switching between low-energy and high-energy models, but not limited to this. The selection can even be done with a lambda function.