13 #include <corsika/framework/random/ExponentialDistribution.hpp> 14 #include <corsika/framework/random/RNGManager.hpp> 15 #include <corsika/framework/random/UniformRealDistribution.hpp> 16 #include <corsika/framework/stack/SecondaryView.hpp> 19 #include <corsika/media/Environment.hpp> 21 #include <corsika/stack/history/HistoryStackExtension.hpp> 26 #include <type_traits> 53 template <
typename TTracking,
typename TProcessList,
typename TOutput,
typename TStack>
56 typedef typename TStack::stack_view_type stack_view_type;
58 typedef typename TStack::particle_type particle_type;
60 typedef std::remove_pointer_t<decltype(((particle_type*)
nullptr)->getNode())>
61 volume_tree_node_type;
63 typedef typename volume_tree_node_type::IModelProperties medium_interface_type;
78 TProcessList& pl, TOutput& out, TStack& stack)
84 CORSIKA_LOG_INFO(c8_ascii_);
85 CORSIKA_LOG_INFO(
"Tracking algorithm: {} (version {})", TTracking::getName(),
86 TTracking::getVersion());
87 if constexpr (stack_view_type::has_event) {
88 CORSIKA_LOG_INFO(
"Stack - with full cascade HISTORY.");
123 void step(particle_type& vParticle);
128 void setEventType(stack_view_type& view, history::EventType);
132 TTracking& tracking_;
133 TProcessList& sequence_;
137 unsigned int count_ = 0;
140 const char* c8_ascii_ =
142 ,ad8888ba, ,ad8888ba, 88888888ba ad88888ba 88 88 a8P db ad88888ba 143 d8"' `"8b d8"' `"8b 88 "8b d8" "8b 88 88 ,88' d88b d8" "8b 144 d8' d8' `8b 88 ,8P Y8, 88 88 ,88" d8'`8b Y8a a8P 145 88 88 88 88aaaaaa8P' `Y8aaaaa, 88 88,d88' d8' `8b "Y8aaa8P" 146 88 88 88 88""""88' `"""""8b, 88 8888"88, d8YaaaaY8b ,d8"""8b, 147 Y8, Y8, ,8P 88 `8b `8b 88 88P Y8b d8""""""""8b d8" "8b 148 Y8a. .a8P Y8a. .a8P 88 `8b Y8a a8P 88 88 "88, d8' `8b Y8a a8P 149 `"Y8888Y"' `"Y8888Y"' 88 `8b "Y88888P" 88 88 Y8b d8' `8b "Y88888P" 155 #include <corsika/detail/framework/core/Cascade.inl> Import and extend the phys::units package.
The Cascade class is constructed from template arguments making it very versatile.
CORSIKA8 logging utilities.
class "quantity" is the heart of the library.
void run()
The Run function is the main simulation loop, which processes particles from the Stack until the Stac...
The cascade namespace assembles all objects needed to simulate full particles cascades.
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 "|="
Cascade()=delete
constructorsCascade class cannot be default constructed, but needs a valid list of physics processes ...
void setNodes()
set the nodes for all particles on the stack according to their numerical position ...
void forceInteraction()
Force an interaction of the top particle of the stack at its current position.
prng_type & getRandomStream(string_type const &streamName)