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);
162 sigma -= (*piplusp_elastic_res_interpolation)(mandelstam_s);
178 std::vector<double> dedup_x;
179 std::vector<double> dedup_y;
180 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
181 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 5);
183 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
198 std::vector<double> dedup_x;
199 std::vector<double> dedup_y;
200 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
201 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
203 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
212 const auto logp = std::log(p_lab);
213 if (mandelstam_s < 1.69) {
215 }
else if (mandelstam_s > 4.84) {
216 sigma = 1.76 + 11.2 * std::pow(p_lab, -0.64) + 0.043 * logp * logp;
225 if (mandelstam_s > 3.24 && mandelstam_s < 3.8809) {
226 sigma *= (0.12 * std::cos(2 * M_PI * (std::sqrt(mandelstam_s) - 1.8) /
237 std::vector<double> dedup_x;
238 std::vector<double> dedup_y;
239 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
241 make_unique<InterpolateDataSpline>(dedup_x, dedup_y);
243 sigma -= (*piminusp_elastic_res_interpolation)(mandelstam_s);
259 std::vector<double> dedup_x;
260 std::vector<double> dedup_y;
261 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
262 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
264 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
279 std::vector<double> dedup_x;
280 std::vector<double> dedup_y;
281 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
282 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
284 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
299 std::vector<double> dedup_x;
300 std::vector<double> dedup_y;
301 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
302 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
304 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
306 const double sqrts = std::sqrt(mandelstam_s);
316 }
else if (p_lab < 0.8) {
317 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
318 }
else if (p_lab < 2.0) {
319 return 1250 / (p_lab + 50) - 4 * (p_lab - 1.3) * (p_lab - 1.3);
320 }
else if (p_lab < 2.776) {
321 return 77 / (p_lab + 1.5);
323 const auto logp = std::log(p_lab);
324 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
330 const double p_lab = (m1 > m2) ?
plab_from_s(mandelstam_s, m2, m1)
332 const auto logp = std::log(p_lab);
333 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
340 return 34 * std::pow(p_lab / 0.4, -2.104);
341 }
else if (p_lab < 0.8) {
342 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
343 }
else if (p_lab < 1.5) {
344 return 23.5 + 24.6 / (1 + std::exp(-(p_lab - 1.2) / 0.1));
345 }
else if (p_lab < 5.0) {
346 return 41 + 60 * (p_lab - 0.9) * std::exp(-1.2 * p_lab);
348 const auto logp = std::log(p_lab);
349 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
359 }
else if (p_lab < 0.8) {
360 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
361 }
else if (p_lab < 2.0) {
362 return 31 / std::sqrt(p_lab);
363 }
else if (p_lab < 2.776) {
364 return 77 / (p_lab + 1.5);
366 const auto logp = std::log(p_lab);
367 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
374 const auto logp = std::log(p_lab);
376 return 6.3555 * std::pow(p_lab, -3.2481) * std::exp(-0.377 * logp * logp);
377 }
else if (p_lab < 1.0) {
378 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
379 }
else if (p_lab < 2.0) {
380 return 24.2 + 8.9 * p_lab;
381 }
else if (p_lab < 5.0) {
384 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
392 }
else if (p_lab < 5.0) {
393 return 31.6 + 18.3 / p_lab - 1.1 / (p_lab * p_lab) - 3.8 * p_lab;
395 const auto logp = std::log(p_lab);
396 return 10.2 + 52.7 * std::pow(p_lab, -1.16) + 0.125 * logp * logp -
404 return 271.6 * std::exp(-1.1 * p_lab * p_lab);
405 }
else if (p_lab < 5.0) {
406 return 75.0 + 43.1 / p_lab + 2.6 / (p_lab * p_lab) - 3.9 * p_lab;
408 const auto logp = std::log(p_lab);
409 return 38.4 + 77.6 * std::pow(p_lab, -0.64) + 0.26 * logp * logp -
415 const double tmp = std::sqrt(mandelstam_s) - 2.172;
416 return 4.0 + 0.27 / (tmp * tmp + 0.065 * 0.065);
420 const double s = mandelstam_s;
426 constexpr
double a0 = 10.508;
427 constexpr
double a1 = -3.716;
428 constexpr
double a2 = 1.845;
429 constexpr
double a3 = -0.764;
430 constexpr
double a4 = 0.508;
433 const double p_lab2 = p_lab * p_lab;
435 return (a0 + a1 * p_lab + a2 * p_lab2) / (1 + a3 * p_lab + a4 * p_lab2);
455 std::vector<double> dedup_x;
456 std::vector<double> dedup_y;
457 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
458 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
460 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
469 if (std::sqrt(mandelstam_s) < 1.68) {
475 constexpr
double a0 = 186.03567644;
476 constexpr
double a1 = 0.22002795;
477 constexpr
double a2 = 0.64907116;
479 const double p_i = p_lab;
480 const double p_f = p_lab;
482 const double ratio = a1 * a1 / (a1 * a1 + p_f * p_f);
483 sigma = a0 * p_f / (p_i * mandelstam_s) * std::pow(ratio, a2);
495 make_unique<InterpolateDataSpline>(x, y);
497 const auto old_sigma = sigma;
498 sigma -= (*kminusp_elastic_res_interpolation)(p_lab);
500 std::cout <<
"NEGATIVE SIGMA: sigma=" << sigma
501 <<
", sqrt(s)=" << std::sqrt(mandelstam_s)
502 <<
", sig_el_exp=" << old_sigma
503 <<
", sig_el_res=" << (*kminusp_elastic_res_interpolation)(p_lab)
536 std::vector<double> dedup_x;
537 std::vector<double> dedup_y;
538 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
539 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
541 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
552 std::vector<double> dedup_x;
553 std::vector<double> dedup_y;
554 std::tie(dedup_x, dedup_y) =
dedup_avg(x, y);
555 dedup_y =
smooth(dedup_x, dedup_y, 0.05, 5);
557 make_unique<InterpolateDataLinear<double>>(dedup_x, dedup_y);
573 static void initialize(std::unordered_map<std::pair<uint64_t, uint64_t>,
double,
588 double weight_numerator,
double weight_other) {
589 assert(weight_numerator + weight_other != 0);
592 pack(c.pdgcode().code(), d.pdgcode().code()));
593 const double ratio = weight_numerator / (weight_numerator + weight_other);
604 type_p, type_K_p, type_K_z, type_Delta_pp);
606 type_p, type_K_p, type_K_p, type_Delta_p);
608 add_to_ratios(type_p, type_K_p, type_K_z, type_Delta_pp, weight1, weight2);
609 add_to_ratios(type_p, type_K_p, type_K_p, type_Delta_p, weight2, weight1);
613 type_n, type_K_p, type_K_z, type_Delta_p);
615 type_n, type_K_p, type_K_p, type_Delta_z);
617 add_to_ratios(type_n, type_K_p, type_K_z, type_Delta_p, weight1, weight2);
618 add_to_ratios(type_n, type_K_p, type_K_p, type_Delta_z, weight2, weight1);
624 type_p, type_K_z, type_K_z, type_Delta_p);
626 type_p, type_K_z, type_K_p, type_Delta_z);
628 add_to_ratios(type_p, type_K_z, type_K_z, type_Delta_p, weight1, weight2);
629 add_to_ratios(type_p, type_K_z, type_K_p, type_Delta_z, weight2, weight1);
633 type_n, type_K_z, type_K_z, type_Delta_z);
635 type_n, type_K_z, type_K_p, type_Delta_m);
637 add_to_ratios(type_n, type_K_z, type_K_z, type_Delta_z, weight1, weight2);
638 add_to_ratios(type_n, type_K_z, type_K_p, type_Delta_m, weight2, weight1);
650 for (
const auto&
p : {&a, &b, &c, &d}) {
651 if (
p->is_nucleon()) {
653 flip =
p->antiparticle_sign();
655 assert(
p->antiparticle_sign() == flip);
659 const auto key = std::make_pair(
671 constexpr
double a0 = 100;
672 constexpr
double a1 = 0.15;
673 constexpr
unsigned a2 = 2;
676 const double p_i = p_lab;
677 const double p_f = p_lab;
679 return a0 * p_f / (p_i * mandelstam_s) *
680 pow_int(a1 * a1 / (a1 * a1 + p_f * p_f), a2);
711 assert(p_lambda != 0);
712 assert(sqrts_sqrts0 >= 0);
713 return 37.15 / 2 * p_N / p_lambda * std::pow(sqrts_sqrts0, -0.16);
721 assert(sqrts_sqrts0 >= 0);
722 return 24.3781 * std::pow(sqrts_sqrts0, -0.479);
730 assert(sqrts_sqrts0 >= 0);
731 if (sqrts_sqrts0 < 0.03336) {
732 return 6.475 * std::pow(sqrts_sqrts0, -0.4167);
734 return 14.5054 * std::pow(sqrts_sqrts0, -0.1795);
743 assert(sqrts_sqrts0 >= 0);
744 if (sqrts_sqrts0 < 0.09047) {
745 return 5.625 * std::pow(sqrts_sqrts0, -0.318);
747 return 4.174 * std::pow(sqrts_sqrts0, -0.4421);
764 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 ...
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.
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.
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.
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.
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.
std::int32_t code() const
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 ...
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 ...