Version: SMASH-3.1
parametrizations.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2013-2018,2020,2023-2024
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 #ifndef SRC_INCLUDE_SMASH_PARAMETRIZATIONS_H_
10 #define SRC_INCLUDE_SMASH_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 
31 bool parametrization_exists(const PdgCode& pdg_a, const PdgCode& pdg_b);
48 double xs_high_energy(double mandelstam_s, bool is_opposite_charge, double ma,
49  double mb, double P, double R1, double R2);
50 
58 double pp_high_energy(double mandelstam_s);
59 
67 double ppbar_high_energy(double mandelstam_s);
68 
76 double np_high_energy(double mandelstam_s);
77 
85 double npbar_high_energy(double mandelstam_s);
86 
94 double piplusp_high_energy(double mandelstam_s);
95 
103 double piminusp_high_energy(double mandelstam_s);
104 
112 double xs_ppbar_annihilation(double mandelstam_s);
113 
126 double xs_string_hard(double mandelstam_s, double xs_0, double e_0,
127  double lambda_pow);
128 
137 double NN_string_hard(double mandelstam_s);
138 
147 double Npi_string_hard(double mandelstam_s);
148 
157 double pipi_string_hard(double mandelstam_s);
158 
167 double pipluspiminus_total(double sqrts);
168 
177 double pizeropizero_total(double sqrts);
178 
187 double piplusp_total(double sqrts);
188 
200 double piplusp_elastic_high_energy(double mandelstam_s, double m1, double m2);
201 
212 double piplusp_elastic_AQM(double mandelstam_s, double m1, double m2);
213 
228 double piplusp_elastic(double mandelstam_s);
229 
237 double piplusp_sigmapluskplus_pdg(double mandelstam_s);
238 
247 double piminusp_total(double sqrts);
248 
256 double piminusp_elastic(double mandelstam_s);
257 
265 double piminusp_lambdak0_pdg(double mandelstam_s);
266 
274 double piminusp_sigmaminuskplus_pdg(double mandelstam_s);
275 
283 double piminusp_sigma0k0_res(double mandelstam_s);
284 
292 double pp_elastic(double mandelstam_s);
293 
304 double pp_elastic_high_energy(double mandelstam_s, double m1, double m2);
305 
315 double pp_total(double mandelstam_s);
316 
324 double np_elastic(double mandelstam_s);
325 
335 double np_total(double mandelstam_s);
336 
344 double ppbar_elastic(double mandelstam_s);
345 
353 double ppbar_total(double mandelstam_s);
354 
363 double deuteron_pion_elastic(double mandelstam_s);
364 
372 double deuteron_nucleon_elastic(double mandelstam_s);
373 
385 double kplusp_total(double mandelstam_s);
386 
396 double kplusn_total(double mandelstam_s);
397 
407 double kminusn_total(double mandelstam_s);
408 
418 double kminusp_total(double mandelstam_s);
419 
428 double kplusp_elastic_background(double mandelstam_s);
429 
438 double kplusn_elastic_background(double mandelstam_s);
439 
448 double kplusn_k0p(double mandelstam_s);
449 
457 double kminusp_elastic_background(double mandelstam_s);
458 
466 double kminusn_elastic_background(double mandelstam_s);
467 
475 double k0p_elastic_background(double mandelstam_s);
476 
484 double k0n_elastic_background(double mandelstam_s);
485 
493 double kbar0p_elastic_background(double mandelstam_s);
494 
502 double kbar0n_elastic_background(double mandelstam_s);
503 
511 double kplusp_inelastic_background(double mandelstam_s);
512 
523 double kplusn_inelastic_background(double mandelstam_s);
524 
531 struct pair_hash {
533  std::size_t operator()(const std::pair<uint64_t, uint64_t>& p) const {
534  auto h1 = std::hash<uint64_t>{}(p.first);
535  auto h2 = std::hash<uint64_t>{}(p.second);
536 
537  /* In our case the integers are PDG codes. We know they are different
538  * and their order is defined, so we can simply combine the hashes
539  * using XOR. Note that this yields 0 for h1 == h2. Also,
540  * std::swap(h1, h2) does not not change the final hash. */
541  assert(h1 != h2);
542  return h1 ^ h2;
543  }
544 };
545 
555  private:
557  mutable std::unordered_map<std::pair<uint64_t, uint64_t>, double, pair_hash>
559 
560  public:
563 
569  double get_ratio(const ParticleType& a, const ParticleType& b,
570  const ParticleType& c, const ParticleType& d) const;
571 };
572 
573 extern /*thread_local (see #3075)*/ KaonNucleonRatios kaon_nucleon_ratios;
574 
582 double kminusp_kbar0n(double mandelstam_s);
583 
591 double kminusp_piminussigmaplus(double sqrts);
592 
600 double kminusp_piplussigmaminus(double sqrts);
601 
609 double kminusp_pi0sigma0(double sqrts);
610 
619 double kminusp_pi0lambda(double sqrts);
620 
629 double kminusn_piminussigma0(double sqrts);
630 
639 double kminusn_pi0sigmaminus(double sqrts);
640 
649 double kminusn_piminuslambda(double sqrts);
650 
662 double lambdalambda_ximinusp(double sqrts_sqrts0, double p_N, double p_lambda);
663 
675 double lambdalambda_xi0n(double sqrts_sqrts0, double p_N, double p_lambda);
676 
686 double lambdasigmaplus_xi0p(double sqrts_sqrts0);
687 
697 double lambdasigmaminus_ximinusn(double sqrts_sqrts0);
698 
708 double lambdasigma0_ximinusp(double sqrts_sqrts0);
709 
719 double lambdasigma0_xi0n(double sqrts_sqrts0);
720 
730 double sigma0sigma0_ximinusp(double sqrts_sqrts0);
731 
744 double sigma0sigma0_xi0n(double sqrts_sqrts0);
745 
755 double sigmaplussigmaminus_xi0p(double sqrts_sqrts0);
756 
766 double sigma0sigmaminus_ximinusn(double sqrts_sqrts0);
767 
777 double sigmaplussigmaminus_ximinusp(double sqrts_sqrts0);
778 
788 double sigmaplussigmaminus_xi0n(double sqrts_sqrts0);
789 
790 } // namespace smash
791 
792 #endif // SRC_INCLUDE_SMASH_PARAMETRIZATIONS_H_
Calculate and store isospin ratios for K N -> K Delta reactions.
std::unordered_map< std::pair< uint64_t, uint64_t >, double, pair_hash > ratios_
Internal representation of isospin weights once calculated.
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.
KaonNucleonRatios()
Create an empty K N -> K Delta isospin ratio storage.
constexpr int p
Proton.
constexpr int h1
h₁(1170).
Definition: action.h:24
double kplusn_k0p(double mandelstam_s)
K+ n charge exchange cross section parametrization.
bool parametrization_exists(const PdgCode &pdg_a, const PdgCode &pdg_b)
Checks if supplied codes have existing parametrizations of total cross sections.
double kplusp_total(double mandelstam_s)
K+ p total cross section parametrization.
double kminusn_pi0sigmaminus(double sqrts)
K- n <-> pi0 Sigma- cross section parametrization Follow from the parametrization with the same stran...
double pizeropizero_total(double sqrts)
pi0 pi0 total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
double kminusp_pi0lambda(double sqrts)
K- p <-> pi0 Lambda cross section parametrization Fit to Landolt-Börnstein instead of UrQMD values.
double pipluspiminus_total(double sqrts)
pi+ pi- total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
double piminusp_sigma0k0_res(double mandelstam_s)
pi- p -> Sigma0 K0 cross section parametrization, resonance contribution.
double ppbar_total(double mandelstam_s)
ppbar total cross section parametrization Source: Bass:1998ca
double np_total(double mandelstam_s)
np total cross section parametrization Sources: low-p: Cugnon:1996kh highest-p: Buss:2011mx
double piminusp_elastic(double mandelstam_s)
pi-p elastic cross section parametrization Source: GiBUU:parametrizationBarMes_HighEnergy....
double npbar_high_energy(double mandelstam_s)
npbar total cross section at high energies
double kminusn_piminussigma0(double sqrts)
K- n <-> pi- Sigma0 cross section parametrization Follow from the parametrization with the same stran...
double kbar0p_elastic_background(double mandelstam_s)
Kbar0 p elastic background cross section parametrization Source: Buss:2011mx , B.3....
KaonNucleonRatios kaon_nucleon_ratios
double sigma0sigma0_ximinusp(double sqrts_sqrts0)
Sigma0 Sigma0 <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double ppbar_elastic(double mandelstam_s)
ppbar elastic cross section parametrization Source: Bass:1998ca
double lambdasigmaplus_xi0p(double sqrts_sqrts0)
Lambda Sigma+ <-> Xi0 p cross section parametrization Two hyperon exchange, based on effective model ...
double kminusp_elastic_background(double mandelstam_s)
K- p elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
double lambdasigma0_xi0n(double sqrts_sqrts0)
Lambda Sigma0 <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double np_high_energy(double mandelstam_s)
np total cross section at high energies
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 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 Npi_string_hard(double mandelstam_s)
nucleon-pion hard scattering cross section (with partonic scattering)
double kminusn_piminuslambda(double sqrts)
K- n <-> pi- Lambda cross section parametrization Follow from the parametrization with the same stran...
double lambdasigmaminus_ximinusn(double sqrts_sqrts0)
Lambda Sigma- <-> Xi- n cross section parametrization Two hyperon exchange, based on effective model ...
double ppbar_high_energy(double mandelstam_s)
ppbar total cross section at high energies
double pp_high_energy(double mandelstam_s)
pp total cross section at high energies
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....
double pipi_string_hard(double mandelstam_s)
pion-pion hard scattering cross section (with partonic scattering)
double piplusp_high_energy(double mandelstam_s)
pi+p total cross section at high energies
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 kminusp_piminussigmaplus(double sqrts)
K- p <-> pi- Sigma+ cross section parametrization Taken from UrQMD (Graef:2014mra ).
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 piplusp_elastic_high_energy(double mandelstam_s, double m1, double m2)
pi+p elactic cross section parametrization.
double piplusp_sigmapluskplus_pdg(double mandelstam_s)
pi+ p to Sigma+ K+ cross section parametrization, PDG data.
double piminusp_total(double sqrts)
pi- p total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
double deuteron_nucleon_elastic(double mandelstam_s)
Deuteron nucleon elastic cross-section [mb] parametrized by Oh:2009gx .
double piminusp_sigmaminuskplus_pdg(double mandelstam_s)
pi- p -> Sigma- K+ cross section parametrization, PDG data.
double piminusp_lambdak0_pdg(double mandelstam_s)
pi- p -> Lambda K0 cross section parametrization, PDG data.
double k0p_elastic_background(double mandelstam_s)
K0 p elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
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 lambdasigma0_ximinusp(double sqrts_sqrts0)
Lambda Sigma0 <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double NN_string_hard(double mandelstam_s)
nucleon-nucleon 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
double kplusp_inelastic_background(double mandelstam_s)
K+ p inelastic background cross section parametrization Source: Buss:2011mx , B.3....
double sigmaplussigmaminus_xi0n(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double kminusp_pi0sigma0(double sqrts)
K- p <-> pi0 Sigma0 cross section parametrization Fit to Landolt-Börnstein instead of UrQMD values.
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 pp_total(double mandelstam_s)
pp total cross section parametrization Sources: low-p: Cugnon:1996kh highest-p: Buss:2011mx
double kplusn_total(double mandelstam_s)
K+ n total cross section parametrization.
double np_elastic(double mandelstam_s)
np elastic cross section parametrization Source: Weil:2013mya , eq.
double k0n_elastic_background(double mandelstam_s)
K0 n elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
double sigma0sigma0_xi0n(double sqrts_sqrts0)
Sigma0 Sigma0 <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
double kminusp_piplussigmaminus(double sqrts)
K- p <-> pi+ Sigma- cross section parametrization Taken from UrQMD (Graef:2014mra ).
double kminusp_total(double mandelstam_s)
K- p total cross section parametrization.
double kbar0n_elastic_background(double mandelstam_s)
Kbar0 n elastic background cross section parametrization Source: Buss:2011mx , B.3....
double kminusp_kbar0n(double mandelstam_s)
K- p <-> Kbar0 n cross section parametrization.
double sigmaplussigmaminus_ximinusp(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
double piplusp_total(double sqrts)
pi+ p total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
double piminusp_high_energy(double mandelstam_s)
pi-p total cross section at high energies
double kminusn_total(double mandelstam_s)
K- n total cross section parametrization.
double kminusn_elastic_background(double mandelstam_s)
K- n elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
double pp_elastic(double mandelstam_s)
pp elastic cross section parametrization Source: Weil:2013mya , eq.
double kplusn_inelastic_background(double mandelstam_s)
K+ n inelastic background cross section parametrization Source: Buss:2011mx , B.3....
double kplusp_elastic_background(double mandelstam_s)
K+ p elastic background cross section parametrization.
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 piplusp_elastic(double mandelstam_s)
pi+p elastic cross section parametrization, PDG data.
double sigma0sigmaminus_ximinusn(double sqrts_sqrts0)
Sigma0 Sigma- <-> Xi- n 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 ...
Hash a pair of integers.
std::size_t operator()(const std::pair< uint64_t, uint64_t > &p) const
Hashing is done by this operator.