CORSIKA8  0.0.0
The framework to simulate particle cascades for astroparticle physics
corsika Namespace Reference

The cascade namespace assembles all objects needed to simulate full particles cascades. More...

Namespaces

 constants
 Physical and mathematical constants with units.
 
 history
 
 units
 Extension of the phys::units package.
 

Classes

class  BaseExponential
 This class provides the grammage/length conversion functionality for (locally) flat exponential atmospheres. More...
 
class  BaseOutput
 This is the base class for all outputs so that they can be stored in homogeneous containers. More...
 
struct  BaseProcess
 Each process in C8 must derive from BaseProcess. More...
 
class  BaseTabular
 This class provides the grammage/length conversion functionality for (locally) flat tabulated atmospheres. More...
 
class  BaseTrajectory
 A Trajectory is a description of a momvement of an object in three-dimensional space that describes the trajectory (connection between two Points in space), as well as the direction of motion at any given point. More...
 
class  BaseVector
 
class  BetheBlochPDG
 PDG2018, passage of particles through matter. More...
 
class  BoundaryCrossingProcess
 Processes acting on the particles traversion from one volume into another volume. More...
 
class  Cascade
 The Cascade class is constructed from template arguments making it very versatile. More...
 
class  ClassTimer
 Measure the runtime of a single class function. More...
 
class  ClassTimer< TRet(TClass::*)(TArgs...) const, TFuncPtr, TTimer >
 Specialisation for const member functions. More...
 
class  ClassTimer< TRet(TClass::*)(TArgs...), TFuncPtr, TTimer >
 Measure the runtime of a single class function. More...
 
class  ClassTimer< void(TClass::*)(TArgs...) const, TFuncPtr, TTimer >
 Specialisation for const member functions without return value. More...
 
class  ClassTimer< void(TClass::*)(TArgs...), TFuncPtr, TTimer >
 Specialisation for member functions without return value. More...
 
class  ClassTimerImpl
 
struct  CombinedParticleInterface
 CombinedParticleInterface can be used to combine the data of several StackData objects. More...
 
class  CombinedStackImpl
 Memory implementation of a combined data stack. More...
 
class  COMBoost
 This utility class handles Lorentz boost between different referenence frames, using FourVector. More...
 
class  CONEXhybrid
 
class  ConstStackIteratorInterface
 This is the iterator class for const-access to stack data. More...
 
struct  contains_stack_process
 A traits marker to identify ProcessSequence that contain a StackProcess. More...
 
class  ContinuousProcess
 Processes with continuous effects along a particle Trajectory. More...
 
class  ContinuousProcessIndex
 To index individual processes (continuous processes) inside a ProcessSequence. More...
 
class  ContinuousProcessStepLength
 To store step length in LengthType and unique index in ProcessSequence of shortest step ContinuousProcess. More...
 
class  CoordinateSystem
 A class to store the reference coordinate system for a geometric object. More...
 
struct  count_processes
 traits class to count any type of Process, general version More...
 
struct  count_processes< NullModel, N, void >
 count_processes traits specialization to increase process count by one. More...
 
struct  count_processes< TProcess, N, typename std::enable_if_t< is_process_v< std::decay_t< TProcess > > &&!std::decay_t< TProcess >::is_process_sequence > >
 count_processes traits specialization to increase process count by one. More...
 
struct  count_processes< TProcess, N, typename std::enable_if_t< is_process_v< std::decay_t< TProcess > > &&std::decay_t< TProcess >::is_process_sequence > >
 count_processes traits specialization to increase process count by getNumberOfProcesses(). More...
 
struct  DecayProcess
 Process decribing the decay of particles. More...
 
class  DefaultSecondaryProducer
 Class to handle the generation of new secondaries. More...
 
class  DensityFunction
 
class  DummyOutputManager
 
class  Empty
 
class  Environment
 Base Evnironment class Describes the Environment in which the shower is propagated. More...
 
class  ExponentialDistribution
 
class  ExponentialRefractiveIndex
 An exponential refractive index. More...
 
class  FlatExponential
 flat exponential density distribution with

