17 #include <corsika/framework/process/BoundaryCrossingProcess.hpp> 18 #include <corsika/framework/process/ContinuousProcess.hpp> 19 #include <corsika/framework/process/ContinuousProcessIndex.hpp> 20 #include <corsika/framework/process/ContinuousProcessStepLength.hpp> 21 #include <corsika/framework/process/DecayProcess.hpp> 22 #include <corsika/framework/process/InteractionProcess.hpp> 23 #include <corsika/framework/process/CascadeEquationsProcess.hpp> 25 #include <corsika/framework/process/SecondariesProcess.hpp> 26 #include <corsika/framework/process/StackProcess.hpp> 27 #include <corsika/framework/process/NullModel.hpp> 28 #include <corsika/framework/core/Step.hpp> 37 class NuclearComposition;
43 template <
typename TProcess,
int N>
46 typename
std::enable_if_t<is_process_v<std::decay_t<TProcess>> &&
47 std::decay_t<TProcess>::is_process_sequence>> {
48 static size_t constexpr count = N + std::decay_t<TProcess>::getNumberOfProcesses();
156 template <
typename TProcess1,
typename TProcess2 =
NullModel,
157 int ProcessIndexOffset = 0,
161 int IndexOfProcess2 =
165 using process1_type =
typename std::decay_t<TProcess1>;
166 using process2_type =
typename std::decay_t<TProcess2>;
176 static bool const is_process_sequence =
true;
199 template <
typename TParticle>
201 typename TParticle::node_type
const& from,
202 typename TParticle::node_type
const& to);
204 template <
typename TParticle>
217 template <
typename TSecondaries>
218 void doSecondaries(TSecondaries& vS);
233 template <
typename TStack>
234 void doStack(TStack& stack);
239 template <
typename TStack>
240 void doCascadeEquations(TStack& stack);
245 void initCascadeEquations();
262 template <
typename TParticle,
typename TTrack>
274 template <
typename TParticle>
275 CrossSectionType getCrossSection(TParticle
const& projectile, Code
const targetId,
278 template <
typename TParticle>
279 TimeType getLifetime(TParticle& particle) {
280 return 1. / getInverseLifetime(particle);
309 template <
typename TSecondaryView,
typename TRNG>
311 TSecondaryView&& view,
FourMomentum const& projectileP4,
316 template <
typename TParticle>
320 template <
typename TSecondaryView>
329 #ifdef CORSIKA_UNIT_TESTING 330 TProcess1 getProcess1()
const {
return A_; }
331 TProcess2 getProcess2()
const {
return B_; }
338 static size_t constexpr numberOfProcesses_ = IndexOfProcess1;
370 template <
typename... TProcesses,
typename TProcess1>
372 make_sequence(TProcess1&& vA, TProcesses&&... vBs) {
374 decltype(make_sequence(std::declval<TProcesses>()...))>(
375 vA, make_sequence(std::forward<TProcesses>(vBs)...));
391 template <
typename TProcess1,
typename TProcess2>
408 template <
typename TProcess>
415 #include <corsika/detail/framework/process/ProcessSequence.inl> traits class to count any type of Process, general version.
Import and extend the phys::units package.
Definition of a static process list/sequence.
Each process in C8 must derive from BaseProcess.
To index individual processes (continuous processes) inside a ProcessSequence.
Description of physical four-vectors.
`, since they are used everywhere as integral part of the framework.
Process that does nothing.
static constexpr quantity zero()
We need a "zero" of each type – for comparisons, to initialize running totals, etc.
static size_t constexpr getNumberOfProcesses()
static counter to uniquely index (count) all ContinuousProcess in switch sequence.
ProcessReturn
since in a process sequence many status updates can accumulate for a single particle, this enum should define only bit-flags that can be accumulated easily with "|="
Describes the composition of matter Allowes and handles the creation of custom matter compositions...
Interface to particle properties.
To store step length in LengthType and unique index in ProcessSequence of shortest step ContinuousPro...
General FourVector object.