CORSIKA  @c8_version@
The framework to simulate particle cascades for astroparticle physics
Decay.hpp
1 /*
2  * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
3  *
4  * This software is distributed under the terms of the GNU General Public
5  * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
6  * the license.
7  */
8 
9 #pragma once
10 
12 #include <corsika/framework/process/DecayProcess.hpp>
13 
14 #include <set>
15 #include <vector>
16 
17 namespace corsika::sibyll {
18 
19  class Decay : public DecayProcess<Decay> {
20 
21  public:
22  Decay(const bool sibyll_listing = false);
23  Decay(std::set<Code> const&);
24  ~Decay();
25 
26  void printDecayConfig(const Code);
27  void printDecayConfig();
28  void setHadronsUnstable();
29 
30  // is Sibyll::Decay set to handle the decay of this particle?
31  bool isDecayHandled(const Code);
32 
33  // is decay possible in principle?
34  bool canHandleDecay(const Code);
35 
36  // set Sibyll::Decay to handle the decay of this particle!
37  void setHandleDecay(const Code);
38  // set Sibyll::Decay to handle the decay of this list of particles!
39  void setHandleDecay(std::vector<Code> const&);
40  // set Sibyll::Decay to handle all particle decays
41  void setHandleAllDecay();
42 
43  template <typename TParticle>
44  TimeType getLifetime(TParticle const&);
45 
50  template <typename TSecondaryView>
51  void doDecay(TSecondaryView&);
52 
53  private:
54  // internal routines to set particles stable and unstable in the COMMON blocks in
55  // sibyll
56  void setStable(std::vector<Code> const&);
57  void setUnstable(std::vector<Code> const&);
58 
59  void setStable(Code const);
60  void setUnstable(Code const);
61 
62  // internally set all particles to decay/not to decay
63  void setAllUnstable();
64  void setAllStable();
65 
66  // will this particle be stable in sibyll ?
67  bool isStable(Code const);
68  // will this particle decay in sibyll ?
69  bool isUnstable(Code const);
70  // set particle with input code to decay or not
71  void setDecay(Code const, bool const);
72 
73  // data members
74  int count_ = 0;
75  bool handleAllDecays_ = true;
76  bool sibyll_listing_ = false;
77  std::set<Code> handledDecays_;
78  };
79 
80 } // namespace corsika::sibyll
81 
82 #include <corsika/detail/modules/sibyll/Decay.inl>
void doDecay(TSecondaryView &)
In this function SIBYLL is called to produce to decay the input particle.
Interface to particle properties.
Process decribing the decay of particles.