\[ \varrho(r) = \varrho_0 \exp\left( \frac{1}{\lambda} (r - p) \cdot \vec{a} \right). \]

\( \vec{a} \) denotes the axis and should be normalized to avoid degeneracy with the scale parameter \( \lambda \). More...

 
class  FourVector
 Description of physical four-vectors. More...
 
class  FunctionTimer
 Wraps and measures the runtime of a single function type object. More...
 
class  HadronicElasticInteraction
 A simple model for elastic hadronic interactions based on the formulas in Gaisser, Engel, Resconi, Cosmic Rays and Particle Physics (Cambridge Univ. More...
 
struct  has_method_doBoundaryCrossing
 traits test for BoundaryCrossingProcess::doBoundaryCrossing method More...
 
struct  has_method_doContinuous
 traits test for ContinuousProcess::doContinuous method More...
 
struct  has_method_doDecay
 traits test for DecayProcess::doDecay method More...
 
struct  has_method_doInteract
 traits test for InteractionProcess::doInteraction method More...
 
struct  has_method_doSecondaries
 traits test for SecondariesProcess::doSecondaries method More...
 
struct  has_method_doStack
 traits test for StackProcess::doStack method More...
 
struct  has_method_getInteractionLength
 traits test for InteractionProcess::getInteractionLength method More...
 
struct  has_method_getLifetime
 traits test for DecayProcess::getLifetime method More...
 
struct  has_method_getMaxStepLength
 traits test for ContinuousProcess::getMaxStepLength method More...
 
class  Helix
 
class  HomogeneousMedium
 
class  IEmpty
 Intended for usage as default template argument for environments with no properties. More...
 
class  IMagneticFieldModel
 An interface for magnetic field models. More...
 
class  IMediumModel
 
class  IMediumPropertyModel
 An interface for type of media, needed e.g. More...
 
class  InhomogeneousMedium
 
class  InteractionCounter
 
class  InteractionHistogram
 Class that creates and stores histograms of collisions \(dN/dE_{lab}\), \(dN/d\sqrt{s}\) which is used by class InteractionCounter. More...
 
class  InteractionLengthModifier
 
class  InteractionProcess
 Process describing the interaction of particles. More...
 
class  Intersect
 This is a CRTP class to provide a generic volume-tree intersection for the purpose of tracking. More...
 
class  Intersections
 Container to store and return a list of intersections of a trajectory with a geometric volume objects in space. More...
 
class  IRefractiveIndexModel
 An interface for refractive index models. More...
 
struct  is_boundary_process
 A traits marker to identify BoundaryProcess. More...
 
struct  is_boundary_process< TProcess, std::enable_if_t< std::is_base_of_v< BoundaryCrossingProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 ProcessTraits specialization to flag BoundaryProcess objects. More...
 
struct  is_continuous_process
 A traits marker to identify ContinuousProcess. More...
 
struct  is_continuous_process< TProcess, std::enable_if_t< std::is_base_of_v< ContinuousProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 ProcessTraits specialization to flag ContinuousProcess objects. More...
 
struct  is_decay_process
 A traits marker to identify DecayProcess. More...
 
struct  is_decay_process< TProcess, std::enable_if_t< std::is_base_of_v< DecayProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 ProcessTraits specialization to flag DecayProcess objects. More...
 
struct  is_interaction_process
 A traits marker to identify InteractionProcess. More...
 
struct  is_interaction_process< TProcess, std::enable_if_t< std::is_base_of_v< InteractionProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 ProcessTraits specialization to flag InteractionProcess objects. More...
 
struct  is_process
 A traits marker to identify BaseProcess, thus any type of process. More...
 
struct  is_process< TNull, std::enable_if_t< std::is_base_of_v< NullModel, typename std::decay_t< TNull > > > >
 is_process traits specialization to indicate compatibility with BaseProcess More...
 
struct  is_process< TProcess, std::enable_if_t< std::is_base_of_v< BaseProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 is_process traits specialization to indicate inheritance from BaseProcess More...
 
struct  is_secondaries_process
 A traits marker to identify SecondariesProcess. More...
 
struct  is_secondaries_process< TProcess, std::enable_if_t< std::is_base_of_v< SecondariesProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 ProcessTraits specialization to flag SecondariesProcess objects. More...
 
struct  is_stack_process
 A traits marker to identify StackProcess. More...
 
struct  is_stack_process< TProcess, std::enable_if_t< std::is_base_of_v< StackProcess< typename std::decay_t< TProcess > >, typename std::decay_t< TProcess > > > >
 ProcessTraits specialization to flag StackProcess objects. More...
 
class  IVolume
 
class  LayeredSphericalAtmosphereBuilder
 Helper class to setup concentric spheres of layered atmosphere with spcified density profiles (exponential, linear, ...). More...
 
class  LeapFrogTrajectory
 The LeapFrogTrajectory stores information on one leap-frog step. More...
 
class  Line
 A Line describes a movement in three dimensional space. More...
 
class  LinearApproximationIntegrator
 
class  LongitudinalProfile
 
class  make_layered_spherical_atmosphere_builder
 Helper class to create LayeredSphericalAtmosphereBuilder, the extra environment models have to be passed as template-template argument to make_layered_spherical_atmosphere_builder, the member function create does then take an unspecified number of extra parameters to internalize those models for all layers later produced. More...
 
struct  MediumData
 Simple object to group together the properties of a medium. More...
 
class  MediumPropertyModel
 A model for the energy loss property of a medium. More...
 
struct  NameModel
 
class  NoOutput
 This is the base class for all outputs so that they can be stored in homogeneous containers. More...
 
class  NuclearComposition
 Describes the composition of matter Allowes and handles the creation of custom matter compositions. More...
 
class  NullModel
 Process that does nothing. More...
 
class  ObservationPlane
 The ObservationPlane writes PDG codes, energies, and distances of particles to the central point of the plane into its output file. More...
 
class  ObservationPlaneWriterParquet
 
class  OnShellCheck
 
class  OutputManager
 
class  ParquetStreamer
 This class automates the construction of simple tabular Parquet files using the parquet::StreamWriter. More...
 
class  ParticleBase
 The base class to define the readout of particle properties from a particle stack. More...
 
class  ParticleCut
 simple ParticleCut process. More...
 
class  ParticleInterface
 Example of a particle object on the stack. More...
 
class  Path
 This class represents a (potentially) curved path between two points using N >= 1 straight-line segments. More...
 
class  Plane
 
class  Point
 
class  ProcessSequence
 
 Definition of a static process list/sequence
More...
 
class  QuantityVector
 
class  RNGManager
 
class  SecondariesProcess
 Processes acting on the secondaries produced by other processes. More...
 
class  SecondaryView
 SecondaryView can only be constructed by giving a valid Projectile particle, following calls to addSecondary will populate the original Stack, but will be directly accessible via the SecondaryView, e.g.StackViewPr. More...
 
class  ShowerAxis
 The environment::ShowerAxis is created from a Point and a Vector and inside an Environment. More...
 
class  Singleton
 Curiously Recurring Template Pattern (CRTP) for Meyers singleton. More...
 
class  SlidingPlanarExponential
 The SlidingPlanarExponential models mass density as

\[ \varrho(r) = \varrho_0 \exp\left( \frac{|p_0 - r|}{\lambda} \right). \]

For grammage/length conversion, the density distribution is approximated as locally flat at the starting point \( r_0 \) of the trajectory with the axis pointing from \( p_0 \) to \( r_0 \). More...

 
class  SlidingPlanarTabular
 The SlidingPlanarTabular models mass density as

\[ \varrho(r) = \varrho_0 \rho\left( |p_0 - r| \right). \]

For grammage/length conversion, the density distribution is approximated as locally flat at the starting point \( r_0 \) of the trajectory with the axis pointing rom \( p_0 \) to \( r_0 \) defining the local height. More...

 
class  Sphere
 Describes a sphere in space. More...
 
class  Stack
 The Stack class provides (and connects) the main particle data storage machinery. More...
 
class  StackInspector
 
class  StackIteratorInterface
 The StackIteratorInterface is the main interface to iterator over particles on a stack. More...
 
class  StackProcess
 Process to act on the entire particle stack. More...
 
class  StraightTrajectory
 This implements a straight trajectory between two points. More...
 
class  SwitchProcessSequence
 Class to switch between two process branches. More...
 
class  Timer
 
class  TrackWriter
 
class  TrackWriterParquet
 
class  UniformMagneticField
 A uniform (constant) magnetic field. More...
 
class  UniformRealDistribution
 
class  UniformRefractiveIndex
 A uniform refractive index. More...
 
struct  Universe
 
class  Vector
 
class  VectorStackImpl
 Memory implementation of the most simple (stupid) particle stack object. More...
 
class  VolumeTreeNode
 
class  WeightProviderIterator
 Double Iterator Iterator that allowes the iteration of two individual lists at the same time. More...
 

Typedefs

using CodeIntType = int32_t std::underlying_type< Code >::type
 The Code enum is the actual place to define CORSIKA 8 particle codes. More...
 
using PDGCodeType = std::underlying_type< PDGCode >::type
 
typedef Vector< hepmomentum_dMomentumVector
 A 3D vector defined in a specific coordinate system with units HEPMomentumType.
 
typedef Vector< dimensionless_dDirectionVector
 A 3D vector defined in a specific coordinate system with no units. More...
 
typedef Vector< SpeedType::dimension_type > VelocityVector
 A 3D vector defined in a specific coordinate system with units "velocity_t".
 
typedef Eigen::Transform< double, 3, Eigen::Affine > EigenTransform
 
typedef Eigen::Translation< double, 3 > EigenTranslation
 
using CoordinateSystemPtr = std::shared_ptr< CoordinateSystem const >
 To refer to CoordinateSystems, only the CoordinateSystemPtr must be used.
 
typedef Vector< magnetic_flux_density_dMagneticFieldVector
 
typedef RNGManager ::prng_type default_prng_type
 
template<typename Stack1Impl , typename Stack2Impl , template< typename > typename _PI, template< typename T1, template< class > class T2 > class _MSecondaryProducer = DefaultSecondaryProducer>
using CombinedStack = Stack< CombinedStackImpl< Stack1Impl, Stack2Impl >, _PI, _MSecondaryProducer >
 Helper template alias CombinedStack to construct new combined stack from two stack data objects and a particle readout interface. More...
 
using MediumIntType = int16_t std::underlying_type< Medium >::type
 
typedef Stack< VectorStackImpl, ParticleInterfaceVectorStack
 

Enumerations

enum  MediumType {
  Unknown, Element, RadioactiveElement, InorganicCompound,
  OrganicCompound, Polymer, Mixture, BiologicalDosimetry
}
 General type of medium.
 
enum  StateOfMatter {
  Unknown, Solid, Liquid, Gas,
  DiatomicGas
}
 Physical state of medium.
 

Functions

std::false_type is_timer_impl (...)
 
template<typename T , typename U >
std::true_type is_timer_impl (Timer< T, U > const volatile &)
 
std::shared_ptr< spdlog::logger > create_logger (std::string const &name, bool const defaultlog=false)
 Create a new C8-style logger. More...
 
std::shared_ptr< spdlog::logger > get_logger (std::string const &name, bool const defaultlog=false)
 Get a smart pointer to an existing logger. More...
 
int16_t constexpr get_charge_number (Code const)
 electric charge in units of e
 
ElectricChargeType constexpr get_charge (Code const)
 electric charge
 
HEPMassType constexpr get_mass (Code const)
 mass
 
HEPEnergyType constexpr get_kinetic_energy_threshold (Code const)
 get kinetic energy threshold below which the particle is discarded, by default set to zero
 
void constexpr set_kinetic_energy_threshold (Code const, HEPEnergyType const)
 set kinetic energy threshold below which the particle is discarded
 
void set_kinetic_energy_threshold (std::pair< Code const, HEPEnergyType const > p)
 
void set_kinetic_energy_thresholds (std::unordered_map< Code const, HEPEnergyType const > const &eCuts)
 
PDGCode constexpr get_PDG (Code const)
 Particle code according to PDG, "Monte Carlo Particle Numbering Scheme".
 
PDGCode constexpr get_PDG (unsigned int A, unsigned int Z)
 
std::string_view constexpr get_name (Code const)
 name of the particle as string
 
TimeType constexpr get_lifetime (Code const)
 lifetime
 
bool constexpr is_nucleus (Code const)
 true iff the particle is a hard-coded nucleus or Code::Nucleus
 
bool constexpr is_hadron (Code const)
 true iff particle is hadron
 
bool constexpr is_em (Code const)
 true iff particle is electron, positron or photon
 
bool constexpr is_muon (Code const)
 true iff particle is mu+ or mu-
 
bool constexpr is_neutrino (Code const)
 true iff particle is (anti-) neutrino
 
int constexpr get_nucleus_A (Code const)
 returns A for hard-coded nucleus, otherwise 0
 
int constexpr get_nucleus_Z (Code const)
 returns Z for hard-coded nucleus, otherwise 0
 
HEPMassType get_nucleus_mass (unsigned int const, unsigned int const)
 returns mass of (A,Z) nucleus, disregarding binding energy
 
Code convert_from_PDG (PDGCode const)
 convert PDG code to CORSIKA 8 internal code
 
std::initializer_list< Code > constexpr get_all_particles ()
 
std::ostream & operator<< (std::ostream &, corsika::Code)
 the output stream operator for human-readable particle codes
 
CoordinateSystemPtr make_translation (CoordinateSystemPtr const &cs, QuantityVector< length_d > const &vector)
 Creates new CoordinateSystemPtr by translation along vector.
 
template<typename TDim >
CoordinateSystemPtr make_rotationToZ (CoordinateSystemPtr const &cs, Vector< TDim > const &vVec)
 creates a new CoordinateSystem in which vVec points in direction of the new z-axis, vVec
 
template<typename TDim >
CoordinateSystemPtr make_rotation (CoordinateSystemPtr const &cs, QuantityVector< TDim > const &axis, double const angle)
 creates a new CoordinateSystem, rotated around axis by angle.
 
template<typename TDim >
CoordinateSystemPtr make_translationAndRotation (CoordinateSystemPtr const &cs, QuantityVector< length_d > const &translation, QuantityVector< TDim > const &axis, double const angle)
 creates a new CoordinateSystem, translated by translation and rotated around axis by angle.
 
EigenTransform get_transformation (CoordinateSystem const &c1, CoordinateSystem const &c2)
 Transformation matrix from one reference system to another. More...
 
template<typename TTimeType , typename TSpaceVecType >
std::ostream & operator<< (std::ostream &os, corsika::FourVector< TTimeType, TSpaceVecType > const &qv)
 streaming operator
 
LengthType distance (Point const &p1, Point const &p2)
 
template<typename TDimension >
std::ostream & operator<< (std::ostream &os, corsika::QuantityVector< TDimension > const &qv)
 streaming operator
 
template<typename... TProcesses, typename TProcess1 >
ProcessSequence< TProcess1, decltype(make_sequence(std::declval< TProcesses >)...))> make_sequence (TProcess1 &&vA, TProcesses &&... vBs)
 
