Version: SMASH-2.0
crosssections.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_CROSSSECTIONS_H_
11 #define SRC_INCLUDE_SMASH_CROSSSECTIONS_H_
12 
13 #include <memory>
14 #include <utility>
15 
16 #include "forwarddeclarations.h"
17 #include "isoparticletype.h"
18 #include "particles.h"
19 #include "potential_globals.h"
20 #include "stringprocess.h"
21 
22 namespace smash {
23 
25 namespace transit_high_energy {
27 const std::array<double, 2> sqrts_range_Npi = {1.9, 2.2};
33 const std::array<double, 2> sqrts_range_NN = {3.5, 4.5};
38 const double sqrts_add_lower = 0.9;
43 const double sqrts_range = 1.0;
44 
50 const double pipi_offset = 1.12;
51 
56 const double KN_offset = 15.15;
57 } // namespace transit_high_energy
58 
66  public:
75  CrossSections(const ParticleList& incoming_particles, const double sqrt_s,
76  const std::pair<FourVector, FourVector> potentials);
77 
104  CollisionBranchList generate_collision_list(
105  double elastic_parameter, bool two_to_one_switch,
106  ReactionsBitSet included_2to2,
107  MultiParticleReactionsBitSet included_multi, double low_snn_cut,
108  bool strings_switch, bool use_AQM, bool strings_with_probability,
109  NNbarTreatment nnbar_treatment, StringProcess* string_process,
110  double scale_xs, double additional_el_xs) const;
111 
116  static double sum_xs_of(const CollisionBranchList& list) {
117  double xs_sum = 0.0;
118  for (auto& proc : list) {
119  xs_sum += proc->weight();
120  }
121  return xs_sum;
122  }
123 
142  CollisionBranchPtr elastic(double elast_par, bool use_AQM, double add_el_xs,
143  double scale_xs) const;
144 
160  CollisionBranchList two_to_one(const bool prevent_dprime_form) const;
161 
173  double formation(const ParticleType& type_resonance,
174  double cm_momentum_sqr) const;
175 
187  CollisionBranchList rare_two_to_two() const;
188 
198  CollisionBranchList two_to_two(ReactionsBitSet included_2to2) const;
199 
208  CollisionBranchList two_to_three() const;
209 
230  CollisionBranchList string_excitation(double total_string_xs,
231  StringProcess* string_process,
232  bool use_AQM) const;
233 
248  CollisionBranchPtr NNbar_annihilation(const double current_xs,
249  const double scale_xs) const;
250 
258  CollisionBranchList NNbar_creation() const;
259 
276  static double two_to_three_xs(const ParticleType& type_in1,
277  const ParticleType& type_in2, double sqrts);
278 
286  double high_energy() const;
287 
329  double string_probability(bool strings_switch,
330  bool use_transition_probability, bool use_AQM,
331  bool treat_nnbar_with_strings) const;
332 
338  double probability_transit_high(const double region_lower,
339  const double region_upper) const;
340 
341  private:
349  double elastic_parametrization(bool use_AQM) const;
350 
359  double nn_el() const;
360 
371  double npi_el() const;
372 
383  double nk_el() const;
384 
393  CollisionBranchList npi_yk() const;
394 
401  CollisionBranchList bb_xx_except_nn(ReactionsBitSet included_2to2) const;
402 
419  CollisionBranchList nn_xx(ReactionsBitSet included_2to2) const;
420 
427  CollisionBranchList nk_xx(ReactionsBitSet included_2to2) const;
428 
434  CollisionBranchList deltak_xx(ReactionsBitSet included_2to2) const;
435 
441  CollisionBranchList ypi_xx(ReactionsBitSet included_2to2) const;
442 
450  CollisionBranchList dpi_xx(ReactionsBitSet included_2to2) const;
451 
459  CollisionBranchList dn_xx(ReactionsBitSet included_2to2) const;
460 
470  static double xs_dpi_dprimepi(const double sqrts, const double cm_mom,
471  ParticleTypePtr produced_nucleus,
472  const ParticleType& type_pi);
473 
484  static double xs_dn_dprimen(const double sqrts, const double cm_mom,
485  ParticleTypePtr produced_nucleus,
486  const ParticleType& type_nucleus,
487  const ParticleType& type_N);
488 
495  double string_hard_cross_section() const;
496 
508  CollisionBranchList bar_bar_to_nuc_nuc(const bool is_anti_particles) const;
509 
522  static double nn_to_resonance_matrix_element(double sqrts,
523  const ParticleType& type_a,
524  const ParticleType& type_b,
525  const int twoI);
526 
536  template <class IntegrationMethod>
537  CollisionBranchList find_nn_xsection_from_type(
538  const ParticleTypePtrList& type_res_1,
539  const ParticleTypePtrList& type_res_2,
540  const IntegrationMethod integrator) const;
541 
547  double cm_momentum() const {
548  const double m1 = incoming_particles_[0].effective_mass();
549  const double m2 = incoming_particles_[1].effective_mass();
550  return pCM(sqrt_s_, m1, m2);
551  }
552 
554  const ParticleList incoming_particles_;
555 
557  const double sqrt_s_;
558 
563  const std::pair<FourVector, FourVector> potentials_;
564 
566  const bool is_BBbar_pair_;
567 
575  template <typename F>
576  void add_channel(CollisionBranchList& process_list, F&& get_xsection,
577  double sqrts, const ParticleType& type_a,
578  const ParticleType& type_b) const {
579  const double sqrt_s_min =
580  type_a.min_mass_spectral() + type_b.min_mass_spectral();
581  /* Determine wether the process is below the threshold. */
582  double scale_B = 0.0;
583  double scale_I3 = 0.0;
584  bool is_below_threshold;
585  FourVector incoming_momentum = FourVector();
586  if (pot_pointer != nullptr) {
587  for (const auto p : incoming_particles_) {
588  incoming_momentum += p.momentum();
589  scale_B += pot_pointer->force_scale(p.type()).first;
590  scale_I3 +=
591  pot_pointer->force_scale(p.type()).second * p.type().isospin3_rel();
592  }
593  scale_B -= pot_pointer->force_scale(type_a).first;
594  scale_I3 -=
595  pot_pointer->force_scale(type_a).second * type_a.isospin3_rel();
596  scale_B -= pot_pointer->force_scale(type_b).first;
597  scale_I3 -=
598  pot_pointer->force_scale(type_b).second * type_b.isospin3_rel();
599  is_below_threshold = (incoming_momentum + potentials_.first * scale_B +
600  potentials_.second * scale_I3)
601  .abs() <= sqrt_s_min;
602  } else {
603  is_below_threshold = (sqrts <= sqrt_s_min);
604  }
605  if (is_below_threshold) {
606  return;
607  }
608  const auto xsection = get_xsection();
609  if (xsection > really_small) {
610  process_list.push_back(make_unique<CollisionBranch>(
611  type_a, type_b, xsection, ProcessType::TwoToTwo));
612  }
613  }
614 };
615 
616 } // namespace smash
617 
618 #endif // SRC_INCLUDE_SMASH_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:2474
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:368
smash::CrossSections::xs_dpi_dprimepi
static double xs_dpi_dprimepi(const double sqrts, const double cm_mom, ParticleTypePtr produced_nucleus, const ParticleType &type_pi)
Parametrized cross section for πd→ πd' (mockup for πd→ πnp), πd̅→ πd̅' and reverse,...
Definition: crosssections.cc:2023
smash::CrossSections::incoming_particles_
const ParticleList incoming_particles_
List with data of scattering particles.
Definition: crosssections.h:554
smash::CrossSections::generate_collision_list
CollisionBranchList generate_collision_list(double elastic_parameter, bool two_to_one_switch, ReactionsBitSet included_2to2, MultiParticleReactionsBitSet included_multi, double low_snn_cut, bool strings_switch, bool use_AQM, bool strings_with_probability, NNbarTreatment nnbar_treatment, StringProcess *string_process, double scale_xs, double additional_el_xs) const
Generate a list of all possible collisions between the incoming particles with the given c....
Definition: crosssections.cc:111
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::two_to_three
CollisionBranchList two_to_three() const
Find all 2->3 processes for the given scattering.
Definition: crosssections.cc:841
smash::transit_high_energy::sqrts_range_Npi
const std::array< double, 2 > sqrts_range_Npi
transition range in N-pi collisions
Definition: crosssections.h:27
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:754
smash::CrossSections::npi_el
double npi_el() const
Determine the elastic cross section for a nucleon-pion (Npi) collision.
Definition: crosssections.cc:316
smash::CrossSections::sum_xs_of
static double sum_xs_of(const CollisionBranchList &list)
Helper function: Sum all cross sections of the given process list.
Definition: crosssections.h:116
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:231
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:224
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:2540
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
forwarddeclarations.h
smash::ParticleTypePtr
Definition: particletype.h:665
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:50
smash::CrossSections::two_to_one
CollisionBranchList two_to_one(const bool prevent_dprime_form) const
Find all resonances that can be produced in a 2->1 collision of the two input particles and the produ...
Definition: crosssections.cc:708
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:1035
smash::CrossSections::npi_yk
CollisionBranchList npi_yk() const
Find all processes for Nucleon-Pion to Hyperon-Kaon Scattering.
Definition: crosssections.cc:399
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:2702
isoparticletype.h
smash::CrossSections::sqrt_s_
const double sqrt_s_
Total energy in the center-of-mass frame.
Definition: crosssections.h:557
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:2628
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:38
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:935
smash::CrossSections::cm_momentum
double cm_momentum() const
Determine the momenta of the incoming particles in the center-of-mass system.
Definition: crosssections.h:547
smash::CrossSections
The cross section class assembels everything that is needed to calculate the cross section and return...
Definition: crosssections.h:65
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:43
smash::CrossSections::high_energy
double high_energy() const
Determine the parametrized total cross section at high energies for the given collision,...
Definition: crosssections.cc:2346
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:1518
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:2182
smash::CrossSections::is_BBbar_pair_
const bool is_BBbar_pair_
Whether incoming particles are a baryon-antibaryon pair.
Definition: crosssections.h:566
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:211
stringprocess.h
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:791
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:2446
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:1667
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:56
smash::CrossSections::NNbar_annihilation
CollisionBranchPtr NNbar_annihilation(const double current_xs, const double scale_xs) const
Determine the cross section for NNbar annihilation, which is given by the difference between the para...
Definition: crosssections.cc:2433
smash::CrossSections::nk_el
double nk_el() const
Determine the elastic cross section for a nucleon-kaon (NK) collision.
Definition: crosssections.cc:613
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:176
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:2055
smash::CrossSections::nn_el
double nn_el() const
Determine the (parametrized) elastic cross section for a nucleon-nucleon (NN) collision.
Definition: crosssections.cc:285
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:2211
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:100
smash::CrossSections::nn_xx
CollisionBranchList nn_xx(ReactionsBitSet included_2to2) const
Find all inelastic 2->2 processes for Nucelon-Nucelon Scattering.
Definition: crosssections.cc:962
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:33
smash::CrossSections::xs_dn_dprimen
static double xs_dn_dprimen(const double sqrts, const double cm_mom, ParticleTypePtr produced_nucleus, const ParticleType &type_nucleus, const ParticleType &type_N)
Parametrized cross section for Nd → Nd', N̅d → N̅d', N̅d̅→ N̅d̅', Nd̅→ Nd̅' and reverse (e....
Definition: crosssections.cc:2144
smash::CrossSections::potentials_
const std::pair< FourVector, FourVector > potentials_
Potentials at the interacting point.
Definition: crosssections.h:563
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:2409
smash::CrossSections::elastic
CollisionBranchPtr elastic(double elast_par, bool use_AQM, double add_el_xs, double scale_xs) const
Determine the elastic cross section for this collision.
Definition: crosssections.cc:192
smash::CrossSections::probability_transit_high
double probability_transit_high(const double region_lower, const double region_upper) const
Definition: crosssections.cc:2792
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:576
smash::CrossSections::two_to_three_xs
static double two_to_three_xs(const ParticleType &type_in1, const ParticleType &type_in2, double sqrts)
Determine 2->3 cross section for the scattering of the given particle types.
Definition: crosssections.cc:896