Version: SMASH-2.0
scatteraction.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_SCATTERACTION_H_
11 #define SRC_INCLUDE_SMASH_SCATTERACTION_H_
12 
13 #include <memory>
14 #include <set>
15 #include <string>
16 #include <utility>
17 
18 #include "action.h"
19 #include "cxx14compat.h"
20 #include "isoparticletype.h"
21 #include "stringprocess.h"
22 
23 namespace smash {
24 
30 class ScatterAction : public Action {
31  public:
44  ScatterAction(const ParticleData& in_part1, const ParticleData& in_part2,
45  double time, bool isotropic = false,
46  double string_formation_time = 1.0, double box_length = -1.0);
47 
53  void add_collision(CollisionBranchPtr p);
54 
60  void add_collisions(CollisionBranchList pv);
61 
77  double transverse_distance_sqr() const;
78 
86  double cov_transverse_distance_sqr() const;
95  double mandelstam_s() const;
96 
103  double relative_velocity() const;
104 
112  void generate_final_state() override;
113 
119  double get_total_weight() const override;
120 
126  double get_partial_weight() const override;
127 
131  void sample_angles(std::pair<double, double> masses,
132  double kinetic_energy_cm) override;
133 
152  void add_all_scatterings(double elastic_parameter, bool two_to_one,
153  ReactionsBitSet included_2to2,
154  MultiParticleReactionsBitSet included_multi,
155  double low_snn_cut, bool strings_switch,
156  bool use_AQM, bool strings_with_probability,
157  NNbarTreatment nnbar_treatment, double scale_xs,
158  double additional_el_xs);
159 
165  const CollisionBranchList& collision_channels() {
166  return collision_channels_;
167  }
168 
173  class InvalidScatterAction : public std::invalid_argument {
174  using std::invalid_argument::invalid_argument;
175  };
176 
186  string_process_ = str_proc;
187  }
188 
194  virtual double cross_section() const { return total_cross_section_; }
195 
196  protected:
203  double cm_momentum() const;
210  double cm_momentum_squared() const;
211 
222  ThreeVector beta_cm() const;
229  double gamma_cm() const;
230 
232  void elastic_scattering();
233 
235  void inelastic_scattering();
236 
239 
244  void string_excitation();
245 
250  void format_debug_output(std::ostream& out) const override;
251 
253  CollisionBranchList collision_channels_;
254 
257 
260 
262  bool isotropic_ = false;
263 
266 
267  private:
273  bool is_elastic() const;
274 
279  void resonance_formation();
280 
283 };
284 
285 } // namespace smash
286 
287 #endif // SRC_INCLUDE_SMASH_SCATTERACTION_H_
smash::ScatterAction::transverse_distance_sqr
double transverse_distance_sqr() const
Calculate the transverse distance of the two incoming particles in their local rest frame.
Definition: scatteraction.cc:182
smash
Definition: action.h:24
smash::ScatterAction::resonance_formation
void resonance_formation()
Perform a 2->1 resonance-formation process.
Definition: scatteraction.cc:447
smash::ScatterAction::get_partial_weight
double get_partial_weight() const override
Get the partial cross section of the chosen channel.
Definition: scatteraction.cc:146
smash::ParticleData
Definition: particledata.h:52
cxx14compat.h
smash::ScatterAction
Definition: scatteraction.h:30
smash::ScatterAction::cm_momentum
double cm_momentum() const
Get the momentum of the center of mass of the incoming particles in the calculation frame.
Definition: scatteraction.cc:161
smash::ScatterAction::format_debug_output
void format_debug_output(std::ostream &out) const override
Definition: scatteraction.cc:538
smash::ScatterAction::cov_transverse_distance_sqr
double cov_transverse_distance_sqr() const
Calculate the transverse distance of the two incoming particles in their local rest frame written in ...
Definition: scatteraction.cc:219
smash::ScatterAction::collision_channels_
CollisionBranchList collision_channels_
List of possible collisions.
Definition: scatteraction.h:253
smash::ScatterAction::elastic_scattering
void elastic_scattering()
Perform an elastic two-body scattering, i.e. just exchange momentum.
Definition: scatteraction.cc:424
smash::ScatterAction::is_elastic
bool is_elastic() const
Check if the scattering is elastic.
smash::ScatterAction::beta_cm
ThreeVector beta_cm() const
Get the velocity of the center of mass of the scattering/incoming particles in the calculation frame.
Definition: scatteraction.cc:151
action.h
ReactionsBitSet
std::bitset< 10 > ReactionsBitSet
Container for the 2 to 2 reactions in the code.
Definition: forwarddeclarations.h:231
smash::ScatterAction::string_process_
StringProcess * string_process_
Pointer to interface class for strings.
Definition: scatteraction.h:282
MultiParticleReactionsBitSet
std::bitset< 2 > MultiParticleReactionsBitSet
Container for the 2 to 2 reactions in the code.
Definition: forwarddeclarations.h:240
smash::StringProcess
String excitation processes used in SMASH.
Definition: stringprocess.h:45
smash::ScatterAction::ScatterAction
ScatterAction(const ParticleData &in_part1, const ParticleData &in_part2, double time, bool isotropic=false, double string_formation_time=1.0, double box_length=-1.0)
Construct a ScatterAction object.
Definition: scatteraction.cc:29
smash::ScatterAction::add_all_scatterings
void add_all_scatterings(double elastic_parameter, bool two_to_one, ReactionsBitSet included_2to2, MultiParticleReactionsBitSet included_multi, double low_snn_cut, bool strings_switch, bool use_AQM, bool strings_with_probability, NNbarTreatment nnbar_treatment, double scale_xs, double additional_el_xs)
Add all possible scattering subprocesses for this action object.
Definition: scatteraction.cc:110
smash::ThreeVector
Definition: threevector.h:31
smash::ScatterAction::collision_channels
const CollisionBranchList & collision_channels()
Get list of possible collision channels.
Definition: scatteraction.h:165
smash::ScatterAction::string_excitation
void string_excitation()
Todo(ryu): document better - it is not really UrQMD-based, isn't it? Perform the UrQMD-based string e...
Definition: scatteraction.cc:469
smash::ScatterAction::cm_momentum_squared
double cm_momentum_squared() const
Get the squared momentum of the center of mass of the incoming particles in the calculation frame.
Definition: scatteraction.cc:167
smash::ScatterAction::get_total_weight
double get_total_weight() const override
Get the total cross section of scattering particles.
Definition: scatteraction.cc:141
smash::ScatterAction::string_formation_time_
double string_formation_time_
Time fragments take to be fully formed in hard string excitation.
Definition: scatteraction.h:265
isoparticletype.h
smash::ScatterAction::total_cross_section_
double total_cross_section_
Total hadronic cross section.
Definition: scatteraction.h:256
smash::ScatterAction::cross_section
virtual double cross_section() const
Get the total cross section of the scattering particles.
Definition: scatteraction.h:194
stringprocess.h
smash::ScatterAction::gamma_cm
double gamma_cm() const
Get the gamma factor corresponding to a boost to the center of mass frame of the colliding particles.
Definition: scatteraction.cc:155
smash::ScatterAction::sample_angles
void sample_angles(std::pair< double, double > masses, double kinetic_energy_cm) override
Sample final-state angles in a 2->2 collision (possibly anisotropic).
Definition: scatteraction.cc:291
smash::ScatterAction::isotropic_
bool isotropic_
Do this collision isotropically?
Definition: scatteraction.h:262
smash::ScatterAction::add_collision
void add_collision(CollisionBranchPtr p)
Add a new collision channel.
Definition: scatteraction.cc:40
smash::Action
Definition: action.h:35
smash::ScatterAction::inelastic_scattering
void inelastic_scattering()
Perform an inelastic two-body scattering, i.e. new particles are formed.
Definition: scatteraction.cc:434
smash::pdg::p
constexpr int p
Proton.
Definition: pdgcode_constants.h:28
NNbarTreatment
NNbarTreatment
Treatment of N Nbar Annihilation.
Definition: forwarddeclarations.h:176
smash::ScatterAction::partial_cross_section_
double partial_cross_section_
Partial cross-section to the chosen outgoing channel.
Definition: scatteraction.h:259
smash::ScatterAction::generate_final_state
void generate_final_state() override
Generate the final-state of the scattering process.
Definition: scatteraction.cc:49
smash::ScatterAction::set_string_interface
void set_string_interface(StringProcess *str_proc)
Set the StringProcess object to be used.
Definition: scatteraction.h:185
smash::ScatterAction::relative_velocity
double relative_velocity() const
Get the relative velocity of the two incoming particles.
Definition: scatteraction.cc:173
smash::ScatterAction::two_to_three_scattering
void two_to_three_scattering()
Perform a two-to-three-body scattering.
Definition: scatteraction.cc:440
smash::ScatterAction::add_collisions
void add_collisions(CollisionBranchList pv)
Add several new collision channels at once.
Definition: scatteraction.cc:44
smash::ScatterAction::mandelstam_s
double mandelstam_s() const
Determine the Mandelstam s variable,.
Definition: scatteraction.cc:159
smash::ScatterAction::InvalidScatterAction
Definition: scatteraction.h:173