template<typename TProcess1 , typename TProcess2 >
ProcessSequence< TProcess1, TProcess2 > make_sequence (TProcess1 &&vA, TProcess2 &&vB)
 
template<typename TProcess >
ProcessSequence< TProcess, NullModelmake_sequence (TProcess &&vA)
 
std::vector< double > solve_linear_real (double a, double b)
 
std::vector< std::complex< double > > solve_linear (double a, double b)
 
std::vector< std::complex< double > > solve_quadratic (long double a, long double b, long double c, double const epsilon=1e-12)
 
std::vector< double > solve_quadratic_real (long double a, long double b, long double c, double const epsilon=1e-12)
 
template<class Axes , class Storage >
void save_hist (boost::histogram::histogram< Axes, Storage > const &h, std::string const &filename, bool overwrite=true)
 
template<typename TCondition , typename TSequence , typename USequence , typename = std::enable_if_t<is_process_v<typename std::decay_t<TSequence>> && is_process_v<typename std::decay_t<USequence>>>>
SwitchProcessSequence< TCondition, TSequence, USequence > make_select (TCondition &&selector, TSequence &&vA, USequence &&vB)
 the functin make_select(select, proc1, proc1) assembles many BaseProcesses, and ProcessSequences into a SwitchProcessSequence, all combinatorics are allowed. More...
 
