Version: SMASH-1.5
parametrizations.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2013-2018
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 #ifndef SRC_INCLUDE_PARAMETRIZATIONS_H_
10 #define SRC_INCLUDE_PARAMETRIZATIONS_H_
11 
12 #include <unordered_map>
13 #include <utility>
14 
15 #include "particletype.h"
16 
17 /* All quantities in this file use they same units as the rest of SMASH.
18  * That is: GeV for energies and momenta, fm for distances and time, and mb for
19  * cross-sections. */
20 
21 namespace smash {
22 
39 double xs_high_energy(double mandelstam_s, bool is_opposite_charge, double ma,
40  double mb, double P, double R1, double R2);
41 
49 double pp_high_energy(double mandelstam_s);
50 
58 double ppbar_high_energy(double mandelstam_s);
59 
67 double np_high_energy(double mandelstam_s);
68 
76 double npbar_high_energy(double mandelstam_s);
77 
85 double piplusp_high_energy(double mandelstam_s);
86 
94 double piminusp_high_energy(double mandelstam_s);
95 
103 double xs_ppbar_annihilation(double mandelstam_s);
104 
117 double xs_string_hard(double mandelstam_s, double xs_0, double e_0,
118  double lambda_pow);
119 
128 double NN_string_hard(double mandelstam_s);
129 
138 double Npi_string_hard(double mandelstam_s);
139 
148 double pipi_string_hard(double mandelstam_s);
149 
161 double piplusp_elastic_high_energy(double mandelstam_s, double m1, double m2);
162 
173 double piplusp_elastic_AQM(double mandelstam_s, double m1, double m2);
174 
189 double piplusp_elastic(double mandelstam_s);
190 
198 double piplusp_sigmapluskplus_pdg(double mandelstam_s);
199 
207 double piminusp_elastic(double mandelstam_s);
208 
216 double piminusp_lambdak0_pdg(double mandelstam_s);
217 
225 double piminusp_sigmaminuskplus_pdg(double mandelstam_s);
226 
234 double piminusp_sigma0k0_res(double mandelstam_s);
235 
243 double pp_elastic(double mandelstam_s);
244 
255 double pp_elastic_high_energy(double mandelstam_s, double m1, double m2);
256 
266 double pp_total(double mandelstam_s);
267 
275 double np_elastic(double mandelstam_s);
276 
286 double np_total(double mandelstam_s);
287 
295 double ppbar_elastic(double mandelstam_s);
296 
304 double ppbar_total(double mandelstam_s);
305 
314 double deuteron_pion_elastic(double mandelstam_s);
315 
323 double deuteron_nucleon_elastic(double mandelstam_s);
324 
333 double kplusp_elastic_background(double mandelstam_s);
334 
343 double kplusn_elastic_background(double mandelstam_s);
344 
353 double kplusn_k0p(double mandelstam_s);
354 
362 double kminusp_elastic_background(double mandelstam_s);
363 
371 double kminusn_elastic_background(double mandelstam_s);
372 
380 double k0p_elastic_background(double mandelstam_s);
381 
389 double k0n_elastic_background(double mandelstam_s);
390 
398 double kbar0p_elastic_background(double mandelstam_s);
399 
407 double kbar0n_elastic_background(double mandelstam_s);
408 
416 double kplusp_inelastic_background(double mandelstam_s);
417 
428 double kplusn_inelastic_background(double mandelstam_s);
429 
436 struct pair_hash {
438  std::size_t operator()(const std::pair<uint64_t, uint64_t>& p) const {
439  auto h1 = std::hash<uint64_t>{}(p.first);
440  auto h2 = std::hash<uint64_t>{}(p.second);
441 
442  /* In our case the integers are PDG codes. We know they are different
443  * and their order is defined, so we can simply combine the hashes
444  * using XOR. Note that this yields 0 for h1 == h2. Also,
445  * std::swap(h1, h2) does not not change the final hash. */
446  assert(h1 != h2);
447  return h1 ^ h2;
448  }
449 };
450 
460  private:
462  mutable std::unordered_map<std::pair<uint64_t, uint64_t>, double, pair_hash>
464 
465  public:
468 
474  double get_ratio(const ParticleType& a, const ParticleType& b,
475  const ParticleType& c, const ParticleType& d) const;
476 };
477 
478 extern /*thread_local (see #3075)*/ KaonNucleonRatios kaon_nucleon_ratios;
479 
487 double kminusp_kbar0n(double mandelstam_s);
488 
496 double kminusp_piminussigmaplus(double sqrts);
497 
505 double kminusp_piplussigmaminus(double sqrts);
506 
514 double kminusp_pi0sigma0(double sqrts);
515 
524 double kminusp_pi0lambda(double sqrts);
525 
534 double kminusn_piminussigma0(double sqrts);
535 
544 double kminusn_pi0sigmaminus(double sqrts);
545 
554 double kminusn_piminuslambda(double sqrts);
555 
567 double lambdalambda_ximinusp(double sqrts_sqrts0, double p_N, double p_lambda);
568 
580 double lambdalambda_xi0n(double sqrts_sqrts0, double p_N, double p_lambda);
581 
591 double lambdasigmaplus_xi0p(double sqrts_sqrts0);
592 
602 double lambdasigmaminus_ximinusn(double sqrts_sqrts0);
603 
613 double lambdasigma0_ximinusp(double sqrts_sqrts0);
614 
624 double lambdasigma0_xi0n(double sqrts_sqrts0);
625 
635 double sigma0sigma0_ximinusp(double sqrts_sqrts0);
636 
649 double sigma0sigma0_xi0n(double sqrts_sqrts0);
650 
660 double sigmaplussigmaminus_xi0p(double sqrts_sqrts0);
661 
671 double sigma0sigmaminus_ximinusn(double sqrts_sqrts0);
672 
682 double sigmaplussigmaminus_ximinusp(double sqrts_sqrts0);
683 
693 double sigmaplussigmaminus_xi0n(double sqrts_sqrts0);
694 
695 } // namespace smash
696 
697 #endif // SRC_INCLUDE_PARAMETRIZATIONS_H_
double piminusp_elastic(double mandelstam_s)
pi-p elastic cross section parametrization Source: GiBUU:parametrizationBarMes_HighEnergy.f90
double xs_high_energy(double mandelstam_s, bool is_opposite_charge, double ma, double mb, double P, double R1, double R2)
total hadronic cross sections at high energies parametrized in the 2016 PDG book(http://pdg.lbl.gov/2016/reviews/rpp2016-rev-cross-section-plots.pdf)
double lambdasigma0_ximinusp(double sqrts_sqrts0)
Lambda Sigma0 <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double kminusp_kbar0n(double mandelstam_s)
K- p <-> Kbar0 n cross section parametrization.
double kminusp_elastic_background(double mandelstam_s)
K- p elastic background cross section parametrization Source: Buss:2011mx, B.3.9. ...
double sigma0sigma0_ximinusp(double sqrts_sqrts0)
Sigma0 Sigma0 <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double get_ratio(const ParticleType &a, const ParticleType &b, const ParticleType &c, const ParticleType &d) const
Return the isospin ratio of the given K N -> K Delta cross section.
double deuteron_nucleon_elastic(double mandelstam_s)
Deuteron nucleon elastic cross-section [mb] parametrized by Oh:2009gx.
double piplusp_high_energy(double mandelstam_s)
pi+p total cross section at high energies
double piminusp_lambdak0_pdg(double mandelstam_s)
pi- p -> Lambda K0 cross section parametrization, PDG data.
double ppbar_elastic(double mandelstam_s)
ppbar elastic cross section parametrization Source: Bass:1998ca
double piminusp_sigma0k0_res(double mandelstam_s)
pi- p -> Sigma0 K0 cross section parametrization, resonance contribution.
double np_total(double mandelstam_s)
np total cross section parametrization Sources: low-p: Cugnon:1996kh highest-p: Buss:2011mx ...
double piminusp_sigmaminuskplus_pdg(double mandelstam_s)
pi- p -> Sigma- K+ cross section parametrization, PDG data.
double kminusp_piminussigmaplus(double sqrts)
K- p <-> pi- Sigma+ cross section parametrization Taken from UrQMD (Graef:2014mra).
double kplusp_elastic_background(double mandelstam_s)
K+ p elastic background cross section parametrization.
double pp_high_energy(double mandelstam_s)
pp total cross section at high energies
double xs_string_hard(double mandelstam_s, double xs_0, double e_0, double lambda_pow)
Utility function called by specific other parametrizations Parametrized hard scattering cross section...
double kminusn_piminussigma0(double sqrts)
K- n <-> pi- Sigma0 cross section parametrization Follow from the parametrization with the same stran...
double k0n_elastic_background(double mandelstam_s)
K0 n elastic background cross section parametrization Source: Buss:2011mx, B.3.9. ...
double kminusn_pi0sigmaminus(double sqrts)
K- n <-> pi0 Sigma- cross section parametrization Follow from the parametrization with the same stran...
double sigmaplussigmaminus_ximinusp(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double sigmaplussigmaminus_xi0p(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi0 p cross section parametrization Two hyperon exchange, based on effective model ...
double pp_elastic_high_energy(double mandelstam_s, double m1, double m2)
pp elastic cross section parametrization, with only the high energy part generalized to all energy re...
double NN_string_hard(double mandelstam_s)
nucleon-nucleon hard scattering cross section (with partonic scattering)
double ppbar_high_energy(double mandelstam_s)
ppbar total cross section at high energies
double k0p_elastic_background(double mandelstam_s)
K0 p elastic background cross section parametrization Source: Buss:2011mx, B.3.9. ...
std::unordered_map< std::pair< uint64_t, uint64_t >, double, pair_hash > ratios_
Internal representation of isospin weights once calculated.
double kplusn_k0p(double mandelstam_s)
K+ n charge exchange cross section parametrization.
KaonNucleonRatios kaon_nucleon_ratios
double kbar0n_elastic_background(double mandelstam_s)
Kbar0 n elastic background cross section parametrization Source: Buss:2011mx, B.3.9.
constexpr int h1
h₁(1170).
double kminusn_piminuslambda(double sqrts)
K- n <-> pi- Lambda cross section parametrization Follow from the parametrization with the same stran...
double pipi_string_hard(double mandelstam_s)
pion-pion hard scattering cross section (with partonic scattering)
double kminusp_pi0sigma0(double sqrts)
K- p <-> pi0 Sigma0 cross section parametrization Fit to Landolt-Börnstein instead of UrQMD values...
double lambdasigma0_xi0n(double sqrts_sqrts0)
Lambda Sigma0 <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double lambdasigmaminus_ximinusn(double sqrts_sqrts0)
Lambda Sigma- <-> Xi- n cross section parametrization Two hyperon exchange, based on effective model ...
double piminusp_high_energy(double mandelstam_s)
pi-p total cross section at high energies
double np_elastic(double mandelstam_s)
np elastic cross section parametrization Source: Weil:2013mya, eq.
Calculate and store isospin ratios for K N -> K Delta reactions.
double lambdalambda_ximinusp(double sqrts_sqrts0, double p_N, double p_lambda)
Lambda Lambda <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double kplusn_elastic_background(double mandelstam_s)
K+ n elastic background cross section parametrization sigma(K+n->K+n) = sigma(K+n->K0p) = 0...
double piplusp_elastic(double mandelstam_s)
pi+p elastic cross section parametrization, PDG data.
double pp_elastic(double mandelstam_s)
pp elastic cross section parametrization Source: Weil:2013mya, eq.
Hash a pair of integers.
double kminusp_piplussigmaminus(double sqrts)
K- p <-> pi+ Sigma- cross section parametrization Taken from UrQMD (Graef:2014mra).
double sigma0sigmaminus_ximinusn(double sqrts_sqrts0)
Sigma0 Sigma- <-> Xi- n cross section parametrization Two hyperon exchange, based on effective model ...
double kminusn_elastic_background(double mandelstam_s)
K- n elastic background cross section parametrization Source: Buss:2011mx, B.3.9. ...
double lambdasigmaplus_xi0p(double sqrts_sqrts0)
Lambda Sigma+ <-> Xi0 p cross section parametrization Two hyperon exchange, based on effective model ...
constexpr int p
Proton.
double kplusn_inelastic_background(double mandelstam_s)
K+ n inelastic background cross section parametrization Source: Buss:2011mx, B.3.8.
KaonNucleonRatios()
Create an empty K N -> K Delta isospin ratio storage.
double lambdalambda_xi0n(double sqrts_sqrts0, double p_N, double p_lambda)
Lambda Lambda <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double ppbar_total(double mandelstam_s)
ppbar total cross section parametrization Source: Bass:1998ca
std::size_t operator()(const std::pair< uint64_t, uint64_t > &p) const
Hashing is done by this operator.
double kminusp_pi0lambda(double sqrts)
K- p <-> pi0 Lambda cross section parametrization Fit to Landolt-Börnstein instead of UrQMD values...
double piplusp_sigmapluskplus_pdg(double mandelstam_s)
pi+ p to Sigma+ K+ cross section parametrization, PDG data.
double sigma0sigma0_xi0n(double sqrts_sqrts0)
Sigma0 Sigma0 <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double npbar_high_energy(double mandelstam_s)
npbar total cross section at high energies
double piplusp_elastic_high_energy(double mandelstam_s, double m1, double m2)
pi+p elactic cross section parametrization.
double deuteron_pion_elastic(double mandelstam_s)
Deuteron pion elastic cross-section [mb] parametrized to fit pi-d elastic scattering data (the data c...
double sigmaplussigmaminus_xi0n(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double kbar0p_elastic_background(double mandelstam_s)
Kbar0 p elastic background cross section parametrization Source: Buss:2011mx, B.3.9.
double np_high_energy(double mandelstam_s)
np total cross section at high energies
double pp_total(double mandelstam_s)
pp total cross section parametrization Sources: low-p: Cugnon:1996kh highest-p: Buss:2011mx ...
Definition: action.h:24
double piplusp_elastic_AQM(double mandelstam_s, double m1, double m2)
An overload of piplusp_elastic_high_energy in which the very low part is replaced by a flat 5 mb cros...
double kplusp_inelastic_background(double mandelstam_s)
K+ p inelastic background cross section parametrization Source: Buss:2011mx, B.3.8.
double Npi_string_hard(double mandelstam_s)
nucleon-pion hard scattering cross section (with partonic scattering)
double xs_ppbar_annihilation(double mandelstam_s)
parametrized cross-section for proton-antiproton annihilation used in the UrQMD model ...