Version: SMASH-1.8
crosssections.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2015-2019
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
10 #ifndef SRC_INCLUDE_CROSSSECTIONS_H_
11 #define SRC_INCLUDE_CROSSSECTIONS_H_
12 
13 #include "forwarddeclarations.h"
14 #include "isoparticletype.h"
15 #include "particles.h"
16 #include "potential_globals.h"
17 #include "processstring.h"
18 
19 namespace smash {
20 
22 namespace transit_high_energy {
24 const std::array<double, 2> sqrts_range_Npi = {1.9, 2.2};
30 const std::array<double, 2> sqrts_range_NN = {3.5, 4.5};
35 const double sqrts_add_lower = 0.9;
40 const double sqrts_range = 1.0;
41 
47 const double pipi_offset = 1.12;
48 
53 const double KN_offset = 15.15;
54 } // namespace transit_high_energy
55 
63  public:
72  CrossSections(const ParticleList& incoming_particles, const double sqrt_s,
73  const std::pair<FourVector, FourVector> potentials);
74 
98  CollisionBranchList generate_collision_list(
99  double elastic_parameter, bool two_to_one_switch,
100  ReactionsBitSet included_2to2, double low_snn_cut, bool strings_switch,
101  bool use_AQM, bool strings_with_probability,
102  NNbarTreatment nnbar_treatment, StringProcess* string_process) const;
103 
116  CollisionBranchPtr elastic(double elast_par, bool use_AQM) const;
117 
130  CollisionBranchList two_to_one() const;
131 
143  double formation(const ParticleType& type_resonance,
144  double cm_momentum_sqr) const;
145 
157  CollisionBranchList rare_two_to_two() const;
158 
168  CollisionBranchList two_to_two(ReactionsBitSet included_2to2) const;
169 
190  CollisionBranchList string_excitation(double total_string_xs,
191  StringProcess* string_process,
192  bool use_AQM) const;
193 
207  CollisionBranchPtr NNbar_annihilation(const double current_xs) const;
208 
216  CollisionBranchList NNbar_creation() const;
217 
225  double high_energy() const;
226 
268  double string_probability(bool strings_switch,
269  bool use_transition_probability, bool use_AQM,
270  bool treat_nnbar_with_strings) const;
271 
277  double probability_transit_high(const double region_lower,
278  const double region_upper) const;
279 
280  private:
288  double elastic_parametrization(bool use_AQM) const;
289 
298  double nn_el() const;
299 
310  double npi_el() const;
311 
322  double nk_el() const;
323 
332  CollisionBranchList npi_yk() const;
333 
340  CollisionBranchList bb_xx_except_nn(ReactionsBitSet included_2to2) const;
341 
358  CollisionBranchList nn_xx(ReactionsBitSet included_2to2) const;
359 
366  CollisionBranchList nk_xx(ReactionsBitSet included_2to2) const;
367 
373  CollisionBranchList deltak_xx(ReactionsBitSet included_2to2) const;
374 
380  CollisionBranchList ypi_xx(ReactionsBitSet included_2to2) const;
381 
389  CollisionBranchList dpi_xx(ReactionsBitSet included_2to2) const;
390 
398  CollisionBranchList dn_xx(ReactionsBitSet included_2to2) const;
399 
406  double string_hard_cross_section() const;
407 
419  CollisionBranchList bar_bar_to_nuc_nuc(const bool is_anti_particles) const;
420 
433  static double nn_to_resonance_matrix_element(double sqrts,
434  const ParticleType& type_a,
435  const ParticleType& type_b,
436  const int twoI);
437 
447  template <class IntegrationMethod>
448  CollisionBranchList find_nn_xsection_from_type(
449  const ParticleTypePtrList& type_res_1,
450  const ParticleTypePtrList& type_res_2,
451  const IntegrationMethod integrator) const;
452 
458  double cm_momentum() const {
459  const double m1 = incoming_particles_[0].effective_mass();
460  const double m2 = incoming_particles_[1].effective_mass();
461  return pCM(sqrt_s_, m1, m2);
462  }
463 
465  const ParticleList incoming_particles_;
466 
468  const double sqrt_s_;
469 
474  const std::pair<FourVector, FourVector> potentials_;
475 
477  const bool is_BBbar_pair_;
478 
486  template <typename F>
487  void add_channel(CollisionBranchList& process_list, F&& get_xsection,
488  double sqrts, const ParticleType& type_a,
489  const ParticleType& type_b) const {
490  const double sqrt_s_min =
491  type_a.min_mass_spectral() + type_b.min_mass_spectral();
492  /* Determine wether the process is below the threshold. */
493  double scale_B = 0.0;
494  double scale_I3 = 0.0;
495  bool is_below_threshold;
496  FourVector incoming_momentum = FourVector();
497  if (pot_pointer != nullptr) {
498  for (const auto p : incoming_particles_) {
499  incoming_momentum += p.momentum();
500  scale_B += pot_pointer->force_scale(p.type()).first;
501  scale_I3 +=
502  pot_pointer->force_scale(p.type()).second * p.type().isospin3_rel();
503  }
504  scale_B -= pot_pointer->force_scale(type_a).first;
505  scale_I3 -=
506  pot_pointer->force_scale(type_a).second * type_a.isospin3_rel();
507  scale_B -= pot_pointer->force_scale(type_b).first;
508  scale_I3 -=
509  pot_pointer->force_scale(type_b).second * type_b.isospin3_rel();
510  is_below_threshold = (incoming_momentum + potentials_.first * scale_B +
511  potentials_.second * scale_I3)
512  .abs() <= sqrt_s_min;
513  } else {
514  is_below_threshold = (sqrts <= sqrt_s_min);
515  }
516  if (is_below_threshold) {
517  return;
518  }
519  const auto xsection = get_xsection();
520  if (xsection > really_small) {
521  process_list.push_back(make_unique<CollisionBranch>(
522  type_a, type_b, xsection, ProcessType::TwoToTwo));
523  }
524  }
525 };
526 
527 } // namespace smash
528 
529 #endif // SRC_INCLUDE_CROSSSECTIONS_H_
smash
Definition: action.h:24
smash::CrossSections::bar_bar_to_nuc_nuc
CollisionBranchList bar_bar_to_nuc_nuc(const bool is_anti_particles) const
Calculate cross sections for resonance absorption (i.e.
Definition: crosssections.cc:2356
smash::ParticleType::min_mass_spectral
double min_mass_spectral() const
The minimum mass of the resonance, where the spectral function is non-zero.
Definition: particletype.cc:374
smash::CrossSections::incoming_particles_
const ParticleList incoming_particles_
List with data of scattering particles.
Definition: crosssections.h:465
smash::Potentials::force_scale
static std::pair< double, int > force_scale(const ParticleType &data)
Evaluates the scaling factor of the forces acting on the particles.
Definition: potentials.cc:164
smash::CrossSections::generate_collision_list
CollisionBranchList generate_collision_list(double elastic_parameter, bool two_to_one_switch, ReactionsBitSet included_2to2, double low_snn_cut, bool strings_switch, bool use_AQM, bool strings_with_probability, NNbarTreatment nnbar_treatment, StringProcess *string_process) const
Generate a list of all possible collisions between the incoming particles with the given c....
Definition: crosssections.cc:125
smash::transit_high_energy::sqrts_range_Npi
const std::array< double, 2 > sqrts_range_Npi
transition range in N-pi collisions
Definition: crosssections.h:24
smash::CrossSections::formation
double formation(const ParticleType &type_resonance, double cm_momentum_sqr) const
Return the 2-to-1 resonance production cross section for a given resonance.
Definition: crosssections.cc:745
smash::CrossSections::npi_el
double npi_el() const
Determine the elastic cross section for a nucleon-pion (Npi) collision.
Definition: crosssections.cc:313
smash::ProcessType::TwoToTwo
2->2 inelastic scattering
ReactionsBitSet
std::bitset< 10 > ReactionsBitSet
Container for the 2 to 2 reactions in the code.
Definition: forwarddeclarations.h:226
smash::CrossSections::elastic_parametrization
double elastic_parametrization(bool use_AQM) const
Choose the appropriate parametrizations for given incoming particles and return the (parametrized) el...
Definition: crosssections.cc:221
smash::pCM
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept
Definition: kinematics.h:79
smash::really_small
constexpr double really_small
Numerical error tolerance.
Definition: constants.h:37
smash::CrossSections::nn_to_resonance_matrix_element
static double nn_to_resonance_matrix_element(double sqrts, const ParticleType &type_a, const ParticleType &type_b, const int twoI)
Scattering matrix amplitude squared (divided by 16π) for resonance production processes like NN → NR ...
Definition: crosssections.cc:2422
smash::StringProcess
String excitation processes used in SMASH.
Definition: processstring.h:47
forwarddeclarations.h
smash::transit_high_energy::pipi_offset
const double pipi_offset
Constant offset as to where to turn on the strings and elastic processes for pi pi reactions (this is...
Definition: crosssections.h:47
smash::CrossSections::NNbar_annihilation
CollisionBranchPtr NNbar_annihilation(const double current_xs) const
Determine the cross section for NNbar annihilation, which is given by the difference between the para...
Definition: crosssections.cc:2315
smash::CrossSections::nk_xx
CollisionBranchList nk_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 background processes for Nucleon-Kaon (NK) Scattering.
Definition: crosssections.cc:932
smash::CrossSections::npi_yk
CollisionBranchList npi_yk() const
Find all processes for Nucleon-Pion to Hyperon-Kaon Scattering.
Definition: crosssections.cc:396
smash::CrossSections::string_probability
double string_probability(bool strings_switch, bool use_transition_probability, bool use_AQM, bool treat_nnbar_with_strings) const
Definition: crosssections.cc:2584
isoparticletype.h
smash::CrossSections::sqrt_s_
const double sqrt_s_
Total energy in the center-of-mass frame.
Definition: crosssections.h:468
smash::CrossSections::find_nn_xsection_from_type
CollisionBranchList find_nn_xsection_from_type(const ParticleTypePtrList &type_res_1, const ParticleTypePtrList &type_res_2, const IntegrationMethod integrator) const
Utility function to avoid code replication in nn_xx().
Definition: crosssections.cc:2510
smash::ParticleType::isospin3_rel
double isospin3_rel() const
Definition: particletype.h:179
smash::ParticleType
Definition: particletype.h:97
smash::transit_high_energy::sqrts_add_lower
const double sqrts_add_lower
constant for the lower end of transition region in the case of AQM this is added to the sum of masses
Definition: crosssections.h:35
smash::CrossSections::bb_xx_except_nn
CollisionBranchList bb_xx_except_nn(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes for Baryon-Baryon (BB) Scattering except the more specific Nucleon-...
Definition: crosssections.cc:832
smash::CrossSections::cm_momentum
double cm_momentum() const
Determine the momenta of the incoming particles in the center-of-mass system.
Definition: crosssections.h:458
smash::CrossSections
The cross section class assembels everything that is needed to calculate the cross section and return...
Definition: crosssections.h:62
smash::transit_high_energy::sqrts_range
const double sqrts_range
constant for the range of transition region in the case of AQM this is added to the sum of masses + s...
Definition: crosssections.h:40
smash::CrossSections::high_energy
double high_energy() const
Determine the parametrized total cross section at high energies for the given collision,...
Definition: crosssections.cc:2228
smash::CrossSections::deltak_xx
CollisionBranchList deltak_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes for Delta-Kaon (DeltaK) Scattering.
Definition: crosssections.cc:1415
smash::CrossSections::dn_xx
CollisionBranchList dn_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes involving Nucleon and (anti-) Deuteron (dN), specifically Nd → Nd',...
Definition: crosssections.cc:2034
smash::CrossSections::is_BBbar_pair_
const bool is_BBbar_pair_
Whether incoming particles are a baryon-antibaryon pair.
Definition: crosssections.h:477
smash::CrossSections::rare_two_to_two
CollisionBranchList rare_two_to_two() const
Find all 2->2 processes which are suppressed at high energies when strings are turned on with probabi...
Definition: crosssections.cc:208
smash::CrossSections::two_to_two
CollisionBranchList two_to_two(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes for the given scattering.
Definition: crosssections.cc:782
particles.h
smash::CrossSections::NNbar_creation
CollisionBranchList NNbar_creation() const
Determine the cross section for NNbar creation, which is given by detailed balance from the reverse r...
Definition: crosssections.cc:2328
smash::CrossSections::ypi_xx
CollisionBranchList ypi_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes for Hyperon-Pion (Ypi) Scattering.
Definition: crosssections.cc:1564
smash::transit_high_energy::KN_offset
const double KN_offset
Constant offset as to where to shift from 2to2 to string processes (in GeV) in the case of KN reactio...
Definition: crosssections.h:53
smash::CrossSections::two_to_one
CollisionBranchList two_to_one() const
Find all resonances that can be produced in a 2->1 collision of the two input particles and the produ...
Definition: crosssections.cc:705
processstring.h
smash::CrossSections::nk_el
double nk_el() const
Determine the elastic cross section for a nucleon-kaon (NK) collision.
Definition: crosssections.cc:610
smash::FourVector
Definition: fourvector.h:33
smash::pdg::p
constexpr int p
Proton.
Definition: pdgcode_constants.h:28
NNbarTreatment
NNbarTreatment
Treatment of N Nbar Annihilation.
Definition: forwarddeclarations.h:173
smash::CrossSections::dpi_xx
CollisionBranchList dpi_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes involving Pion and (anti-) Deuteron (dpi), specifically dπ→ NN,...
Definition: crosssections.cc:1920
smash::CrossSections::nn_el
double nn_el() const
Determine the (parametrized) elastic cross section for a nucleon-nucleon (NN) collision.
Definition: crosssections.cc:282
smash::CrossSections::elastic
CollisionBranchPtr elastic(double elast_par, bool use_AQM) const
Determine the elastic cross section for this collision.
Definition: crosssections.cc:193
smash::CrossSections::string_excitation
CollisionBranchList string_excitation(double total_string_xs, StringProcess *string_process, bool use_AQM) const
Determine the cross section for string excitations, which is given by the difference between the para...
Definition: crosssections.cc:2093
smash::pot_pointer
Potentials * pot_pointer
Pointer to a Potential class.
Definition: potential_globals.cc:17
smash::CrossSections::CrossSections
CrossSections(const ParticleList &incoming_particles, const double sqrt_s, const std::pair< FourVector, FourVector > potentials)
Construct CrossSections instance.
Definition: crosssections.cc:114
smash::CrossSections::nn_xx
CollisionBranchList nn_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes for Nucelon-Nucelon Scattering.
Definition: crosssections.cc:859
smash::transit_high_energy::sqrts_range_NN
const std::array< double, 2 > sqrts_range_NN
transition range in N-N collisions: Tuned to reproduce experimental exclusive cross section data,...
Definition: crosssections.h:30
smash::CrossSections::potentials_
const std::pair< FourVector, FourVector > potentials_
Potentials at the interacting point.
Definition: crosssections.h:474
potential_globals.h
smash::CrossSections::string_hard_cross_section
double string_hard_cross_section() const
Determine the (parametrized) hard non-diffractive string cross section for this collision.
Definition: crosssections.cc:2291
smash::CrossSections::probability_transit_high
double probability_transit_high(const double region_lower, const double region_upper) const
Definition: crosssections.cc:2674
smash::CrossSections::add_channel
void add_channel(CollisionBranchList &process_list, F &&get_xsection, double sqrts, const ParticleType &type_a, const ParticleType &type_b) const
Helper function: Add a 2-to-2 channel to a collision branch list given a cross section.
Definition: crosssections.h:487