14 #include <initializer_list> 30 double xs_high_energy(
double mandelstam_s,
bool is_opposite_charge,
double ma,
31 double mb,
double P,
double R1,
double R2) {
32 const double M = 2.1206;
33 const double H = 0.272;
34 const double eta1 = 0.4473;
35 const double eta2 = 0.5486;
36 const double s_sab = mandelstam_s / (ma + mb + M) / (ma + mb + M);
38 H * std::log(s_sab) * std::log(s_sab) + P + R1 * std::pow(s_sab, -eta1);
39 xs = is_opposite_charge ? xs + R2 * std::pow(s_sab, -eta2)
40 : xs - R2 * std::pow(s_sab, -eta2);
45 return xs_high_energy(mandelstam_s,
false, 0.939, 0.939, 34.41, 13.07, 7.394);
49 return xs_high_energy(mandelstam_s,
true, 0.939, 0.939, 34.41, 13.07, 7.394);
53 return xs_high_energy(mandelstam_s,
false, 0.939, 0.939, 34.41, 12.52, 6.66);
57 return xs_high_energy(mandelstam_s,
true, 0.939, 0.939, 34.41, 12.52, 6.66);
61 return xs_high_energy(mandelstam_s,
false, 0.939, 0.138, 18.75, 9.56, 1.767);
65 return xs_high_energy(mandelstam_s,
true, 0.939, 0.138, 18.75, 9.56, 1.767);
69 const double xs_ref = 120.;
71 const double constant_a = 0.05;
72 const double constant_b = 0.6;
73 const double factor = constant_a * constant_a * s_ref /
74 ((mandelstam_s - s_ref) * (mandelstam_s - s_ref) +
75 constant_a * constant_a * s_ref) +
77 return xs_ref * (s_ref / mandelstam_s) * factor;
82 const double sqrts = std::sqrt(mandelstam_s);
86 double xs = xs_0 * std::pow(std::log(sqrts / e_0), lambda_pow);
112 std::vector<double> dedup_x;
113 std::vector<double> dedup_y;
114 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
115 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
117 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
124 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
126 const auto logp = std::log(p_lab);
127 return 11.4 * std::pow(p_lab, -0.4) + 0.079 * logp * logp;
131 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
143 if (mandelstam_s < 2.25) {
145 }
else if (mandelstam_s > 4.84) {
146 const auto logp = std::log(p_lab);
147 sigma = 11.4 * std::pow(p_lab, -0.4) + 0.079 * logp * logp;
160 make_unique<InterpolateDataSpline>(x, y);
163 if (mandelstam_s < 4.84) {
164 sigma -= (*piplusp_elastic_res_interpolation)(mandelstam_s);
181 std::vector<double> dedup_x;
182 std::vector<double> dedup_y;
183 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
184 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 5);
186 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
201 std::vector<double> dedup_x;
202 std::vector<double> dedup_y;
203 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
204 dedup_y =
smooth(dedup_x, dedup_y, 0.03, 6);
206 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
215 const auto logp = std::log(p_lab);
216 if (mandelstam_s < 1.69) {
218 }
else if (mandelstam_s > 4.84) {
219 sigma = 1.76 + 11.2 * std::pow(p_lab, -0.64) + 0.043 * logp * logp;
228 if (mandelstam_s > 3.24 && mandelstam_s < 3.8809) {
229 sigma *= (0.12 * cos(2 * M_PI * (sqrt(mandelstam_s) - 1.8) / (1.97 - 1.8)) +
240 make_unique<InterpolateDataSpline>(x, y);
243 if (mandelstam_s < 4.84) {
244 sigma -= (*piminusp_elastic_res_interpolation)(mandelstam_s);
261 std::vector<double> dedup_x;
262 std::vector<double> dedup_y;
263 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
264 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
266 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
281 std::vector<double> dedup_x;
282 std::vector<double> dedup_y;
283 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
284 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
286 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
301 std::vector<double> dedup_x;
302 std::vector<double> dedup_y;
303 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
304 dedup_y =
smooth(dedup_x, dedup_y, 0.03, 6);
306 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
308 const double sqrts = sqrt(mandelstam_s);
318 }
else if (p_lab < 0.8) {
319 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
320 }
else if (p_lab < 2.0) {
321 return 1250 / (p_lab + 50) - 4 * (p_lab - 1.3) * (p_lab - 1.3);
322 }
else if (p_lab < 2.776) {
323 return 77 / (p_lab + 1.5);
325 const auto logp = std::log(p_lab);
326 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
332 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
334 const auto logp = std::log(p_lab);
335 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
342 return 34 * std::pow(p_lab / 0.4, -2.104);
343 }
else if (p_lab < 0.8) {
344 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
345 }
else if (p_lab < 1.5) {
346 return 23.5 + 24.6 / (1 + std::exp(-(p_lab - 1.2) / 0.1));
347 }
else if (p_lab < 5.0) {
348 return 41 + 60 * (p_lab - 0.9) * std::exp(-1.2 * p_lab);
350 const auto logp = std::log(p_lab);
351 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
361 }
else if (p_lab < 0.8) {
362 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
363 }
else if (p_lab < 2.0) {
364 return 31 / std::sqrt(p_lab);
365 }
else if (p_lab < 2.776) {
366 return 77 / (p_lab + 1.5);
368 const auto logp = std::log(p_lab);
369 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
376 const auto logp = std::log(p_lab);
378 return 6.3555 * std::pow(p_lab, -3.2481) * std::exp(-0.377 * logp * logp);
379 }
else if (p_lab < 1.0) {
380 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
381 }
else if (p_lab < 2.0) {
382 return 24.2 + 8.9 * p_lab;
383 }
else if (p_lab < 5.0) {
386 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
394 }
else if (p_lab < 5.0) {
395 return 31.6 + 18.3 / p_lab - 1.1 / (p_lab * p_lab) - 3.8 * p_lab;
397 const auto logp = std::log(p_lab);
398 return 10.2 + 52.7 * std::pow(p_lab, -1.16) + 0.125 * logp * logp -
406 return 271.6 * std::exp(-1.1 * p_lab * p_lab);
407 }
else if (p_lab < 5.0) {
408 return 75.0 + 43.1 / p_lab + 2.6 / (p_lab * p_lab) - 3.9 * p_lab;
410 const auto logp = std::log(p_lab);
411 return 38.4 + 77.6 * std::pow(p_lab, -0.64) + 0.26 * logp * logp -
417 const double tmp = std::sqrt(mandelstam_s) - 2.172;
418 return 4.0 + 0.27 / (tmp * tmp + 0.065 * 0.065);
422 const double s = mandelstam_s;
428 constexpr
double a0 = 10.508;
429 constexpr
double a1 = -3.716;
430 constexpr
double a2 = 1.845;
431 constexpr
double a3 = -0.764;
432 constexpr
double a4 = 0.508;
435 const double p_lab2 = p_lab * p_lab;
437 return (a0 + a1 * p_lab + a2 * p_lab2) / (1 + a3 * p_lab + a4 * p_lab2);
457 std::vector<double> dedup_x;
458 std::vector<double> dedup_y;
459 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
460 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
462 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
471 if (std::sqrt(mandelstam_s) < 1.68) {
477 constexpr
double a0 = 186.03567644;
478 constexpr
double a1 = 0.22002795;
479 constexpr
double a2 = 0.64907116;
481 const double p_i = p_lab;
482 const double p_f = p_lab;
484 const double ratio = a1 * a1 / (a1 * a1 + p_f * p_f);
485 sigma = a0 * p_f / (p_i * mandelstam_s) * std::pow(ratio, a2);
497 make_unique<InterpolateDataSpline>(x, y);
499 const auto old_sigma = sigma;
500 sigma -= (*kminusp_elastic_res_interpolation)(p_lab);
502 std::cout <<
"NEGATIVE SIGMA: sigma=" << sigma
503 <<
", sqrt(s)=" << std::sqrt(mandelstam_s)
504 <<
", sig_el_exp=" << old_sigma
505 <<
", sig_el_res=" << (*kminusp_elastic_res_interpolation)(p_lab)
538 std::vector<double> dedup_x;
539 std::vector<double> dedup_y;
540 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
541 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
543 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
554 std::vector<double> dedup_x;
555 std::vector<double> dedup_y;
556 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
557 dedup_y =
smooth(dedup_x, dedup_y, 0.05, 5);
559 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
575 static void initialize(std::unordered_map<std::pair<uint64_t, uint64_t>,
double,
590 double weight_numerator,
double weight_other) {
591 assert(weight_numerator + weight_other != 0);
594 pack(c.pdgcode().code(), d.pdgcode().code()));
595 const double ratio = weight_numerator / (weight_numerator + weight_other);
606 type_p, type_K_p, type_K_z, type_Delta_pp);
608 type_p, type_K_p, type_K_p, type_Delta_p);
610 add_to_ratios(type_p, type_K_p, type_K_z, type_Delta_pp, weight1, weight2);
611 add_to_ratios(type_p, type_K_p, type_K_p, type_Delta_p, weight2, weight1);
615 type_n, type_K_p, type_K_z, type_Delta_p);
617 type_n, type_K_p, type_K_p, type_Delta_z);
619 add_to_ratios(type_n, type_K_p, type_K_z, type_Delta_p, weight1, weight2);
620 add_to_ratios(type_n, type_K_p, type_K_p, type_Delta_z, weight2, weight1);
626 type_p, type_K_z, type_K_z, type_Delta_p);
628 type_p, type_K_z, type_K_p, type_Delta_z);
630 add_to_ratios(type_p, type_K_z, type_K_z, type_Delta_p, weight1, weight2);
631 add_to_ratios(type_p, type_K_z, type_K_p, type_Delta_z, weight2, weight1);
635 type_n, type_K_z, type_K_z, type_Delta_z);
637 type_n, type_K_z, type_K_p, type_Delta_m);
639 add_to_ratios(type_n, type_K_z, type_K_z, type_Delta_z, weight1, weight2);
640 add_to_ratios(type_n, type_K_z, type_K_p, type_Delta_m, weight2, weight1);
652 for (
const auto&
p : {&a, &b, &c, &d}) {
653 if (
p->is_nucleon()) {
655 flip =
p->antiparticle_sign();
657 assert(
p->antiparticle_sign() == flip);
661 const auto key = std::make_pair(
673 constexpr
double a0 = 100;
674 constexpr
double a1 = 0.15;
675 constexpr
unsigned a2 = 2;
678 const double p_i = p_lab;
679 const double p_f = p_lab;
681 return a0 * p_f / (p_i * mandelstam_s) *
682 pow_int(a1 * a1 / (a1 * a1 + p_f * p_f), a2);
713 assert(p_lambda != 0);
714 assert(sqrts_sqrts0 >= 0);
715 return 37.15 / 2 * p_N / p_lambda * std::pow(sqrts_sqrts0, -0.16);
723 assert(sqrts_sqrts0 >= 0);
724 return 24.3781 * std::pow(sqrts_sqrts0, -0.479);
732 assert(sqrts_sqrts0 >= 0);
733 if (sqrts_sqrts0 < 0.03336) {
734 return 6.475 * std::pow(sqrts_sqrts0, -0.4167);
736 return 14.5054 * std::pow(sqrts_sqrts0, -0.1795);
745 assert(sqrts_sqrts0 >= 0);
746 if (sqrts_sqrts0 < 0.09047) {
747 return 5.625 * std::pow(sqrts_sqrts0, -0.318);
749 return 4.174 * std::pow(sqrts_sqrts0, -0.4421);
766 return 14.194 * std::pow(sqrts_sqrts0, -0.442);
const std::initializer_list< double > KPLUSN_TOT_SIG
PDG data on K+ n total cross section: cross section.
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)
const std::initializer_list< double > PIMINUSP_ELASTIC_P_LAB
PDG data on pi- p elastic cross section: momentum in lab frame.
const std::initializer_list< double > KPLUSP_TOT_PLAB
PDG data on K+ p total cross section: momentum in lab frame.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_sigma0k0_interpolation
An interpolation that gets lazily filled using the PIMINUSP_SIGMA0K0_RES data.
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.
constexpr double really_small
Numerical error tolerance.
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).
constexpr uint64_t pack(int32_t x, int32_t y)
Pack two int32_t into an uint64_t.
double kplusp_elastic_background(double mandelstam_s)
K+ p elastic background cross section parametrization.
Collection of useful constants that are known at compile time.
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 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 ...
const std::initializer_list< double > PIPLUSP_ELASTIC_P_LAB
PDG data on pi+ p elastic cross section: momentum in lab frame.
const std::initializer_list< double > PIPLUSP_RES_SIG
Elastic π⁺ N⁺ cross section contributions from decays.
constexpr T pow_int(const T base, unsigned const exponent)
Efficient template for calculating integer powers using squaring.
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...
const std::initializer_list< double > PIMINUSP_RES_SIG
Elastic π⁻ N⁺ cross section contributions from decays.
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
constexpr double nucleon_mass
Nucleon mass in GeV.
double k0p_elastic_background(double mandelstam_s)
K0 p elastic background cross section parametrization Source: Buss:2011mx, B.3.9. ...
const std::initializer_list< double > PIMINUSP_RES_SQRTS
Center-of-mass energy list for π⁻ N⁺
static std::unique_ptr< InterpolateDataLinear< double > > kplusn_total_interpolation
An interpolation that gets lazily filled using the KPLUSN_TOT data.
std::unordered_map< std::pair< uint64_t, uint64_t >, double, pair_hash > ratios_
Internal representation of isospin weights once calculated.
const std::initializer_list< double > PIMINUSP_LAMBDAK0_SIG
PDG data on pi- p to Lambda K0 cross section: cross section.
static std::unique_ptr< InterpolateDataLinear< double > > piplusp_elastic_interpolation
An interpolation that gets lazily filled using the PIPLUSP_ELASTIC_SIG data.
const std::initializer_list< double > PIPLUSP_SIGMAPLUSKPLUS_SIG
PDG data on pi+ p to Sigma+ K+ section: cross section.
double kplusn_k0p(double mandelstam_s)
K+ n charge exchange cross section parametrization.
KaonNucleonRatios kaon_nucleon_ratios
double plab_from_s(double mandelstam_s, double mass)
Convert Mandelstam-s to p_lab in a fixed-target collision.
const std::initializer_list< double > PIMINUSP_SIGMAMINUSKPLUS_P_LAB
PDG data on pi- p to Sigma- K+ cross section: momentum in lab frame.
constexpr double pion_mass
Pion mass in GeV.
double kbar0n_elastic_background(double mandelstam_s)
Kbar0 n elastic background cross section parametrization Source: Buss:2011mx, B.3.9.
static const ParticleType & find(PdgCode pdgcode)
Returns the ParticleType object for the given pdgcode.
const std::initializer_list< double > PIMINUSP_SIGMAMINUSKPLUS_SIG
PDG data on pi- p to Sigma- K+ cross section: cross section.
double kminusn_piminuslambda(double sqrts)
K- n <-> pi- Lambda cross section parametrization Follow from the parametrization with the same stran...
const std::initializer_list< double > PIMINUSP_ELASTIC_SIG
PDG data on pi- p elastic cross section: cross section.
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...
static std::unique_ptr< InterpolateDataSpline > kminusp_elastic_res_interpolation
An interpolation that gets lazily filled using the KMINUSP_RES data.
static double piplusp_elastic_pdg(double mandelstam_s)
constexpr int Delta_pp
Δ⁺⁺.
const std::initializer_list< double > KMINUSP_RES_SIG
Elastic K̅⁻ N⁺ cross section contributions from decays.
Particle type contains the static properties of a particle species.
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.
std::pair< std::vector< T >, std::vector< T > > dedup_avg(const std::vector< T > &x, const std::vector< T > &y)
Remove duplicates from data (x, y) by averaging y.
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...
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_sigmaminuskplus_interpolation
An interpolation that gets lazily filled using the PIMINUSP_SIGMAMINUSKPLUS data. ...
std::vector< T > smooth(const std::vector< T > &x, const std::vector< T > &y, T span=2./3, size_t iter=3, T delta=0)
Apply the LOWESS smoother (see the reference below) to the given data (x, y).
constexpr T square(const T base)
Efficient template for calculating the square.
double piplusp_elastic(double mandelstam_s)
pi+p elastic cross section parametrization, PDG data.
constexpr double kaon_mass
Kaon mass in GeV.
const std::initializer_list< double > PIMINUSP_SIGMA0K0_RES_SIG
pi- p to Sigma0 K0 cross section: cross section
const std::initializer_list< double > PIPLUSP_RES_SQRTS
Center-of-mass energy list for π⁺ N⁺
static void initialize(std::unordered_map< std::pair< uint64_t, uint64_t >, double, pair_hash > &ratios)
Calculate and store isospin ratios for K N -> K Delta reactions.
static double kminusp_elastic_pdg(double mandelstam_s)
static std::unique_ptr< InterpolateDataLinear< double > > kminusp_elastic_interpolation
An interpolation that gets lazily filled using the KMINUSP_ELASTIC data.
double pp_elastic(double mandelstam_s)
pp elastic cross section parametrization Source: Weil:2013mya, eq.
const std::initializer_list< double > KMINUSP_ELASTIC_P_LAB
PDG data on K- p elastic cross section: momentum in lab frame.
double kminusp_piplussigmaminus(double sqrts)
K- p <-> pi+ Sigma- cross section parametrization Taken from UrQMD (Graef:2014mra).
const std::initializer_list< double > KPLUSP_TOT_SIG
PDG data on K+ p total cross section: cross section.
const std::initializer_list< double > PIMINUSP_SIGMA0K0_RES_SQRTS
pi- p to Sigma0 K0 cross section: square root s
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. ...
static double piminusp_elastic_pdg(double mandelstam_s)
const std::initializer_list< double > PIPLUSP_SIGMAPLUSKPLUS_P_LAB
PDG data on pi+ p to Sigma+ K+ cross section: momentum in lab frame.
double lambdasigmaplus_xi0p(double sqrts_sqrts0)
Lambda Sigma+ <-> Xi0 p cross section parametrization Two hyperon exchange, based on effective model ...
const std::initializer_list< double > KMINUSP_RES_SQRTS
Center-of-mass energy list for K̅⁻ N⁺
static std::unique_ptr< InterpolateDataLinear< double > > kplusp_total_interpolation
An interpolation that gets lazily filled using the KPLUSP_TOT data.
const std::initializer_list< double > PIPLUSP_ELASTIC_SIG
PDG data on pi+ p elastic cross section: cross section.
double isospin_clebsch_gordan_sqr_2to2(const ParticleType &p_a, const ParticleType &p_b, const ParticleType &p_c, const ParticleType &p_d, const int I=-1)
Calculate the squared isospin Clebsch-Gordan coefficient for a 2-to-2 reaction A + B -> C + D...
double kplusn_inelastic_background(double mandelstam_s)
K+ n inelastic background cross section parametrization Source: Buss:2011mx, B.3.8.
const std::initializer_list< double > PIMINUSP_LAMBDAK0_P_LAB
PDG data on pi- p to Lambda K0 cross section: momentum in lab frame.
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
static std::unique_ptr< InterpolateDataSpline > piminusp_elastic_res_interpolation
An interpolation that gets lazily filled using the PIMINUSP_RES data.
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.
const std::initializer_list< double > KMINUSP_ELASTIC_SIG
PDG data on K- p elastic cross section: cross section.
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 ...
static std::unique_ptr< InterpolateDataSpline > piplusp_elastic_res_interpolation
A null interpolation that gets filled using the PIPLUSP_RES data.
double kbar0p_elastic_background(double mandelstam_s)
Kbar0 p elastic background cross section parametrization Source: Buss:2011mx, B.3.9.
const std::initializer_list< double > KPLUSN_TOT_PLAB
PDG data on K+ n total cross section: momentum in lab frame.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_elastic_interpolation
An interpolation that gets lazily filled using the PIMINUSP_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > piplusp_sigmapluskplus_interpolation
An interpolation that gets lazily filled using the PIPLUSP_SIGMAPLUSKPLUS_SIG data.
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 ...
std::int32_t code() const
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_lambdak0_interpolation
An interpolation that gets lazily filled using the PIMINUSP_LAMBDAK0 data.
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 ...