Version: SMASH-2.0
scatteractionmulti.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2015-2020
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
10 #ifndef SRC_INCLUDE_SMASH_SCATTERACTIONMULTI_H_
11 #define SRC_INCLUDE_SMASH_SCATTERACTIONMULTI_H_
12 
13 #include "action.h"
14 
15 namespace smash {
16 
23 class ScatterActionMulti : public Action {
24  public:
31  ScatterActionMulti(const ParticleList& in_plist, double time);
32 
39  void generate_final_state() override;
40 
47  double get_total_weight() const override;
48 
55  double get_partial_weight() const override;
56 
64  void add_possible_reactions(double dt, const double gcell_vol,
65  const MultiParticleReactionsBitSet incl_multi);
66 
72  const CollisionBranchList& reaction_channels() { return reaction_channels_; }
73 
80  class InvalidScatterActionMulti : public std::invalid_argument {
81  using std::invalid_argument::invalid_argument;
82  };
83 
84  protected:
85  /*
86  * \ingroup logging
87  * Writes information about this action to the \p out stream.
88  */
89  void format_debug_output(std::ostream& out) const override;
90 
91  private:
97  void add_reaction(CollisionBranchPtr p);
98 
104  void add_reactions(CollisionBranchList pv);
105 
110  void annihilation();
111 
113  void three_to_two();
114 
140  double probability_three_to_one(const ParticleType& type_out, double dt,
141  const double gcell_vol,
142  const int degen_factor = 1) const;
143 
166  double probability_three_to_two(const ParticleType& type_out1,
167  const ParticleType& type_out2, double dt,
168  const double gcell_vol,
169  const double degen_factor = 1.0) const;
170 
185  double calculate_I3(const double sqrts) const;
186 
200  double react_degen_factor(const int spin_factor_inc,
201  const int spin_degen_out1,
202  const int spin_degen_out2) const {
203  return static_cast<double>(spin_degen_out1 * spin_degen_out2) /
204  static_cast<double>(spin_factor_inc);
205  }
206 
216  bool three_different_pions(const ParticleData& data_a,
217  const ParticleData& data_b,
218  const ParticleData& data_c) const;
219 
229  bool two_pions_eta(const ParticleData& data_a, const ParticleData& data_b,
230  const ParticleData& data_c) const;
231 
234 
237 
239  CollisionBranchList reaction_channels_;
240 };
241 
242 } // namespace smash
243 
244 #endif // SRC_INCLUDE_SMASH_SCATTERACTIONMULTI_H_
smash
Definition: action.h:24
smash::ScatterActionMulti::reaction_channels
const CollisionBranchList & reaction_channels()
Get list of possible reaction channels.
Definition: scatteractionmulti.h:72
smash::ParticleData
Definition: particledata.h:52
smash::ScatterActionMulti::add_reactions
void add_reactions(CollisionBranchList pv)
Add several new reaction channels at once.
Definition: scatteractionmulti.cc:27
smash::ScatterActionMulti::generate_final_state
void generate_final_state() override
Generate the final-state of the multi-particle scattering process.
Definition: scatteractionmulti.cc:242
smash::ScatterActionMulti::format_debug_output
void format_debug_output(std::ostream &out) const override
Definition: scatteractionmulti.cc:413
action.h
smash::ScatterActionMulti::add_possible_reactions
void add_possible_reactions(double dt, const double gcell_vol, const MultiParticleReactionsBitSet incl_multi)
Add all possible multi-particle reactions for the given incoming particles.
Definition: scatteractionmulti.cc:48
smash::ScatterActionMulti::probability_three_to_one
double probability_three_to_one(const ParticleType &type_out, double dt, const double gcell_vol, const int degen_factor=1) const
Calculate the probability for a 3m-to-1 reaction according to the stochastic collision criterion (e....
Definition: scatteractionmulti.cc:309
MultiParticleReactionsBitSet
std::bitset< 2 > MultiParticleReactionsBitSet
Container for the 2 to 2 reactions in the code.
Definition: forwarddeclarations.h:240
smash::ScatterActionMulti::calculate_I3
double calculate_I3(const double sqrts) const
Calculate the integration necessary for the three-body phase space.
Definition: scatteractionmulti.cc:282
smash::ScatterActionMulti::add_reaction
void add_reaction(CollisionBranchPtr p)
Add a new reaction channel.
Definition: scatteractionmulti.cc:23
smash::ScatterActionMulti::partial_probability_
double partial_probability_
Partial probability of the chosen outgoing channel.
Definition: scatteractionmulti.h:236
smash::ParticleType
Definition: particletype.h:97
smash::ScatterActionMulti::react_degen_factor
double react_degen_factor(const int spin_factor_inc, const int spin_degen_out1, const int spin_degen_out2) const
Determine the spin degeneracy factor ( ) for the 3->2 reaction.
Definition: scatteractionmulti.h:200
smash::ScatterActionMulti
Definition: scatteractionmulti.h:23
smash::ScatterActionMulti::ScatterActionMulti
ScatterActionMulti(const ParticleList &in_plist, double time)
Construct a ScatterActionMulti object.
Definition: scatteractionmulti.cc:19
smash::ScatterActionMulti::two_pions_eta
bool two_pions_eta(const ParticleData &data_a, const ParticleData &data_b, const ParticleData &data_c) const
Check wether the three incoming particles are π⁺,π⁻,η or π⁰,π⁰,η in any order.
Definition: scatteractionmulti.cc:393
smash::Action
Definition: action.h:35
smash::ScatterActionMulti::InvalidScatterActionMulti
Definition: scatteractionmulti.h:80
smash::pdg::p
constexpr int p
Proton.
Definition: pdgcode_constants.h:28
smash::ScatterActionMulti::total_probability_
double total_probability_
Total probability of reaction.
Definition: scatteractionmulti.h:233
smash::ScatterActionMulti::three_to_two
void three_to_two()
Perform a 3->2 process.
Definition: scatteractionmulti.cc:373
smash::ScatterActionMulti::probability_three_to_two
double probability_three_to_two(const ParticleType &type_out1, const ParticleType &type_out2, double dt, const double gcell_vol, const double degen_factor=1.0) const
Calculate the probability for a 3-to-2 reaction according to the stochastic collision criterion (simi...
Definition: scatteractionmulti.cc:332
smash::ScatterActionMulti::three_different_pions
bool three_different_pions(const ParticleData &data_a, const ParticleData &data_b, const ParticleData &data_c) const
Check wether the three incoming particles are π⁺,π⁻,π⁰ in any order.
Definition: scatteractionmulti.cc:381
smash::ScatterActionMulti::get_total_weight
double get_total_weight() const override
Get the total probability for the reaction (scaled with the cross section scaling factors of the inco...
Definition: scatteractionmulti.cc:32
smash::ScatterActionMulti::get_partial_weight
double get_partial_weight() const override
Get the partial probability for the chosen channel (scaled with the cross section scaling factors of ...
Definition: scatteractionmulti.cc:40
smash::ScatterActionMulti::reaction_channels_
CollisionBranchList reaction_channels_
List of possible collisions.
Definition: scatteractionmulti.h:239
smash::ScatterActionMulti::annihilation
void annihilation()
Perform a n->1 annihilation process.
Definition: scatteractionmulti.cc:355