boost::filesystem::path corsika_data (boost::filesystem::path const &filename)
 
std::vector< double > solve_cubic_depressed_disciminant_real (long double p, long double q, long double const disc, double const epsilon=1e-12)
 Solve depressed cubic: x^3 + p x + q = 0.
 
std::vector< double > solve_cubic_depressed_real (long double p, long double q, double const epsilon=1e-12)
 
std::vector< double > solve_cubic_real_analytic (long double a, long double b, long double c, long double d, double const epsilon=1e-12)
 Solve a x^3 + b x^2 + c x + d = 0. More...
 
template<typename T >
cubic_function (T x, T a, T b, T c, T d)
 Cubic function. More...
 
template<typename T >
cubic_function_dfdx (T x, T a, T b, T c)
 
template<typename T >
cubic_function_d2fd2x (T x, T a, T b)
 
std::vector< double > solve_cubic_real (long double a, long double b, long double c, long double d, double const epsilon=1e-12)
 Iterative approach to solve: a x^3 + b x^2 + c x + d = 0. More...
 
std::vector< double > solve_quartic_real (long double a, long double b, long double c, long double d, long double e, double const epsilon=1e-12)
 solve quartic equation a*x^4 + b*x^3 + c*x^2 + d*x + e
 
constexpr MediumData const & mediumData (Medium const m)
 

