13 #include <initializer_list>
28 double xs_high_energy(
double mandelstam_s,
bool is_opposite_charge,
double ma,
29 double mb,
double P,
double R1,
double R2) {
30 const double M = 2.1206;
31 const double H = 0.272;
32 const double eta1 = 0.4473;
33 const double eta2 = 0.5486;
34 const double s_sab = mandelstam_s / (ma + mb + M) / (ma + mb + M);
36 H * std::log(s_sab) * std::log(s_sab) + P + R1 * std::pow(s_sab, -eta1);
37 xs = is_opposite_charge ? xs + R2 * std::pow(s_sab, -eta2)
38 : xs - R2 * std::pow(s_sab, -eta2);
43 return xs_high_energy(mandelstam_s,
false, 0.939, 0.939, 34.41, 13.07, 7.394);
47 return xs_high_energy(mandelstam_s,
true, 0.939, 0.939, 34.41, 13.07, 7.394);
51 return xs_high_energy(mandelstam_s,
false, 0.939, 0.939, 34.41, 12.52, 6.66);
55 return xs_high_energy(mandelstam_s,
true, 0.939, 0.939, 34.41, 12.52, 6.66);
59 return xs_high_energy(mandelstam_s,
false, 0.939, 0.138, 18.75, 9.56, 1.767);
63 return xs_high_energy(mandelstam_s,
true, 0.939, 0.138, 18.75, 9.56, 1.767);
67 const double xs_ref = 120.;
69 const double constant_a = 0.05;
70 const double constant_b = 0.6;
71 const double factor = constant_a * constant_a * s_ref /
72 ((mandelstam_s - s_ref) * (mandelstam_s - s_ref) +
73 constant_a * constant_a * s_ref) +
75 return xs_ref * (s_ref / mandelstam_s) * factor;
80 const double sqrts = std::sqrt(mandelstam_s);
84 double xs = xs_0 * std::pow(std::log(sqrts / e_0), lambda_pow);
110 std::vector<double> dedup_x;
111 std::vector<double> dedup_y;
112 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
113 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
115 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
122 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
124 const auto logp = std::log(p_lab);
125 return 11.4 * std::pow(p_lab, -0.4) + 0.079 * logp * logp;
129 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
141 if (mandelstam_s < 2.25) {
143 }
else if (mandelstam_s > 4.84) {
144 const auto logp = std::log(p_lab);
145 sigma = 11.4 * std::pow(p_lab, -0.4) + 0.079 * logp * logp;
158 std::make_unique<InterpolateDataSpline>(x, y);
160 sigma -= (*piplusp_elastic_res_interpolation)(mandelstam_s);
176 std::vector<double> dedup_x;
177 std::vector<double> dedup_y;
178 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
179 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 5);
181 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
196 std::vector<double> dedup_x;
197 std::vector<double> dedup_y;
198 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
199 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
201 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
210 const auto logp = std::log(p_lab);
211 if (mandelstam_s < 1.69) {
213 }
else if (mandelstam_s > 4.84) {
214 sigma = 1.76 + 11.2 * std::pow(p_lab, -0.64) + 0.043 * logp * logp;
223 if (mandelstam_s > 3.24 && mandelstam_s < 3.8809) {
224 sigma *= (0.12 * std::cos(2 * M_PI * (std::sqrt(mandelstam_s) - 1.8) /
235 std::vector<double> dedup_x;
236 std::vector<double> dedup_y;
237 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
239 std::make_unique<InterpolateDataSpline>(dedup_x, dedup_y);
241 sigma -= (*piminusp_elastic_res_interpolation)(mandelstam_s);
257 std::vector<double> dedup_x;
258 std::vector<double> dedup_y;
259 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
260 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
262 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
277 std::vector<double> dedup_x;
278 std::vector<double> dedup_y;
279 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
280 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
282 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
297 std::vector<double> dedup_x;
298 std::vector<double> dedup_y;
299 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
300 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
302 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
304 const double sqrts = std::sqrt(mandelstam_s);
314 }
else if (p_lab < 0.8) {
315 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
316 }
else if (p_lab < 2.0) {
317 return 1250 / (p_lab + 50) - 4 * (p_lab - 1.3) * (p_lab - 1.3);
318 }
else if (p_lab < 2.776) {
319 return 77 / (p_lab + 1.5);
321 const auto logp = std::log(p_lab);
322 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
328 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
330 const auto logp = std::log(p_lab);
331 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
338 return 34 * std::pow(p_lab / 0.4, -2.104);
339 }
else if (p_lab < 0.8) {
340 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
341 }
else if (p_lab < 1.5) {
342 return 23.5 + 24.6 / (1 + std::exp(-(p_lab - 1.2) / 0.1));
343 }
else if (p_lab < 5.0) {
344 return 41 + 60 * (p_lab - 0.9) * std::exp(-1.2 * p_lab);
346 const auto logp = std::log(p_lab);
347 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
357 }
else if (p_lab < 0.8) {
358 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
359 }
else if (p_lab < 2.0) {
360 return 31 / std::sqrt(p_lab);
361 }
else if (p_lab < 2.776) {
362 return 77 / (p_lab + 1.5);
364 const auto logp = std::log(p_lab);
365 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
372 const auto logp = std::log(p_lab);
374 return 6.3555 * std::pow(p_lab, -3.2481) * std::exp(-0.377 * logp * logp);
375 }
else if (p_lab < 1.0) {
376 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
377 }
else if (p_lab < 2.0) {
378 return 24.2 + 8.9 * p_lab;
379 }
else if (p_lab < 5.0) {
382 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 -
410 return 271.6 * std::exp(-1.1 * p_lab * p_lab);
411 }
else if (p_lab < 5.0) {
412 return 75.0 + 43.1 / p_lab + 2.6 / (p_lab * p_lab) - 3.9 * p_lab;
414 const auto logp = std::log(p_lab);
415 return 38.4 + 77.6 * std::pow(p_lab, -0.64) + 0.26 * logp * logp -
421 const double tmp = std::sqrt(mandelstam_s) - 2.172;
422 return 4.0 + 0.27 / (tmp * tmp + 0.065 * 0.065);
426 const double s = mandelstam_s;
432 constexpr
double a0 = 10.508;
433 constexpr
double a1 = -3.716;
434 constexpr
double a2 = 1.845;
435 constexpr
double a3 = -0.764;
436 constexpr
double a4 = 0.508;
439 const double p_lab2 = p_lab * p_lab;
441 return (a0 + a1 * p_lab + a2 * p_lab2) / (1 + a3 * p_lab + a4 * p_lab2);
461 std::vector<double> dedup_x;
462 std::vector<double> dedup_y;
463 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
464 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
466 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
475 if (std::sqrt(mandelstam_s) < 1.68) {
481 constexpr
double a0 = 186.03567644;
482 constexpr
double a1 = 0.22002795;
483 constexpr
double a2 = 0.64907116;
485 const double p_i = p_lab;
486 const double p_f = p_lab;
488 const double ratio = a1 * a1 / (a1 * a1 + p_f * p_f);
489 sigma = a0 * p_f / (p_i * mandelstam_s) * std::pow(ratio, a2);
501 std::make_unique<InterpolateDataSpline>(x, y);
503 const auto old_sigma = sigma;
504 sigma -= (*kminusp_elastic_res_interpolation)(p_lab);
506 std::cout <<
"NEGATIVE SIGMA: sigma=" << sigma
507 <<
", sqrt(s)=" << std::sqrt(mandelstam_s)
508 <<
", sig_el_exp=" << old_sigma
509 <<
", sig_el_res=" << (*kminusp_elastic_res_interpolation)(p_lab)
542 std::vector<double> dedup_x;
543 std::vector<double> dedup_y;
544 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
545 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
547 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
558 std::vector<double> dedup_x;
559 std::vector<double> dedup_y;
560 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
561 dedup_y =
smooth(dedup_x, dedup_y, 0.05, 5);
563 std::make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
579 static void initialize(std::unordered_map<std::pair<uint64_t, uint64_t>,
double,
594 double weight_numerator,
double weight_other) {
595 assert(weight_numerator + weight_other != 0);
598 pack(c.pdgcode().code(), d.pdgcode().code()));
599 const double ratio = weight_numerator / (weight_numerator + weight_other);
610 type_p, type_K_p, type_K_z, type_Delta_pp);
612 type_p, type_K_p, type_K_p, type_Delta_p);
614 add_to_ratios(type_p, type_K_p, type_K_z, type_Delta_pp, weight1, weight2);
615 add_to_ratios(type_p, type_K_p, type_K_p, type_Delta_p, weight2, weight1);
619 type_n, type_K_p, type_K_z, type_Delta_p);
621 type_n, type_K_p, type_K_p, type_Delta_z);
623 add_to_ratios(type_n, type_K_p, type_K_z, type_Delta_p, weight1, weight2);
624 add_to_ratios(type_n, type_K_p, type_K_p, type_Delta_z, weight2, weight1);
630 type_p, type_K_z, type_K_z, type_Delta_p);
632 type_p, type_K_z, type_K_p, type_Delta_z);
634 add_to_ratios(type_p, type_K_z, type_K_z, type_Delta_p, weight1, weight2);
635 add_to_ratios(type_p, type_K_z, type_K_p, type_Delta_z, weight2, weight1);
639 type_n, type_K_z, type_K_z, type_Delta_z);
641 type_n, type_K_z, type_K_p, type_Delta_m);
643 add_to_ratios(type_n, type_K_z, type_K_z, type_Delta_z, weight1, weight2);
644 add_to_ratios(type_n, type_K_z, type_K_p, type_Delta_m, weight2, weight1);
656 for (
const auto&
p : {&a, &b, &c, &d}) {
657 if (
p->is_nucleon()) {
659 flip =
p->antiparticle_sign();
661 assert(
p->antiparticle_sign() == flip);
665 const auto key = std::make_pair(
677 constexpr
double a0 = 100;
678 constexpr
double a1 = 0.15;
679 constexpr
unsigned a2 = 2;
682 const double p_i = p_lab;
683 const double p_f = p_lab;
685 return a0 * p_f / (p_i * mandelstam_s) *
686 pow_int(a1 * a1 / (a1 * a1 + p_f * p_f), a2);
717 assert(p_lambda != 0);
718 assert(sqrts_sqrts0 >= 0);
719 return 37.15 / 2 * p_N / p_lambda * std::pow(sqrts_sqrts0, -0.16);
727 assert(sqrts_sqrts0 >= 0);
728 return 24.3781 * std::pow(sqrts_sqrts0, -0.479);
736 assert(sqrts_sqrts0 >= 0);
737 if (sqrts_sqrts0 < 0.03336) {
738 return 6.475 * std::pow(sqrts_sqrts0, -0.4167);
740 return 14.5054 * std::pow(sqrts_sqrts0, -0.1795);
749 assert(sqrts_sqrts0 >= 0);
750 if (sqrts_sqrts0 < 0.09047) {
751 return 5.625 * std::pow(sqrts_sqrts0, -0.318);
753 return 4.174 * std::pow(sqrts_sqrts0, -0.4421);
770 return 14.194 * std::pow(sqrts_sqrts0, -0.442);
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.
Particle type contains the static properties of a particle species.
static const ParticleType & find(PdgCode pdgcode)
Returns the ParticleType object for the given pdgcode.
std::int32_t code() const
Collection of useful constants that are known at compile time.
constexpr int Delta_pp
Δ⁺⁺.
double kplusn_k0p(double mandelstam_s)
K+ n charge exchange cross section parametrization.
double plab_from_s(double mandelstam_s, double mass)
Convert Mandelstam-s to p_lab in a fixed-target collision.
static double piplusp_elastic_pdg(double mandelstam_s)
double kminusp_pi0lambda(double sqrts)
K- p <-> pi0 Lambda cross section parametrization Fit to Landolt-Börnstein instead of UrQMD values.
const std::initializer_list< double > PIPLUSP_RES_SQRTS
Center-of-mass energy.
const std::initializer_list< double > KMINUSP_RES_SQRTS
Center-of-mass energy list for K̅⁻ N⁺
const std::initializer_list< double > PIMINUSP_ELASTIC_P_LAB
PDG data on pi- p elastic cross section: momentum in lab frame.
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).
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
static std::unique_ptr< InterpolateDataLinear< double > > piplusp_sigmapluskplus_interpolation
An interpolation that gets lazily filled using the PIPLUSP_SIGMAPLUSKPLUS_SIG data.
static std::unique_ptr< InterpolateDataSpline > piplusp_elastic_res_interpolation
A null interpolation that gets filled using the PIPLUSP_RES data.
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
const std::initializer_list< double > KPLUSP_TOT_SIG
PDG data on K+ p total cross section: cross section.
double kminusn_piminussigma0(double sqrts)
K- n <-> pi- Sigma0 cross section parametrization Follow from the parametrization with the same stran...
const std::initializer_list< double > KMINUSP_RES_SIG
Elastic K̅⁻ N⁺ cross section contributions from decays.
double kbar0p_elastic_background(double mandelstam_s)
Kbar0 p elastic background cross section parametrization Source: Buss:2011mx , B.3....
const std::initializer_list< double > PIPLUSP_SIGMAPLUSKPLUS_SIG
PDG data on pi+ p to Sigma+ K+ section: cross section.
const std::initializer_list< double > PIMINUSP_RES_SIG
Elastic π⁻N⁺ cross section contributions from decays.
const std::initializer_list< double > PIPLUSP_SIGMAPLUSKPLUS_P_LAB
PDG data on pi+ p to Sigma+ K+ cross section: momentum in lab frame.
static std::unique_ptr< InterpolateDataSpline > kminusp_elastic_res_interpolation
An interpolation that gets lazily filled using the KMINUSP_RES data.
const std::initializer_list< double > KPLUSN_TOT_SIG
PDG data on K+ n total cross section: cross section.
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
const std::initializer_list< double > PIPLUSP_RES_SIG
Elastic π⁺N⁺ cross section contributions from decays.
static double piminusp_elastic_pdg(double mandelstam_s)
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...
const std::initializer_list< double > PIMINUSP_ELASTIC_SIG
PDG data on pi- p elastic cross section: cross section.
const std::initializer_list< double > KPLUSN_TOT_PLAB
PDG data on K+ n total cross section: momentum in lab frame.
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)
static double kminusp_elastic_pdg(double mandelstam_s)
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 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.
static std::unique_ptr< InterpolateDataLinear< double > > piplusp_elastic_interpolation
An interpolation that gets lazily filled using the PIPLUSP_ELASTIC_SIG data.
double ppbar_high_energy(double mandelstam_s)
ppbar total cross section at high energies
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_elastic_interpolation
An interpolation that gets lazily filled using the PIMINUSP_ELASTIC data.
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....
const std::initializer_list< double > KMINUSP_ELASTIC_P_LAB
PDG data on K- p elastic cross section: momentum in lab frame.
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 ).
static std::unique_ptr< InterpolateDataLinear< double > > kplusn_total_interpolation
An interpolation that gets lazily filled using the KPLUSN_TOT data.
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 ...
const std::initializer_list< double > PIMINUSP_LAMBDAK0_P_LAB
PDG data on pi- p to Lambda K0 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.
double piplusp_elastic_high_energy(double mandelstam_s, double m1, double m2)
pi+p elactic cross section parametrization.
static std::unique_ptr< InterpolateDataLinear< double > > kplusp_total_interpolation
An interpolation that gets lazily filled using the KPLUSP_TOT data.
double piplusp_sigmapluskplus_pdg(double mandelstam_s)
pi+ p to Sigma+ K+ cross section parametrization, PDG data.
static std::unique_ptr< InterpolateDataLinear< double > > kminusp_elastic_interpolation
An interpolation that gets lazily filled using the KMINUSP_ELASTIC data.
const std::initializer_list< double > PIMINUSP_SIGMAMINUSKPLUS_P_LAB
PDG data on pi- p to Sigma- K+ cross section: momentum in lab frame.
double deuteron_nucleon_elastic(double mandelstam_s)
Deuteron nucleon elastic cross-section [mb] parametrized by Oh:2009gx .
constexpr double nucleon_mass
Nucleon mass in GeV.
constexpr T pow_int(const T base, unsigned const exponent)
Efficient template for calculating integer powers using squaring.
const std::initializer_list< double > PIMINUSP_SIGMA0K0_RES_SIG
pi- p to Sigma0 K0 cross section: cross section
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.
const std::initializer_list< double > PIPLUSP_ELASTIC_P_LAB
PDG data on pi+ p elastic cross section: momentum in lab frame.
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.
double k0p_elastic_background(double mandelstam_s)
K0 p elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
constexpr uint64_t pack(int32_t x, int32_t y)
Pack two int32_t into an uint64_t.
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
const std::initializer_list< double > PIPLUSP_ELASTIC_SIG
PDG data on pi+ p elastic cross section: cross section.
double kplusp_inelastic_background(double mandelstam_s)
K+ p inelastic background cross section parametrization Source: Buss:2011mx , B.3....
const std::initializer_list< double > PIMINUSP_SIGMA0K0_RES_SQRTS
pi- p to Sigma0 K0 cross section: square root s
const std::initializer_list< double > PIMINUSP_SIGMAMINUSKPLUS_SIG
PDG data on pi- p to Sigma- K+ cross section: cross section.
double sigmaplussigmaminus_xi0n(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi0 n cross section parametrization Two hyperon exchange, based on effective model ...
constexpr double pion_mass
Pion mass in GeV.
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
const std::initializer_list< double > KMINUSP_ELASTIC_SIG
PDG data on K- p elastic cross section: cross section.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_sigma0k0_interpolation
An interpolation that gets lazily filled using the PIMINUSP_SIGMA0K0_RES data.
const std::initializer_list< double > PIMINUSP_RES_SQRTS
Center-of-mass energy.
constexpr double really_small
Numerical error tolerance.
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 ...
constexpr double kaon_mass
Kaon mass in GeV.
double kminusp_piplussigmaminus(double sqrts)
K- p <-> pi+ Sigma- cross section parametrization Taken from UrQMD (Graef:2014mra ).
constexpr T square(const T base)
Efficient template for calculating the square.
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 ...
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 piminusp_high_energy(double mandelstam_s)
pi-p total cross section at high energies
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....
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_lambdak0_interpolation
An interpolation that gets lazily filled using the PIMINUSP_LAMBDAK0 data.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_sigmaminuskplus_interpolation
An interpolation that gets lazily filled using the PIMINUSP_SIGMAMINUSKPLUS data.
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.
static std::unique_ptr< InterpolateDataSpline > piminusp_elastic_res_interpolation
An interpolation that gets lazily filled using the PIMINUSP_RES 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 ...
const std::initializer_list< double > PIMINUSP_LAMBDAK0_SIG
PDG data on pi- p to Lambda K0 cross section: cross section.