Version: SMASH-1.6
crosssections.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2015-2018
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};
26 const std::array<double, 2> sqrts_range_NN = {4., 5.};
31 const double sqrts_add_lower = 0.9;
36 const double sqrts_range = 1.0;
37 
43 const double pipi_offset = 1.12;
44 
49 const double KN_offset = 15.15;
50 } // namespace transit_high_energy
51 
59  public:
68  CrossSections(const ParticleList& incoming_particles, const double sqrt_s,
69  const std::pair<FourVector, FourVector> potentials);
70 
94  CollisionBranchList generate_collision_list(
95  double elastic_parameter, bool two_to_one_switch,
96  ReactionsBitSet included_2to2, double low_snn_cut, bool strings_switch,
97  bool use_AQM, bool strings_with_probability,
98  NNbarTreatment nnbar_treatment, StringProcess* string_process) const;
99 
112  CollisionBranchPtr elastic(double elast_par, bool use_AQM) const;
113 
126  CollisionBranchList two_to_one() const;
127 
139  double formation(const ParticleType& type_resonance,
140  double cm_momentum_sqr) const;
141 
153  CollisionBranchList rare_two_to_two() const;
154 
164  CollisionBranchList two_to_two(ReactionsBitSet included_2to2) const;
165 
186  CollisionBranchList string_excitation(double total_string_xs,
187  StringProcess* string_process,
188  bool use_AQM) const;
189 
203  CollisionBranchPtr NNbar_annihilation(const double current_xs) const;
204 
212  CollisionBranchList NNbar_creation() const;
213 
221  double high_energy() const;
222 
264  double string_probability(bool strings_switch,
265  bool use_transition_probability, bool use_AQM,
266  bool treat_nnbar_with_strings) const;
267 
273  double probability_transit_high(const double region_lower,
274  const double region_upper) const;
275 
276  private:
284  double elastic_parametrization(bool use_AQM) const;
285 
294  double nn_el() const;
295 
306  double npi_el() const;
307 
318  double nk_el() const;
319 
328  CollisionBranchList npi_yk() const;
329 
336  CollisionBranchList bb_xx_except_nn(ReactionsBitSet included_2to2) const;
337 
354  CollisionBranchList nn_xx(ReactionsBitSet included_2to2) const;
355 
362  CollisionBranchList nk_xx(ReactionsBitSet included_2to2) const;
363 
369  CollisionBranchList deltak_xx(ReactionsBitSet included_2to2) const;
370 
376  CollisionBranchList ypi_xx(ReactionsBitSet included_2to2) const;
377 
385  CollisionBranchList dpi_xx(ReactionsBitSet included_2to2) const;
386 
394  CollisionBranchList dn_xx(ReactionsBitSet included_2to2) const;
395 
402  double string_hard_cross_section() const;
403 
415  CollisionBranchList bar_bar_to_nuc_nuc(const bool is_anti_particles) const;
416 
429  static double nn_to_resonance_matrix_element(double sqrts,
430  const ParticleType& type_a,
431  const ParticleType& type_b,
432  const int twoI);
433 
443  template <class IntegrationMethod>
444  CollisionBranchList find_nn_xsection_from_type(
445  const ParticleTypePtrList& type_res_1,
446  const ParticleTypePtrList& type_res_2,
447  const IntegrationMethod integrator) const;
448 
454  double cm_momentum() const {
455  const double m1 = incoming_particles_[0].effective_mass();
456  const double m2 = incoming_particles_[1].effective_mass();
457  return pCM(sqrt_s_, m1, m2);
458  }
459 
461  const ParticleList incoming_particles_;
462 
464  const double sqrt_s_;
465 
470  const std::pair<FourVector, FourVector> potentials_;
471 
473  const bool is_BBbar_pair_;
474 
482  template <typename F>
483  void add_channel(CollisionBranchList& process_list, F&& get_xsection,
484  double sqrts, const ParticleType& type_a,
485  const ParticleType& type_b) const {
486  const double sqrt_s_min =
487  type_a.min_mass_spectral() + type_b.min_mass_spectral();
488  /* Determine wether the process is below the threshold. */
489  double scale_B = 0.0;
490  double scale_I3 = 0.0;
491  bool is_below_threshold;
492  FourVector incoming_momentum = FourVector();
493  if (pot_pointer != nullptr) {
494  for (const auto p : incoming_particles_) {
495  incoming_momentum += p.momentum();
496  scale_B += pot_pointer->force_scale(p.type()).first;
497  scale_I3 +=
498  pot_pointer->force_scale(p.type()).second * p.type().isospin3_rel();
499  }
500  scale_B -= pot_pointer->force_scale(type_a).first;
501  scale_I3 -=
502  pot_pointer->force_scale(type_a).second * type_a.isospin3_rel();
503  scale_B -= pot_pointer->force_scale(type_b).first;
504  scale_I3 -=
505  pot_pointer->force_scale(type_b).second * type_b.isospin3_rel();
506  is_below_threshold = (incoming_momentum + potentials_.first * scale_B +
507  potentials_.second * scale_I3)
508  .abs() <= sqrt_s_min;
509  } else {
510  is_below_threshold = (sqrts <= sqrt_s_min);
511  }
512  if (is_below_threshold) {
513  return;
514  }
515  const auto xsection = get_xsection();
516  if (xsection > really_small) {
517  process_list.push_back(make_unique<CollisionBranch>(
518  type_a, type_b, xsection, ProcessType::TwoToTwo));
519  }
520  }
521 };
522 
523 } // namespace smash
524 
525 #endif // SRC_INCLUDE_CROSSSECTIONS_H_
Potentials * pot_pointer
Pointer to a Potential class.
const bool is_BBbar_pair_
Whether incoming particles are a baryon-antibaryon pair.
const double sqrt_s_
Total energy in the center-of-mass frame.
constexpr double really_small
Numerical error tolerance.
Definition: constants.h:34
String excitation processes used in SMASH.
Definition: processstring.h:46
const std::array< double, 2 > sqrts_range_NN
transition range in N-N collisions
Definition: crosssections.h:26
2->2 inelastic scattering
NNbarTreatment
Treatment of N Nbar Annihilation.
const std::pair< FourVector, FourVector > potentials_
Potentials at the interacting point.
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.
Particle type contains the static properties of a particle species.
Definition: particletype.h:97
double min_mass_spectral() const
The minimum mass of the resonance, where the spectral function is non-zero.
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:49
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:36
std::bitset< 6 > ReactionsBitSet
Container for the 2 to 2 reactions in the code.
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:31
const ParticleList incoming_particles_
List with data of scattering particles.
std::pair< double, int > force_scale(const ParticleType &data) const
Evaluates the scaling factor of the forces acting on the particles.
Definition: potentials.cc:137
The cross section class assembels everything that is needed to calculate the cross section and return...
Definition: crosssections.h:58
constexpr int p
Proton.
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:43
double isospin3_rel() const
Definition: particletype.h:179
double cm_momentum() const
Determine the momenta of the incoming particles in the center-of-mass system.
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept
Definition: kinematics.h:79
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
Definition: fourvector.h:32
const std::array< double, 2 > sqrts_range_Npi
transition range in N-pi collisions
Definition: crosssections.h:24
Definition: action.h:24