Variables

template<class TProcess , typename TReturn , typename TParticle >
bool constexpr has_method_doBoundaryCrossing_v
 
template<class TProcess , typename TReturn , typename TArg1 , typename TArg2 >
bool constexpr has_method_doContinuous_v
 
template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr has_method_getMaxStepLength_v
 value traits type More...
 
template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr has_method_doDecay_v
 
template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr has_method_getLifetime_v
 value traits type More...
 
template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr has_method_doInteract_v
 
template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr has_method_getInteractionLength_v
 
template<class TProcess , typename TReturn , typename... TArg>
bool constexpr has_method_doSecondaries_v
 
template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr has_method_doStack_v
 
template<typename T >
constexpr bool is_timer_v
 
const std::string minimal_pattern {"[%n:%^%-8l%$] %v"}
 
const std::string default_pattern {"[%n:%^%-8l%$(%s:%#)] %v"}
 
const std::string source_pattern {"[%n:%^%-8l%$(%s:%!:%#)] %v"}
 
template<typename TProcess >
bool constexpr is_process_v = is_process<TProcess>::value
 
template<typename TProcess >
bool constexpr is_continuous_process_v = is_continuous_process<TProcess>::value
 
template<typename TProcess >
bool constexpr is_decay_process_v = is_decay_process<TProcess>::value
 
template<typename TProcess >
bool constexpr is_stack_process_v = is_stack_process<TProcess>::value
 
template<typename TProcess >
bool constexpr is_secondaries_process_v = is_secondaries_process<TProcess>::value
 
template<typename TProcess >
bool constexpr is_boundary_process_v = is_boundary_process<TProcess>::value
 
template<typename TProcess >
bool constexpr is_interaction_process_v = is_interaction_process<TProcess>::value
 
template<typename TClass >
bool constexpr contains_stack_process_v = contains_stack_process<TClass>::value
 
enum  ProcessReturn : int { Ok = (1 << 0), ParticleAbsorbed = (1 << 2), Interacted = (1 << 3), Decayed = (1 << 4) }
 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 "|="
 
ProcessReturn operator| (ProcessReturn a, ProcessReturn b)
 
ProcessReturnoperator|= (ProcessReturn &a, const ProcessReturn b)
 
ProcessReturn operator & (const ProcessReturn a, const ProcessReturn b)
 
bool operator== (const ProcessReturn a, const ProcessReturn b)
 
bool isOk (const ProcessReturn a)
 
bool isAbsorbed (const ProcessReturn a)
 
bool isDecayed (const ProcessReturn a)
 
bool isInteracted (const ProcessReturn a)
 

Detailed Description

The cascade namespace assembles all objects needed to simulate full particles cascades.

A general inhomogeneous medium.

a homogeneous medium

`, since they are used everywhere as integral part of the framework.

With this class modules can register streams of random numbers.

The mass density distribution TDensityFunction must be a \(C^2\)-function.

Typedef Documentation

◆ CombinedStack

template<typename Stack1Impl , typename Stack2Impl , template< typename > typename _PI, template< typename T1, template< class > class T2 > class _MSecondaryProducer = DefaultSecondaryProducer>
using corsika::CombinedStack = typedef Stack<CombinedStackImpl<Stack1Impl, Stack2Impl>, _PI, _MSecondaryProducer>

Helper template alias CombinedStack to construct new combined stack from two stack data objects and a particle readout interface.

Note that the Stack2Impl provides only /additional/ data to Stack1Impl. This is important (see above) since tuple data for initialization are forwarded to Stack1Impl (first).

Definition at line 135 of file CombinedStack.hpp.

◆ DirectionVector

A 3D vector defined in a specific coordinate system with no units.

But, note, this is not automatically normaliyed! It is not a "NormalVector".

Definition at line 32 of file PhysicalGeometry.hpp.

Function Documentation

◆ create_logger()

std::shared_ptr<spdlog::logger> corsika::create_logger ( std::string const &  name,
bool const  defaultlog = false 
)

Create a new C8-style logger.

Use this if you are explicitly (and can guarantee) that you are creating a logger for the first time. It is recommended that for regular usage, the get_logger function is used instead as that will also create the logger if it has not yet been created.

Calling create_logger twice to create the same logger will result in an spdlog duplicate exception.

Parameters
nameThe unique name of the logger.
defaultlogIf True, set this as the default logger.
Returns
The constructed and formatted logger.

◆ cubic_function()

template<typename T >
T corsika::cubic_function ( x,
a,
b,
c,
d 
)

Cubic function.

T must be a floating point type.

Returns
a x^3 + b x^2 + c x + d

◆ cubic_function_d2fd2x()

template<typename T >
T corsika::cubic_function_d2fd2x ( x,
a,
b 
)
Returns
6 a x + 2 b

◆ cubic_function_dfdx()

template<typename T >
T corsika::cubic_function_dfdx ( x,
a,
b,
c 
)
Returns
3 a x^2 + 2 b x + c

◆ get_logger()

std::shared_ptr<spdlog::logger> corsika::get_logger ( std::string const &  name,
bool const  defaultlog = false 
)

Get a smart pointer to an existing logger.

This should be the default method for code to obtain a logger. If the logger does not exist, it is created and returned to the caller.

This should be preferred over create_logger.

Parameters
nameThe name of the logger to get.
defaultlogIf True, make this the default logger.
Returns
The constructed and formatted logger.

◆ get_transformation()

EigenTransform corsika::get_transformation ( CoordinateSystem const &  c1,
CoordinateSystem const &  c2 
)

Transformation matrix from one reference system to another.

returns the transformation matrix necessary to transform primitives with coordinates in pFrom to pTo, e.g. \( \vec{v}^{\text{(to)}} = \mathcal{M} \vec{v}^{\text{(from)}} \) ( \( \vec{v}^{(.)} \) denotes the coordinates/components of the component in the indicated CoordinateSystem).

Todo:
make this a protected member of CoordinateSystem

◆ make_select()

template<typename TCondition , typename TSequence , typename USequence , typename = std::enable_if_t<is_process_v<typename std::decay_t<TSequence>> && is_process_v<typename std::decay_t<USequence>>>>
SwitchProcessSequence<TCondition, TSequence, USequence> corsika::make_select ( TCondition &&  selector,
TSequence &&  vA,
USequence &&  vB 
)

the functin make_select(select, proc1, proc1) assembles many BaseProcesses, and ProcessSequences into a SwitchProcessSequence, all combinatorics are allowed.

Parameters
selectormust provide bool operator()(Particle const&) const
vAneeds to derive from BaseProcess or ProcessSequence
vBneeds to derive from BaseProcess or ProcessSequence

Definition at line 210 of file SwitchProcessSequence.hpp.

◆ solve_cubic_real()

std::vector<double> corsika::solve_cubic_real ( long double  a,
long double  b,
long double  c,
long double  d,
double const  epsilon = 1e-12 
)

Iterative approach to solve: a x^3 + b x^2 + c x + d = 0.

This is often fastest and most precise.

◆ solve_cubic_real_analytic()

std::vector<double> corsika::solve_cubic_real_analytic ( long double  a,
long double  b,
long double  c,
long double  d,
double const  epsilon = 1e-12 
)

Solve a x^3 + b x^2 + c x + d = 0.

Analytical approach. Not very stable in all conditions.

Variable Documentation

◆ has_method_doBoundaryCrossing_v

template<class TProcess , typename TReturn , typename TParticle >
bool constexpr corsika::has_method_doBoundaryCrossing_v
Initial value:
=
has_method_doBoundaryCrossing<TProcess, TReturn, TParticle>::value

Definition at line 57 of file BoundaryCrossingProcess.hpp.

◆ has_method_doContinuous_v

template<class TProcess , typename TReturn , typename TArg1 , typename TArg2 >
bool constexpr corsika::has_method_doContinuous_v
Initial value:
=
has_method_doContinuous<TProcess, TReturn, TArg1, TArg2>::value

Definition at line 52 of file ContinuousProcess.hpp.

◆ has_method_doDecay_v

template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr corsika::has_method_doDecay_v
Initial value:
=
has_method_doDecay<TProcess, TReturn, TArgs...>::value

Definition at line 54 of file DecayProcess.hpp.

◆ has_method_doInteract_v

template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr corsika::has_method_doInteract_v
Initial value:
=
has_method_doInteract<TProcess, TReturn, TArgs...>::value

Definition at line 52 of file InteractionProcess.hpp.

◆ has_method_doSecondaries_v

template<class TProcess , typename TReturn , typename... TArg>
bool constexpr corsika::has_method_doSecondaries_v
Initial value:
=
has_method_doSecondaries<TProcess, TReturn, TArg...>::value

Definition at line 52 of file SecondariesProcess.hpp.

◆ has_method_doStack_v

template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr corsika::has_method_doStack_v
Initial value:
=
has_method_doStack<TProcess, TReturn, TArgs...>::value

Definition at line 55 of file StackProcess.hpp.

◆ has_method_getInteractionLength_v

template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr corsika::has_method_getInteractionLength_v
Initial value:
=
has_method_getInteractionLength<TProcess, TReturn, TArgs...>::value

Definition at line 93 of file InteractionProcess.hpp.

◆ has_method_getLifetime_v

template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr corsika::has_method_getLifetime_v
Initial value:
=
has_method_getLifetime<TProcess, TReturn, TArgs...>::value

value traits type

Definition at line 92 of file DecayProcess.hpp.

◆ has_method_getMaxStepLength_v

template<class TProcess , typename TReturn , typename... TArgs>
bool constexpr corsika::has_method_getMaxStepLength_v
Initial value:
=
has_method_getMaxStepLength<TProcess, TReturn, TArgs...>::value

value traits type

Definition at line 91 of file ContinuousProcess.hpp.

◆ is_timer_v

template<typename T >
constexpr bool corsika::is_timer_v
Initial value:
=
std::is_same_v<decltype(is_timer_impl(std::declval<T&>())), std::true_type>

Definition at line 59 of file Timer.hpp.