13 #include <initializer_list>
37 return two_nucleons || nucleon_and_kaon || nucleon_and_pion || two_pions;
40 double xs_high_energy(
double mandelstam_s,
bool is_opposite_charge,
double ma,
41 double mb,
double P,
double R1,
double R2) {
42 const double M = 2.1206;
43 const double H = 0.272;
44 const double eta1 = 0.4473;
45 const double eta2 = 0.5486;
46 const double s_sab = mandelstam_s / (ma + mb + M) / (ma + mb + M);
48 H * std::log(s_sab) * std::log(s_sab) + P + R1 * std::pow(s_sab, -eta1);
49 xs = is_opposite_charge ? xs + R2 * std::pow(s_sab, -eta2)
50 : xs - R2 * std::pow(s_sab, -eta2);
55 return xs_high_energy(mandelstam_s,
false, 0.939, 0.939, 34.41, 13.07, 7.394);
59 return xs_high_energy(mandelstam_s,
true, 0.939, 0.939, 34.41, 13.07, 7.394);
63 return xs_high_energy(mandelstam_s,
false, 0.939, 0.939, 34.41, 12.52, 6.66);
67 return xs_high_energy(mandelstam_s,
true, 0.939, 0.939, 34.41, 12.52, 6.66);
71 return xs_high_energy(mandelstam_s,
false, 0.939, 0.138, 18.75, 9.56, 1.767);
75 return xs_high_energy(mandelstam_s,
true, 0.939, 0.138, 18.75, 9.56, 1.767);
79 const double xs_ref = 120.;
81 const double constant_a = 0.05;
82 const double constant_b = 0.6;
83 const double factor = constant_a * constant_a * s_ref /
84 ((mandelstam_s - s_ref) * (mandelstam_s - s_ref) +
85 constant_a * constant_a * s_ref) +
87 return xs_ref * (s_ref / mandelstam_s) * factor;
92 const double sqrts = std::sqrt(mandelstam_s);
96 double xs = xs_0 * std::pow(std::log(sqrts / e_0), lambda_pow);
115 auto [dedup_x, dedup_y] =
117 dedup_y =
smooth(dedup_x, dedup_y, 0.01, 10);
119 std::make_unique<InterpolateDataLinear<double>>(
131 auto [dedup_x, dedup_y] =
133 dedup_y =
smooth(dedup_x, dedup_y, 0.01, 10);
135 std::make_unique<InterpolateDataLinear<double>>(
147 auto [dedup_x, dedup_y] =
149 dedup_y =
smooth(dedup_x, dedup_y, 0.01, 10);
151 std::make_unique<InterpolateDataLinear<double>>(
168 auto [dedup_x, dedup_y] =
170 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
172 std::make_unique<InterpolateDataLinear<double>>(
185 const auto logp = std::log(p_lab);
186 return 11.4 * std::pow(p_lab, -0.4) + 0.079 * logp * logp;
193 if (mandelstam_s < 2.25) {
195 }
else if (mandelstam_s > 4.84) {
196 const auto logp = std::log(p_lab);
197 sigma = 11.4 * std::pow(p_lab, -0.4) + 0.079 * logp * logp;
212 sigma -= (*piplusp_elastic_res_interpolation)(mandelstam_s);
228 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 5);
230 std::make_unique<InterpolateDataLinear<double>>(
242 auto [dedup_x, dedup_y] =
244 dedup_y =
smooth(dedup_x, dedup_y, 0.01, 6);
246 std::make_unique<InterpolateDataLinear<double>>(
263 auto [dedup_x, dedup_y] =
265 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
267 std::make_unique<InterpolateDataLinear<double>>(
276 if (mandelstam_s < 1.69) {
278 }
else if (mandelstam_s > 4.84) {
284 sigma = std::numeric_limits<double>::infinity();
286 const auto logp = std::log(p_lab);
287 sigma = 1.76 + 11.2 * std::pow(p_lab, -0.64) + 0.043 * logp * logp;
297 if (mandelstam_s > 3.24 && mandelstam_s < 3.8809) {
298 sigma *= (0.12 * std::cos(2 * M_PI * (std::sqrt(mandelstam_s) - 1.8) /
309 auto [dedup_x, dedup_y] =
dedup_avg(x, y);
311 std::make_unique<InterpolateDataSpline>(dedup_x, dedup_y,
314 sigma -= (*piminusp_elastic_res_interpolation)(mandelstam_s);
328 auto [dedup_x, dedup_y] =
330 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
332 std::make_unique<InterpolateDataLinear<double>>(
348 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
350 std::make_unique<InterpolateDataLinear<double>>(
366 dedup_y =
smooth(dedup_x, dedup_y, 0.2, 6);
368 std::make_unique<InterpolateDataLinear<double>>(
371 const double sqrts = std::sqrt(mandelstam_s);
381 }
else if (p_lab < 0.8) {
382 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
383 }
else if (p_lab < 2.0) {
384 return 1250 / (p_lab + 50) - 4 * (p_lab - 1.3) * (p_lab - 1.3);
385 }
else if (p_lab < 2.776) {
386 return 77 / (p_lab + 1.5);
388 const auto logp = std::log(p_lab);
389 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
401 return std::numeric_limits<double>::infinity();
403 const auto logp = std::log(p_lab);
404 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
412 return 34 * std::pow(p_lab / 0.4, -2.104);
413 }
else if (p_lab < 0.8) {
414 return 23.5 + 1000 *
pow_int(p_lab - 0.7, 4);
415 }
else if (p_lab < 1.5) {
416 return 23.5 + 24.6 / (1 + std::exp(-(p_lab - 1.2) / 0.1));
417 }
else if (p_lab < 5.0) {
418 return 41 + 60 * (p_lab - 0.9) * std::exp(-1.2 * p_lab);
420 const auto logp = std::log(p_lab);
421 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
431 }
else if (p_lab < 0.8) {
432 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
433 }
else if (p_lab < 2.0) {
434 return 31 / std::sqrt(p_lab);
435 }
else if (p_lab < 2.776) {
436 return 77 / (p_lab + 1.5);
438 const auto logp = std::log(p_lab);
439 return 11.9 + 26.9 * std::pow(p_lab, -1.21) + 0.169 * logp * logp -
446 const auto logp = std::log(p_lab);
448 return 6.3555 * std::pow(p_lab, -3.2481) * std::exp(-0.377 * logp * logp);
449 }
else if (p_lab < 1.0) {
450 return 33 + 196 * std::pow(std::abs(p_lab - 0.95), 2.5);
451 }
else if (p_lab < 2.0) {
452 return 24.2 + 8.9 * p_lab;
453 }
else if (p_lab < 5.0) {
456 return 48.0 + 0.522 * logp * logp - 4.51 * logp;
468 }
else if (p_lab < 5.0) {
469 return 31.6 + 18.3 / p_lab - 1.1 / (p_lab * p_lab) - 3.8 * p_lab;
471 const auto logp = std::log(p_lab);
472 return 10.2 + 52.7 * std::pow(p_lab, -1.16) + 0.125 * logp * logp -
484 return 271.6 * std::exp(-1.1 * p_lab * p_lab);
485 }
else if (p_lab < 5.0) {
486 return 75.0 + 43.1 / p_lab + 2.6 / (p_lab * p_lab) - 3.9 * p_lab;
488 const auto logp = std::log(p_lab);
489 return 38.4 + 77.6 * std::pow(p_lab, -0.64) + 0.26 * logp * logp -
495 const double tmp = std::sqrt(mandelstam_s) - 2.172;
496 return 4.0 + 0.27 / (tmp * tmp + 0.065 * 0.065);
500 const double excess = (mandelstam_s - 7.93);
501 const double excess_sqr = excess * excess;
502 return 2500.0 * std::exp(-excess_sqr / 0.003) +
503 600.0 * std::exp(-excess_sqr / 0.1) + 10.0;
507 const double x = pion_kinetic_energy;
508 return x * (4.3 + 10.0 * x) / ((x - 0.16) * (x - 0.16) + 0.007);
512 const double x = N_kinetic_energy;
513 return x * (1.0 + 50 * x) / (x * x + 0.01) +
514 4 * x / ((x - 0.008) * (x - 0.008) + 0.0004);
518 return 55.0 / (aN_kinetic_energy + 0.17);
523 auto [dedup_x, dedup_y] =
525 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
527 std::make_unique<InterpolateDataLinear<double>>(
536 auto [dedup_x, dedup_y] =
538 dedup_y =
smooth(dedup_x, dedup_y, 0.05, 5);
540 std::make_unique<InterpolateDataLinear<double>>(
549 auto [dedup_x, dedup_y] =
552 dedup_y =
smooth(dedup_x, dedup_y, 0.01, 5);
554 std::make_unique<InterpolateDataLinear<double>>(
563 auto [dedup_x, dedup_y] =
565 dedup_y =
smooth(dedup_x, dedup_y, 0.05, 5);
567 std::make_unique<InterpolateDataLinear<double>>(
575 constexpr
double a0 = 10.508;
576 constexpr
double a1 = -3.716;
577 constexpr
double a2 = 1.845;
578 constexpr
double a3 = -0.764;
579 constexpr
double a4 = 0.508;
582 const double p_lab2 = p_lab * p_lab;
584 return (a0 + a1 * p_lab + a2 * p_lab2) / (1 + a3 * p_lab + a4 * p_lab2);
602 auto [dedup_x, dedup_y] =
604 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
606 std::make_unique<InterpolateDataLinear<double>>(
616 if (std::sqrt(mandelstam_s) < 1.68) {
622 constexpr
double a0 = 186.03567644;
623 constexpr
double a1 = 0.22002795;
624 constexpr
double a2 = 0.64907116;
628 const double ratio = a1 * a1 / (a1 * a1 + p_lab * p_lab);
629 sigma = a0 / mandelstam_s * std::pow(ratio, a2);
643 const auto old_sigma = sigma;
644 sigma -= (*kminusp_elastic_res_interpolation)(p_lab);
646 std::cout <<
"NEGATIVE SIGMA: sigma=" << sigma
647 <<
", sqrt(s)=" << std::sqrt(mandelstam_s)
648 <<
", sig_el_exp=" << old_sigma
649 <<
", sig_el_res=" << (*kminusp_elastic_res_interpolation)(p_lab)
680 auto [dedup_x, dedup_y] =
682 dedup_y =
smooth(dedup_x, dedup_y, 0.1, 5);
684 std::make_unique<InterpolateDataLinear<double>>(
694 auto [dedup_x, dedup_y] =
696 dedup_y =
smooth(dedup_x, dedup_y, 0.05, 5);
698 std::make_unique<InterpolateDataLinear<double>>(
715 static void initialize(std::unordered_map<std::pair<uint64_t, uint64_t>,
double,
730 double weight_numerator,
double weight_other) {
731 assert(weight_numerator + weight_other != 0);
734 pack(c.pdgcode().code(), d.pdgcode().code()));
735 const double ratio = weight_numerator / (weight_numerator + weight_other);
746 type_p, type_K_p, type_K_z, type_Delta_pp);
748 type_p, type_K_p, type_K_p, type_Delta_p);
750 add_to_ratios(type_p, type_K_p, type_K_z, type_Delta_pp, weight1, weight2);
751 add_to_ratios(type_p, type_K_p, type_K_p, type_Delta_p, weight2, weight1);
755 type_n, type_K_p, type_K_z, type_Delta_p);
757 type_n, type_K_p, type_K_p, type_Delta_z);
759 add_to_ratios(type_n, type_K_p, type_K_z, type_Delta_p, weight1, weight2);
760 add_to_ratios(type_n, type_K_p, type_K_p, type_Delta_z, weight2, weight1);
766 type_p, type_K_z, type_K_z, type_Delta_p);
768 type_p, type_K_z, type_K_p, type_Delta_z);
770 add_to_ratios(type_p, type_K_z, type_K_z, type_Delta_p, weight1, weight2);
771 add_to_ratios(type_p, type_K_z, type_K_p, type_Delta_z, weight2, weight1);
775 type_n, type_K_z, type_K_z, type_Delta_z);
777 type_n, type_K_z, type_K_p, type_Delta_m);
779 add_to_ratios(type_n, type_K_z, type_K_z, type_Delta_z, weight1, weight2);
780 add_to_ratios(type_n, type_K_z, type_K_p, type_Delta_m, weight2, weight1);
791 for (
const auto&
p : {&a, &b, &c, &d}) {
792 if (
p->is_nucleon()) {
794 flip =
p->antiparticle_sign();
796 assert(
p->antiparticle_sign() == flip);
800 const auto key = std::make_pair(
812 constexpr
double a0 = 100;
813 constexpr
double a1 = 0.15;
814 constexpr
unsigned a2 = 2;
820 return a0 / mandelstam_s *
pow_int(a1 * a1 / (a1 * a1 + p_lab * p_lab), a2);
824 return 0.0788265 / ((sqrts - 1.38841) * (sqrts - 1.38841));
828 return 0.0196741 / ((sqrts - 1.42318) * (sqrts - 1.42318));
832 return 0.0403364 / ((sqrts - 1.39830305) * (sqrts - 1.39830305));
836 return 0.05932562 / ((sqrts - 1.38786692) * (sqrts - 1.38786692));
851 assert(p_lambda != 0);
852 assert(sqrts_sqrts0 >= 0);
853 return 37.15 / 2 * p_N / p_lambda * std::pow(sqrts_sqrts0, -0.16);
861 assert(sqrts_sqrts0 >= 0);
862 return 24.3781 * std::pow(sqrts_sqrts0, -0.479);
870 assert(sqrts_sqrts0 >= 0);
871 if (sqrts_sqrts0 < 0.03336) {
872 return 6.475 * std::pow(sqrts_sqrts0, -0.4167);
874 return 14.5054 * std::pow(sqrts_sqrts0, -0.1795);
883 assert(sqrts_sqrts0 >= 0);
884 if (sqrts_sqrts0 < 0.09047) {
885 return 5.625 * std::pow(sqrts_sqrts0, -0.318);
887 return 4.174 * std::pow(sqrts_sqrts0, -0.4421);
904 return 14.194 * std::pow(sqrts_sqrts0, -0.442);
916 auto [dedup_x, dedup_y] =
919 std::make_unique<InterpolateDataLinear<double>>(
928 auto [dedup_x, dedup_y] =
931 std::make_unique<InterpolateDataLinear<double>>(
942 auto [dedup_x, dedup_y] =
945 std::make_unique<InterpolateDataLinear<double>>(
957 auto [dedup_x, dedup_y] =
960 std::make_unique<InterpolateDataLinear<double>>(
969 auto [dedup_x, dedup_y] =
972 std::make_unique<InterpolateDataLinear<double>>(
983 auto [dedup_x, dedup_y] =
986 std::make_unique<InterpolateDataLinear<double>>(
998 auto [dedup_x, dedup_y] =
1001 std::make_unique<InterpolateDataLinear<double>>(
1010 auto [dedup_x, dedup_y] =
1013 std::make_unique<InterpolateDataLinear<double>>(
1021 return std::nullopt;
1024 auto [dedup_x, dedup_y] =
1027 std::make_unique<InterpolateDataLinear<double>>(
1036 auto [dedup_x, dedup_y] =
1039 std::make_unique<InterpolateDataLinear<double>>(
1047 return std::nullopt;
1050 auto [dedup_x, dedup_y] =
1053 std::make_unique<InterpolateDataLinear<double>>(
1062 return std::nullopt;
1065 auto [dedup_x, dedup_y] =
1068 std::make_unique<InterpolateDataLinear<double>>(
1077 return std::nullopt;
1080 auto [dedup_x, dedup_y] =
1083 std::make_unique<InterpolateDataLinear<double>>(
1092 return std::nullopt;
1095 auto [dedup_x, dedup_y] =
1098 std::make_unique<InterpolateDataLinear<double>>(
1107 auto [dedup_x, dedup_y] =
1110 std::make_unique<InterpolateDataLinear<double>>(
1118 auto [dedup_x, dedup_y] =
1121 std::make_unique<InterpolateDataLinear<double>>(
1129 return std::nullopt;
1132 auto [dedup_x, dedup_y] =
1135 std::make_unique<InterpolateDataLinear<double>>(
1144 return std::nullopt;
1147 auto [dedup_x, dedup_y] =
1150 std::make_unique<InterpolateDataLinear<double>>(
1159 return std::nullopt;
1162 auto [dedup_x, dedup_y] =
1165 std::make_unique<InterpolateDataLinear<double>>(
1174 return std::nullopt;
1177 auto [dedup_x, dedup_y] =
1180 std::make_unique<InterpolateDataLinear<double>>(
1189 auto [dedup_x, dedup_y] =
1192 std::make_unique<InterpolateDataLinear<double>>(
1200 auto [dedup_x, dedup_y] =
1203 std::make_unique<InterpolateDataLinear<double>>(
1211 return std::nullopt;
1214 auto [dedup_x, dedup_y] =
1217 std::make_unique<InterpolateDataLinear<double>>(
1226 return std::nullopt;
1229 auto [dedup_x, dedup_y] =
1232 std::make_unique<InterpolateDataLinear<double>>(
1241 return std::nullopt;
1244 auto [dedup_x, dedup_y] =
1247 std::make_unique<InterpolateDataLinear<double>>(
1256 return std::nullopt;
1259 auto [dedup_x, dedup_y] =
1262 std::make_unique<InterpolateDataLinear<double>>(
1271 auto [dedup_x, dedup_y] =
1274 std::make_unique<InterpolateDataLinear<double>>(
1282 return std::nullopt;
1285 auto [dedup_x, dedup_y] =
1288 std::make_unique<InterpolateDataLinear<double>>(
1297 auto [dedup_x, dedup_y] =
1300 std::make_unique<InterpolateDataLinear<double>>(
1308 auto [dedup_x, dedup_y] =
1311 std::make_unique<InterpolateDataLinear<double>>(
1319 return std::nullopt;
1322 auto [dedup_x, dedup_y] =
1325 std::make_unique<InterpolateDataLinear<double>>(
1334 return std::nullopt;
1337 auto [dedup_x, dedup_y] =
1340 std::make_unique<InterpolateDataLinear<double>>(
1349 auto [dedup_x, dedup_y] =
1352 std::make_unique<InterpolateDataLinear<double>>(
1360 return std::nullopt;
1363 auto [dedup_x, dedup_y] =
1366 std::make_unique<InterpolateDataLinear<double>>(
1375 return std::nullopt;
1378 auto [dedup_x, dedup_y] =
1381 std::make_unique<InterpolateDataLinear<double>>(
1390 return std::nullopt;
1393 auto [dedup_x, dedup_y] =
1396 std::make_unique<InterpolateDataLinear<double>>(
1405 return std::nullopt;
1408 auto [dedup_x, dedup_y] =
1411 std::make_unique<InterpolateDataLinear<double>>(
1420 return std::nullopt;
1423 auto [dedup_x, dedup_y] =
1426 std::make_unique<InterpolateDataLinear<double>>(
1435 auto [dedup_x, dedup_y] =
1438 std::make_unique<InterpolateDataLinear<double>>(
1446 auto [dedup_x, dedup_y] =
1449 std::make_unique<InterpolateDataLinear<double>>(
1457 return std::nullopt;
1460 auto [dedup_x, dedup_y] =
1463 std::make_unique<InterpolateDataLinear<double>>(
1472 return std::nullopt;
1475 auto [dedup_x, dedup_y] =
1478 std::make_unique<InterpolateDataLinear<double>>(
1487 return std::nullopt;
1490 auto [dedup_x, dedup_y] =
1493 std::make_unique<InterpolateDataLinear<double>>(
1502 return std::nullopt;
1505 auto [dedup_x, dedup_y] =
1508 std::make_unique<InterpolateDataLinear<double>>(
1517 auto [dedup_x, dedup_y] = dedup_avg<double>(
1520 std::make_unique<InterpolateDataLinear<double>>(
1528 auto [dedup_x, dedup_y] = dedup_avg<double>(
1531 std::make_unique<InterpolateDataLinear<double>>(
1539 return std::nullopt;
1542 auto [dedup_x, dedup_y] =
1545 std::make_unique<InterpolateDataLinear<double>>(
1554 return std::nullopt;
1557 auto [dedup_x, dedup_y] =
1560 std::make_unique<InterpolateDataLinear<double>>(
1568 if (sqrts > *(
DN_SQRTS.end() - 1)) {
1569 return std::nullopt;
1574 std::make_unique<InterpolateDataLinear<double>>(
1585 std::make_unique<InterpolateDataLinear<double>>(
1592 if (sqrts > *(
DN_SQRTS.end() - 1)) {
1593 return std::nullopt;
1598 std::make_unique<InterpolateDataLinear<double>>(
1606 if (sqrts > *(
DN_SQRTS.end() - 1)) {
1607 return std::nullopt;
1612 std::make_unique<InterpolateDataLinear<double>>(
1623 std::make_unique<InterpolateDataLinear<double>>(
1630 if (sqrts > *(
DN_SQRTS.end() - 1)) {
1631 return std::nullopt;
1636 std::make_unique<InterpolateDataLinear<double>>(
1645 return std::nullopt;
1648 auto [dedup_x, dedup_y] =
1651 std::make_unique<InterpolateDataLinear<double>>(
1660 return std::nullopt;
1663 auto [dedup_x, dedup_y] =
1666 std::make_unique<InterpolateDataLinear<double>>(
1675 auto [dedup_x, dedup_y] =
1678 std::make_unique<InterpolateDataLinear<double>>(
1686 auto [dedup_x, dedup_y] =
1689 std::make_unique<InterpolateDataLinear<double>>(
1697 return std::nullopt;
1700 auto [dedup_x, dedup_y] =
1703 std::make_unique<InterpolateDataLinear<double>>(
1712 return std::nullopt;
1715 auto [dedup_x, dedup_y] =
1718 std::make_unique<InterpolateDataLinear<double>>(
1727 return std::nullopt;
1730 auto [dedup_x, dedup_y] =
1733 std::make_unique<InterpolateDataLinear<double>>(
1742 auto [dedup_x, dedup_y] =
1745 std::make_unique<InterpolateDataLinear<double>>(
1753 return std::nullopt;
1756 auto [dedup_x, dedup_y] =
1759 std::make_unique<InterpolateDataLinear<double>>(
1768 return std::nullopt;
1771 auto [dedup_x, dedup_y] =
1774 std::make_unique<InterpolateDataLinear<double>>(
1783 auto [dedup_x, dedup_y] =
1786 std::make_unique<InterpolateDataLinear<double>>(
1794 return std::nullopt;
1797 auto [dedup_x, dedup_y] =
1800 std::make_unique<InterpolateDataLinear<double>>(
1809 auto [dedup_x, dedup_y] =
1812 std::make_unique<InterpolateDataLinear<double>>(
1820 auto [dedup_x, dedup_y] =
1823 std::make_unique<InterpolateDataLinear<double>>(
1831 return std::nullopt;
1834 auto [dedup_x, dedup_y] =
1837 std::make_unique<InterpolateDataLinear<double>>(
1846 auto [dedup_x, dedup_y] =
1849 std::make_unique<InterpolateDataLinear<double>>(
1857 return std::nullopt;
1860 auto [dedup_x, dedup_y] =
1863 std::make_unique<InterpolateDataLinear<double>>(
1872 return std::nullopt;
1875 auto [dedup_x, dedup_y] =
1878 std::make_unique<InterpolateDataLinear<double>>(
1887 auto [dedup_x, dedup_y] =
1890 std::make_unique<InterpolateDataLinear<double>>(
1898 return std::nullopt;
1901 auto [dedup_x, dedup_y] =
1904 std::make_unique<InterpolateDataLinear<double>>(
1913 return std::nullopt;
1916 auto [dedup_x, dedup_y] =
1919 std::make_unique<InterpolateDataLinear<double>>(
1928 auto [dedup_x, dedup_y] = dedup_avg<double>(
1931 std::make_unique<InterpolateDataLinear<double>>(
1939 return std::nullopt;
1942 auto [dedup_x, dedup_y] =
1945 std::make_unique<InterpolateDataLinear<double>>(
1954 auto [dedup_x, dedup_y] = dedup_avg<double>(
1957 std::make_unique<InterpolateDataLinear<double>>(
1965 return std::nullopt;
1968 auto [dedup_x, dedup_y] =
1971 std::make_unique<InterpolateDataLinear<double>>(
1980 return std::nullopt;
1983 auto [dedup_x, dedup_y] =
1986 std::make_unique<InterpolateDataLinear<double>>(
1995 auto [dedup_x, dedup_y] = dedup_avg<double>(
1998 std::make_unique<InterpolateDataLinear<double>>(
2006 auto [dedup_x, dedup_y] = dedup_avg<double>(
2009 std::make_unique<InterpolateDataLinear<double>>(
2017 return std::nullopt;
2020 auto [dedup_x, dedup_y] =
2023 std::make_unique<InterpolateDataLinear<double>>(
2032 return std::nullopt;
2035 auto [dedup_x, dedup_y] =
2038 std::make_unique<InterpolateDataLinear<double>>(
2047 auto [dedup_x, dedup_y] = dedup_avg<double>(
2050 std::make_unique<InterpolateDataLinear<double>>(
2058 return std::nullopt;
2061 auto [dedup_x, dedup_y] =
2064 std::make_unique<InterpolateDataLinear<double>>(
2073 auto [dedup_x, dedup_y] = dedup_avg<double>(
2076 std::make_unique<InterpolateDataLinear<double>>(
2084 return std::nullopt;
2087 auto [dedup_x, dedup_y] =
2090 std::make_unique<InterpolateDataLinear<double>>(
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.
PdgCode stores a Particle Data Group Particle Numbering Scheme particle type number.
std::int32_t code() const
Collection of useful constants that are known at compile time.
@ Constant
Extrapolate using a constant value.
@ Zero
Extrapolate with zero.
constexpr int Delta_pp
Δ⁺⁺.
const std::initializer_list< double > DZEROPIZERO_DPLUSPIMINUS_SIG
D⁰π⁰ -> D⁺π⁻ cross section Abreu:2011ic .
const std::initializer_list< double > DZEROKZERO_ELASTIC_SIG
Elastic D⁰K⁰ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltazero_DminusDeltaplus_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAZERO_DMINUSDELTAPLUS data.
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.
std::optional< double > Dzeron_elastic(double sqrts)
D⁰n elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltaminus_elastic_interpolation
An interpolation that gets lazily filled using the DZERODELTAMINUS_ELASTIC data.
std::optional< double > Dplusn_elastic(double sqrts)
D⁺n elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltaminus_elastic_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAMINUS_ELASTIC data.
bool parametrization_exists(const PdgCode &pdg_a, const PdgCode &pdg_b)
Checks if supplied codes have existing parametrizations of total cross sections.
const std::initializer_list< double > DPLUSKMINUS_DZEROKBARZERO_SIG
D⁺K⁻ -> D⁰K̄⁰ cross section Tolos:2013kva .
double kplusp_total(double mandelstam_s)
K+ p total cross section parametrization.
std::optional< double > DplusKzero_elastic(double sqrts)
D⁺K⁰ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static double piplusp_elastic_pdg(double mandelstam_s)
double deuteron_pion_inelastic(double pion_kinetic_energy)
Parametrization of deuteron-pion inelastic cross section.
double DzeroDeltazero_DplusDeltaminus(double sqrts)
D⁰Δ⁰ -> D⁺Δ⁻ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DstarzeroKzero_elastic(double sqrts)
D*(2007)⁰K⁰ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
const std::initializer_list< double > DZEROP_DPLUSN_SIG
D⁰p -> D⁺n cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltazero_elastic_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAZERO_ELASTIC data.
const std::initializer_list< double > KMINUSN_TOT_PLAB
PDG data on K- n total cross section: momentum in lab frame.
const std::initializer_list< double > DPLUSKPLUS_ELASTIC_SIG
Elastic D⁺K⁺ cross section Tolos:2013kva .
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.
const std::initializer_list< double > DZEROKBARZERO_DPLUSKMINUS_SIG
D⁰K̄⁰ -> D⁺K⁻ cross section Tolos:2013kva .
double Dpluspiminus_Dzeropizero(double sqrts)
D⁺π⁻ -> D⁰π⁰ cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
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⁺
double Dstarzeropiplus_Dstarpluspizero(double sqrts)
D*(2007)⁰π⁺ -> D*(2010)⁺π⁰ cross section (closest reference Song:2015sfa , data provided by Juan Torr...
const std::initializer_list< double > PIMINUSP_ELASTIC_P_LAB
PDG data on pi- p elastic cross section: momentum in lab frame.
double DplusDeltaplus_DzeroDeltaplusplus(double sqrts)
D⁺Δ⁺ -> D⁰Δ⁺⁺ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
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).
static std::unique_ptr< InterpolateDataLinear< double > > DstarplusKzero_DstarzeroKplus_interpolation
An interpolation that gets lazily filled using the DSTARPLUSKZERO_DSTARZEROKPLUS data.
double Dminusp_Dbarzeron(double sqrts)
D⁻p -> D̄⁰n cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > DSTARKAON_SQRTS
Center-of-mass energy.
const std::initializer_list< double > DBARN_SQRTS
Center-of-mass energy.
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltaplusplus_DbarzeroDeltaplus_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAPLUSPLUS_DBARZERODELTAPLUS data.
const std::initializer_list< double > PIPLUSPIMINUS_TOT_SQRTS
Center-of-mass energy.
const std::initializer_list< double > DPLUSPIMINUS_DZEROPIZERO_SIG
D⁺π⁻ -> D⁰π⁰ cross section Abreu:2011ic .
static std::unique_ptr< InterpolateDataLinear< double > > DplusKzero_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSKZERO_ELASTIC data.
const std::initializer_list< double > DSTARPLUSKBARZERO_ELASTIC_SIG
Elastic D*(2010)⁺K̄⁰ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > Dminusp_elastic_interpolation
An interpolation that gets lazily filled using the DMINUSP_ELASTIC data.
double pipluspiminus_total(double sqrts)
pi+ pi- total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
const std::initializer_list< double > DSTARPLUSKMINUS_DSTARZEROKBARZERO_SIG
D*(2010)⁺K⁻ -> D*(2007)⁰K̄⁰ cross section.
const std::initializer_list< double > DSTARZEROETA_ELASTIC_SIG
Elastic D*(2007)⁰η cross section. Data provided by Juan Torres-Rincon.
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
static std::unique_ptr< InterpolateDataLinear< double > > Dstarzeropiplus_Dstarpluspizero_interpolation
An interpolation that gets lazily filled using the DSTARZEROPIPLUS_DSTARPLUSPIZERO data.
double np_total(double mandelstam_s)
np total cross section parametrization Sources: low-p: Cugnon:1996kh highest-p: Buss:2011mx
double Dstarzeropizero_Dstarpluspiminus(double sqrts)
D*(2007)⁰π⁰ -> D*(2010)⁺π⁻ cross section (closest reference Song:2015sfa , data provided by Juan Torr...
double DstarplusKzero_DstarzeroKplus(double sqrts)
D*(2010)⁺K⁰ -> D*(2007)⁰K⁺ cross section (closest reference Song:2015sfa , data provided by Juan Torr...
static std::unique_ptr< InterpolateDataLinear< double > > Dstarzeropizero_Dstarpluspiminus_interpolation
An interpolation that gets lazily filled using the DSTARZEROPIZERO_DSTARPLUSPIMINUS data.
static std::unique_ptr< InterpolateDataLinear< double > > piplusp_sigmapluskplus_interpolation
An interpolation that gets lazily filled using the PIPLUSP_SIGMAPLUSKPLUS_SIG data.
const std::initializer_list< double > DPLUSETA_ELASTIC_SIG
Elastic D⁺η cross section Tolos:2013kva .
const std::initializer_list< double > DSTARZEROKPLUS_ELASTIC_SIG
Elastic D*(2007)⁰K⁺ cross section.
static std::unique_ptr< InterpolateDataSpline > piplusp_elastic_res_interpolation
A null interpolation that gets filled using the PIPLUSP_RES data.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltazero_DzeroDeltaplus_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAZERO_DZERODELTAPLUS data.
const std::initializer_list< double > DSTARZEROPIPLUS_DSTARPLUSPIZERO_SIG
D*(2007)⁰π⁺ -> D*(2010)⁺π⁰ cross section.
double DstarplusKminus_DstarzeroKbarzero(double sqrts)
D*(2010)⁺K⁻ -> D*(2007)⁰K̄⁰ cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
double piminusp_elastic(double mandelstam_s)
pi-p elastic cross section parametrization Source: GiBUU:parametrizationBarMes_HighEnergy....
std::optional< double > Dbarzeron_elastic(double sqrts)
D̄⁰n elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > DPLUSKMINUS_ELASTIC_SIG
Elastic D⁺K⁻ cross section Tolos:2013kva .
std::optional< double > DzeroDeltaplus_elastic(double sqrts)
D⁰Δ⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > DPLUSDELTAPLUS_ELASTIC_SIG
Elastic D⁺Δ⁺ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > Dpluspiminus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSPIMINUS_ELASTIC data.
const std::initializer_list< double > DSTARPLUSKZERO_DSTARZEROKPLUS_SIG
D*(2010)⁺K⁰ -> D*(2007)⁰K⁺ cross section.
double Dpluspizero_Dzeropiplus(double sqrts)
D⁺π⁰ -> D⁰π⁺ cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
double npbar_high_energy(double mandelstam_s)
npbar total cross section at high energies
double Dstarpluspiminus_Dstarzeropizero(double sqrts)
D*(2010)⁺π⁻ -> D*(2007)⁰π⁰ cross section (closest reference Song:2015sfa , data provided by Juan Torr...
static std::unique_ptr< InterpolateDataLinear< double > > Dstarpluspiminus_Dstarzeropizero_interpolation
An interpolation that gets lazily filled using the DSTARPLUSPIMINUS_DSTARZEROPIZERO data.
const std::initializer_list< double > DMINUSDELTAZERO_ELASTIC_SIG
Elastic D⁻Δ⁰ cross section Tolos:2013kva .
const std::initializer_list< double > KPLUSP_TOT_SIG
PDG data on K+ p total cross section: cross section.
static std::unique_ptr< InterpolateDataLinear< double > > DplusKbarzero_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSKBARZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltaplus_elastic_interpolation
An interpolation that gets lazily filled using the DZERODELTAPLUS_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > Dzeropizero_elastic_interpolation
An interpolation that gets lazily filled using the DZEROPIZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > Dstarzeropizero_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROPIZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DplusKzero_DzeroKplus_interpolation
An interpolation that gets lazily filled using the DPLUSKZERO_DZEROKPLUS data.
const std::initializer_list< double > KMINUSP_TOT_PLAB
PDG smoothed data on K- p total cross section: momentum in lab frame.
static std::unique_ptr< InterpolateDataLinear< double > > Dminusn_elastic_interpolation
An interpolation that gets lazily filled using the DMINUSN_ELASTIC data.
const std::initializer_list< double > DBARZERODELTAPLUSPLUS_ELASTIC_SIG
Elastic D̄⁰Δ⁺⁺ cross section Tolos:2013kva .
double kminusn_piminussigma0(double sqrts)
K- n <-> pi- Sigma0 cross section parametrization Follow from the parametrization with the same stran...
double DzeroKbarzero_DplusKminus(double sqrts)
D⁰K̄⁰ -> D⁺K⁻ cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
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.
std::optional< double > DplusKplus_elastic(double sqrts)
D⁺K⁺ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
double DstarzeroKbarzero_DstarplusKminus(double sqrts)
D*(2007)⁰K̄⁰ -> D*(2010)⁺K⁻ cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
std::optional< double > DplusDeltazero_elastic(double sqrts)
D⁺Δ⁰ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
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
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltaminus_elastic_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAMINUS_ELASTIC data.
const std::initializer_list< double > DMINUSDELTAZERO_DBARZERODELTAMINUS_SIG
D⁻Δ⁰ -> D̄⁰Δ⁻ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > Dpluspizero_Dzeropiplus_interpolation
An interpolation that gets lazily filled using the DPLUSPIZERO_DZEROPIPLUS data.
double sigma0sigma0_ximinusp(double sqrts_sqrts0)
Sigma0 Sigma0 <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
static std::unique_ptr< InterpolateDataLinear< double > > Dstarpluspizero_Dstarzeropiplus_interpolation
An interpolation that gets lazily filled using the DSTARPLUSPIZERO_DSTARZEROPIPLUS data.
const std::initializer_list< double > DN_SQRTS
Center-of-mass energy.
const std::initializer_list< double > DPLUSPIMINUS_ELASTIC_SIG
Elastic D⁺π⁻ cross section Abreu:2011ic .
static std::unique_ptr< InterpolateDataLinear< double > > DstarzeroKbarzero_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROKBARZERO_ELASTIC data.
const std::initializer_list< double > DSTARZEROPIMINUS_ELASTIC_SIG
Elastic D*(2007)⁰π⁻ cross section.
double ppbar_elastic(double mandelstam_s)
ppbar elastic cross section parametrization Source: Bass:1998ca
std::optional< double > Dbarzerop_elastic(double sqrts)
D̄⁰p elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > Dstarpluspiplus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSPIPLUS_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltaplus_DplusDeltazero_interpolation
An interpolation that gets lazily filled using the DZERODELTAPLUS_DPLUSDELTAZERO data.
std::optional< double > DzeroKplus_elastic(double sqrts)
D⁰K⁺ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
std::optional< double > Dstarzeropiminus_elastic(double sqrts)
D*(2007)⁰π- elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
const std::initializer_list< double > DETA_SQRTS
Center-of-mass energy.
std::optional< double > Dstarzeroeta_elastic(double sqrts)
D*(2007)⁰η elastic cross section (data provided by Juan Torres-Rincon).
const std::initializer_list< double > PIPLUSP_RES_SIG
Elastic π⁺N⁺ cross section contributions from decays.
std::optional< double > Dstarpluspizero_elastic(double sqrts)
D*(2010)⁺π⁰ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
static std::unique_ptr< InterpolateDataLinear< double > > Dstarpluseta_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSETA_ELASTIC data.
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.
const std::initializer_list< double > DSTARPI_SQRTS
Center-of-mass energy.
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
const std::initializer_list< double > DMINUSP_ELASTIC_SIG
Elastic D⁻p cross section Tolos:2013kva .
std::optional< double > Dminusn_elastic(double sqrts)
D⁻n elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltaminus_DzeroDeltazero_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAMINUS_DZERODELTAZERO data.
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.
static std::unique_ptr< InterpolateDataLinear< double > > DstarzeroKbarzero_DstarplusKminus_interpolation
An interpolation that gets lazily filled using the DSTARZEROKBARZERO_DSTARPLUSKMINUS data.
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...
const std::initializer_list< double > DDELTA_SQRTS
Center-of-mass energy.
double DstarzeroKplus_DstarplusKzero(double sqrts)
D*(2007)⁰K⁺ -> D*(2010)⁺K⁰ cross section (closest reference Song:2015sfa , data provided by Juan Torr...
const std::initializer_list< double > DBARZERODELTAMINUS_DMINUSDELTAZERO_SIG
D̄⁰Δ⁻ -> D⁻Δ⁰ cross section Tolos:2013kva .
double Npi_string_hard(double mandelstam_s)
nucleon-pion hard scattering cross section (with partonic scattering)
const std::initializer_list< double > DMINUSP_DBARZERON_SIG
D⁻p -> D̄⁰n cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > kminusp_total_interpolation
An interpolation that gets lazily filled using the KMINUSP_TOT data.
const std::initializer_list< double > DMINUSDELTAPLUSPLUS_ELASTIC_SIG
Elastic D⁻Δ⁺⁺ cross section Tolos:2013kva .
double Dstarpluspizero_Dstarzeropiplus(double sqrts)
D*(2010)⁺π⁰ -> D*(2007)⁰π⁺ cross section (closest reference Song:2015sfa , data provided by Juan Torr...
std::optional< double > DzeroDeltaminus_elastic(double sqrts)
D⁰Δ⁻ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
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 ...
std::optional< double > Dpluspiplus_elastic(double sqrts)
D⁺π⁺ elastic cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
std::optional< double > DplusKbarzero_elastic(double sqrts)
D⁺K̄⁰ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > DzeroKbarzero_elastic_interpolation
An interpolation that gets lazily filled using the DZEROKBARZERO_ELASTIC data.
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 > > Dbarzeron_Dminusp_interpolation
An interpolation that gets lazily filled using the DBARZERON_DMINUSP data.
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 > DZEROPIPLUS_DPLUSPIZERO_SIG
D⁰π⁺ -> D⁺π⁰ cross section Abreu:2011ic .
static std::unique_ptr< InterpolateDataLinear< double > > Dzeropiplus_elastic_interpolation
An interpolation that gets lazily filled using the DZEROPIPLUS_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltazero_DplusDeltaminus_interpolation
An interpolation that gets lazily filled using the DZERODELTAZERO_DPLUSDELTAMINUS data.
const std::initializer_list< double > DMINUSDELTAPLUSPLUS_DBARZERODELTAPLUS_SIG
D⁻Δ⁺⁺ -> D̄⁰Δ⁺ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DplusKplus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSKPLUS_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > Dzeropiminus_elastic_interpolation
An interpolation that gets lazily filled using the DZEROPIMINUS_ELASTIC data.
const std::initializer_list< double > DZERODELTAPLUSPLUS_DPLUSDELTAPLUS_SIG
D⁰Δ⁺⁺ -> D⁺Δ⁺ cross section Tolos:2013kva .
const std::initializer_list< double > PIMINUSP_TOT_SQRTS
Center-of-mass energy.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltaplusplus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAPLUSPLUS_ELASTIC data.
std::optional< double > Dplusp_elastic(double sqrts)
D⁺p elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double ppbar_high_energy(double mandelstam_s)
ppbar total cross section at high energies
std::optional< double > DstarzeroKplus_elastic(double sqrts)
D*(2007)⁰K⁺ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
static std::unique_ptr< InterpolateDataLinear< double > > Dplusp_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSP_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_elastic_interpolation
An interpolation that gets lazily filled using the PIMINUSP_ELASTIC data.
const std::initializer_list< double > DPLUSPIZERO_DZEROPIPLUS_SIG
D⁺π⁰ -> D⁰π⁺ cross section Abreu:2011ic .
double pp_high_energy(double mandelstam_s)
pp total cross section at high energies
static std::unique_ptr< InterpolateDataLinear< double > > Dzerop_elastic_interpolation
An interpolation that gets lazily filled using the DZEROP_ELASTIC data.
const std::initializer_list< double > DZEROP_ELASTIC_SIG
Elastic D⁰p cross section Tolos:2013kva .
std::optional< double > Dminusp_elastic(double sqrts)
D⁻p elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double Dbarzeron_Dminusp(double sqrts)
D̄⁰n -> D⁻p cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
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.
static std::unique_ptr< InterpolateDataLinear< double > > Dpluspizero_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSPIZERO_ELASTIC data.
std::optional< double > DzeroKzero_elastic(double sqrts)
D⁰K⁰ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
double pipi_string_hard(double mandelstam_s)
pion-pion hard scattering cross section (with partonic scattering)
std::optional< double > Dstarpluspiplus_elastic(double sqrts)
D*(2010)⁺π⁺ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltaminus_DminusDeltazero_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAMINUS_DMINUSDELTAZERO data.
double piplusp_high_energy(double mandelstam_s)
pi+p total cross section at high energies
std::optional< double > Dpluseta_elastic(double sqrts)
D⁺η elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > Dzeroeta_elastic_interpolation
An interpolation that gets lazily filled using the DZEROETA_ELASTIC data.
const std::initializer_list< double > DZEROPIPLUS_ELASTIC_SIG
Elastic D⁰π⁺ cross section Abreu:2011ic .
const std::initializer_list< double > DBARZEROP_ELASTIC_SIG
Elastic D̄⁰p cross section Tolos:2013kva .
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 ).
const std::initializer_list< double > DPLUSKZERO_ELASTIC_SIG
Elastic D⁺K⁰ cross section Tolos:2013kva .
const std::initializer_list< double > DMINUSDELTAPLUS_ELASTIC_SIG
Elastic D⁻Δ⁺ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > kplusn_total_interpolation
An interpolation that gets lazily filled using the KPLUSN_TOT data.
const std::initializer_list< double > DSTARPLUSKZERO_ELASTIC_SIG
Elastic D*(2010)⁺K⁰ cross section.
const std::initializer_list< double > DBARZERON_DMINUSP_SIG
D̄⁰n -> D⁻p cross section Tolos:2013kva .
const std::initializer_list< double > DPLUSN_ELASTIC_SIG
Elastic D⁺n cross section Tolos:2013kva .
std::optional< double > Dpluspiminus_elastic(double sqrts)
D⁺π⁻ elastic cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
const std::initializer_list< double > DBARZERON_ELASTIC_SIG
Elastic D̄⁰n cross section Tolos:2013kva .
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 DplusKminus_DzeroKbarzero(double sqrts)
D⁺K⁻ -> D⁰K̄⁰ cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltaplus_elastic_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAPLUS_ELASTIC data.
const std::initializer_list< double > DBARZERODELTAZERO_ELASTIC_SIG
Elastic D̄⁰Δ⁰ cross section Tolos:2013kva .
double DbarzeroDeltaminus_DminusDeltazero(double sqrts)
D̄⁰Δ⁻ -> D⁻Δ⁰ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltazero_elastic_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > kplusp_total_interpolation
An interpolation that gets lazily filled using the KPLUSP_TOT data.
static std::unique_ptr< InterpolateDataLinear< double > > Dstarzeropiplus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROPIPLUS_ELASTIC data.
double DminusDeltaplusplus_DbarzeroDeltaplus(double sqrts)
D⁻Δ⁺⁺ -> D̄⁰Δ⁺ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > PIPLUSPIMINUS_TOT_SIG
Total π⁺ π⁻ cross section parametrized from bottom-up SMASH-3.0, using the hadronic list from PDG2018...
std::optional< double > DminusDeltazero_elastic(double sqrts)
D⁻Δ⁰ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double piplusp_sigmapluskplus_pdg(double mandelstam_s)
pi+ p to Sigma+ K+ cross section parametrization, PDG data.
const std::initializer_list< double > DSTARPLUSPIZERO_ELASTIC_SIG
Elastic D*(2010)⁺π⁰ cross section.
const std::initializer_list< double > DPLUSPIZERO_ELASTIC_SIG
Elastic D⁺π⁰ cross section Abreu:2011ic .
double DplusKzero_DzeroKplus(double sqrts)
D⁺K⁰ -> D⁰K⁺ cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
const std::initializer_list< double > DSTARZEROKMINUS_ELASTIC_SIG
Elastic D*(2007)⁰K⁻ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > kminusp_elastic_interpolation
An interpolation that gets lazily filled using the KMINUSP_ELASTIC data.
std::optional< double > DzeroDeltaplusplus_elastic(double sqrts)
D⁰Δ⁺⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DminusDeltaplus_elastic(double sqrts)
D⁻Δ⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double Dplusn_Dzerop(double sqrts)
D⁺n -> D⁰p cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DstarzeroKminus_elastic(double sqrts)
D*(2007)⁰K⁻ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
const std::initializer_list< double > DSTARZEROPIPLUS_ELASTIC_SIG
Elastic D*(2007)⁰π⁺ cross section.
const std::initializer_list< double > DZEROKPLUS_ELASTIC_SIG
Elastic D⁰K⁺ cross section Tolos:2013kva .
const std::initializer_list< double > DBARDELTA_SQRTS
Center-of-mass energy.
std::optional< double > Dzeropizero_elastic(double sqrts)
D⁰π⁰ elastic cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
const std::initializer_list< double > DPLUSP_ELASTIC_SIG
Elastic D⁺p cross section Tolos:2013kva .
const std::initializer_list< double > PIMINUSP_SIGMAMINUSKPLUS_P_LAB
PDG data on pi- p to Sigma- K+ cross section: momentum in lab frame.
const std::initializer_list< double > KMINUSN_TOT_SIG
PDG data on K- n total cross section: cross section.
double piminusp_total(double sqrts)
pi- p total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
double DzeroDeltaplus_DplusDeltazero(double sqrts)
D⁰Δ⁺ -> D⁺Δ⁰ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double deuteron_nucleon_elastic(double mandelstam_s)
Deuteron nucleon elastic cross-section [mb] parametrized by Oh:2009gx .
const std::initializer_list< double > DPLUSKBARZERO_ELASTIC_SIG
Elastic D⁺K̄⁰ cross section Tolos:2013kva .
constexpr double nucleon_mass
Nucleon mass in GeV.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltaplus_DzeroDeltaplusplus_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAPLUS_DZERODELTAPLUSPLUS data.
const std::initializer_list< double > DZEROPIZERO_ELASTIC_SIG
Elastic D⁰π⁰ cross section Abreu:2011ic .
static std::unique_ptr< InterpolateDataLinear< double > > Dbarzeron_elastic_interpolation
An interpolation that gets lazily filled using the DBARZERON_ELASTIC data.
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
std::optional< double > DplusDeltaminus_elastic(double sqrts)
D⁺Δ⁻ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DzeroKminus_elastic(double sqrts)
D⁰K⁻ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > DstarzeroKplus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROKPLUS_ELASTIC data.
double piminusp_sigmaminuskplus_pdg(double mandelstam_s)
pi- p -> Sigma- K+ cross section parametrization, PDG data.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroKzero_elastic_interpolation
An interpolation that gets lazily filled using the DZEROKZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DplusKminus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSKMINUS_ELASTIC data.
double piminusp_lambdak0_pdg(double mandelstam_s)
pi- p -> Lambda K0 cross section parametrization, PDG data.
std::optional< double > Dzeropiminus_elastic(double sqrts)
D⁰π⁻ elastic cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > DstarplusKminus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSKMINUS_ELASTIC data.
const std::initializer_list< double > DSTARPLUSPIPLUS_ELASTIC_SIG
Elastic D*(2010)⁺π⁺ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > Dzerop_Dplusn_interpolation
An interpolation that gets lazily filled using the DZEROP_DPLUSN data.
std::optional< double > Dstarzeropiplus_elastic(double sqrts)
D*(2007)⁰π⁺ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
static std::unique_ptr< InterpolateDataLinear< double > > Dzeron_elastic_interpolation
An interpolation that gets lazily filled using the DZERON_ELASTIC data.
const std::initializer_list< double > DZEROKPLUS_DPLUSKZERO_SIG
D⁰K⁺ -> D⁺K⁰ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DstarzeroKminus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROKMINUS_ELASTIC data.
std::optional< double > DplusDeltaplusplus_elastic(double sqrts)
D⁺Δ⁺⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DminusDeltaplusplus_elastic(double sqrts)
D⁻Δ⁺⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltazero_elastic_interpolation
An interpolation that gets lazily filled using the DZERODELTAZERO_ELASTIC data.
const std::initializer_list< double > DMINUSN_ELASTIC_SIG
Elastic D⁻n cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > Dstarzeroeta_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROETA_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltazero_DbarzeroDeltaminus_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAZERO_DBARZERODELTAMINUS data.
const std::initializer_list< double > DPLUSDELTAPLUSPLUS_ELASTIC_SIG
Elastic D⁺Δ⁺⁺ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > Dstarpluspizero_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSPIZERO_ELASTIC data.
const std::initializer_list< double > PIPLUSP_ELASTIC_P_LAB
PDG data on pi+ p elastic cross section: momentum in lab frame.
double DplusDeltaminus_DzeroDeltazero(double sqrts)
D⁺Δ⁻ -> D⁰Δ⁰ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DbarzeroDeltaplusplus_elastic(double sqrts)
D̄⁰Δ⁺⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
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 deuteron_antinucleon_inelastic(double aN_kinetic_energy)
Parametrization of deuteron-antinucleon inelastic cross section.
const std::initializer_list< double > DZERODELTAZERO_ELASTIC_SIG
Elastic D⁰Δ⁰ cross section Tolos:2013kva .
const std::initializer_list< double > DSTARZEROKBARZERO_ELASTIC_SIG
Elastic D*(2007)⁰K̄⁰ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltaminus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAMINUS_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > Dpluseta_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSETA_ELASTIC data.
double k0p_elastic_background(double mandelstam_s)
K0 p elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
std::optional< double > Dpluspizero_elastic(double sqrts)
D⁺π⁰ elastic cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
constexpr uint64_t pack(int32_t x, int32_t y)
Pack two int32_t into an uint64_t.
const std::initializer_list< double > DPLUSPIPLUS_ELASTIC_SIG
Elastic D⁺π⁺ cross section Abreu:2011ic .
double deuteron_pion_elastic(double mandelstam_s)
Deuteron pion elastic cross-section [mb] parametrized to fit pi-d elastic scattering data (the data c...
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltaplus_DbarzeroDeltazero_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAPLUS_DBARZERODELTAZERO data.
const std::initializer_list< double > DSTARZEROKZERO_ELASTIC_SIG
Elastic D*(2007)⁰K⁰ cross section.
const std::initializer_list< double > PIZEROPIZERO_TOT_SIG
Total π⁰ π⁰ cross section parametrized from bottom-up SMASH-3.0 using the hadronic list from PDG2018.
std::optional< double > DzeroKbarzero_elastic(double sqrts)
D⁰K̄⁰ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
double lambdasigma0_ximinusp(double sqrts_sqrts0)
Lambda Sigma0 <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
const std::initializer_list< double > PIMINUSP_TOT_SIG
Total p π⁻ cross section parametrized from bottom-up SMASH-3.0, using the hadronic list from PDG2018.
double DminusDeltazero_DbarzeroDeltaminus(double sqrts)
D⁻Δ⁰ -> D̄⁰Δ⁻ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double NN_string_hard(double mandelstam_s)
nucleon-nucleon hard scattering cross section (with partonic scattering)
double Dzerop_Dplusn(double sqrts)
D⁰p -> D⁺n cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > DPI_SQRTS
Center-of-mass energy.
double xs_ppbar_annihilation(double mandelstam_s)
parametrized cross-section for proton-antiproton annihilation used in the UrQMD model
const std::initializer_list< double > DBARZERODELTAPLUS_DMINUSDELTAPLUSPLUS_SIG
D̄⁰Δ⁺ -> D⁻Δ⁺⁺ cross section Tolos:2013kva .
double DbarzeroDeltaplus_DminusDeltaplusplus(double sqrts)
D̄⁰Δ⁺ -> D⁻Δ⁺⁺ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
std::optional< double > DplusDeltaplus_elastic(double sqrts)
D⁺Δ⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > piplusp_total_interpolation
An interpolation that gets lazily filled using the PIPLUSP_TOT data.
const std::initializer_list< double > PIPLUSP_ELASTIC_SIG
PDG data on pi+ p elastic cross section: cross section.
static std::unique_ptr< InterpolateDataLinear< double > > DstarplusKminus_DstarzeroKbarzero_interpolation
An interpolation that gets lazily filled using the DSTARPLUSKMINUS_DSTARZEROKBARZERO data.
double kplusp_inelastic_background(double mandelstam_s)
K+ p inelastic background cross section parametrization Source: Buss:2011mx , B.3....
std::optional< double > Dzerop_elastic(double sqrts)
D⁰p elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltaplusplus_DplusDeltaplus_interpolation
An interpolation that gets lazily filled using the DZERODELTAPLUSPLUS_DPLUSDELTAPLUS data.
const std::initializer_list< double > DSTARETA_SQRTS
Center-of-mass energy.
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 DminusDeltaplus_DbarzeroDeltazero(double sqrts)
D⁻Δ⁺ -> D̄⁰Δ⁰ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
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.
const std::initializer_list< double > PIPLUSP_TOT_SQRTS
Center-of-mass energy.
const std::initializer_list< double > DBARZERODELTAPLUS_ELASTIC_SIG
Elastic D̄⁰Δ⁺ cross section Tolos:2013kva .
double plab_from_s_heavier_particle_at_rest(double mandelstam_s, double m1, double m2)
Convert Mandelstam-s to p_lab in a fixed-target collision.
static std::unique_ptr< InterpolateDataLinear< double > > Dstarzeropiminus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROPIMINUS_ELASTIC data.
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....
const std::initializer_list< double > DPLUSN_DZEROP_SIG
D⁺n -> D⁰p cross section Tolos:2013kva .
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 > DKAON_SQRTS
Center-of-mass energy.
double DplusDeltazero_DzeroDeltaplus(double sqrts)
D⁺Δ⁰ -> D⁰Δ⁺ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > KMINUSP_ELASTIC_SIG
PDG data on K- p elastic cross section: cross section.
const std::initializer_list< double > DPLUSDELTAZERO_DZERODELTAPLUS_SIG
D⁺Δ⁰ -> D⁰Δ⁺ cross section Tolos:2013kva .
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 > DSTARPLUSKPLUS_ELASTIC_SIG
Elastic D*(2010)⁺K⁺ cross section.
const std::initializer_list< double > DSTARPLUSPIMINUS_ELASTIC_SIG
Elastic D*(2010)⁺π⁻ cross section.
const std::initializer_list< double > DPLUSDELTAPLUS_DZERODELTAPLUSPLUS_SIG
D⁺Δ⁺ -> D⁰Δ⁺⁺ cross section Tolos:2013kva .
const std::initializer_list< double > PIPLUSP_TOT_SIG
Total p π⁺ cross section parametrized from bottom-up SMASH-3.0, using the hadronic list from PDG2018.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_total_interpolation
An interpolation that gets lazily filled using the PIMINUSP_TOT data.
const std::initializer_list< double > DMINUSDELTAPLUS_DBARZERODELTAZERO_SIG
D⁻Δ⁺ -> D̄⁰Δ⁰ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DzeroKplus_DplusKzero_interpolation
An interpolation that gets lazily filled using the DZEROKPLUS_DPLUSKZERO data.
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltaplusplus_elastic_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAPLUSPLUS_ELASTIC data.
std::optional< double > Dstarpluseta_elastic(double sqrts)
D*(2010)⁺η elastic cross section (data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > DzeroKbarzero_DplusKminus_interpolation
An interpolation that gets lazily filled using the DZEROKBARZERO_DPLUSKMINUS data.
const std::initializer_list< double > PIMINUSP_RES_SQRTS
Center-of-mass energy.
const std::initializer_list< double > DBARZERODELTAZERO_DMINUSDELTAPLUS_SIG
D̄⁰Δ⁰ -> D⁻Δ⁺ cross section Tolos:2013kva .
std::optional< double > DplusKminus_elastic(double sqrts)
D⁺K⁻ elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
double kplusn_total(double mandelstam_s)
K+ n total cross section parametrization.
const std::initializer_list< double > DZERODELTAMINUS_ELASTIC_SIG
Elastic D⁰Δ⁻ cross section Tolos:2013kva .
const std::initializer_list< double > DSTARZEROPIZERO_DSTARPLUSPIMINUS_SIG
D*(2007)⁰π⁰ -> D*(2010)⁺π⁻ cross section.
constexpr double really_small
Numerical error tolerance.
std::optional< double > DstarplusKzero_elastic(double sqrts)
D*(2010)⁺K⁰ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
static std::unique_ptr< InterpolateDataLinear< double > > DzeroKplus_elastic_interpolation
An interpolation that gets lazily filled using the DZEROKPLUS_ELASTIC data.
double np_elastic(double mandelstam_s)
np elastic cross section parametrization Source: Weil:2013mya , eq.
const std::initializer_list< double > DZEROKBARZERO_ELASTIC_SIG
Elastic D⁰K̄⁰ cross section Tolos:2013kva .
const std::initializer_list< double > DZERODELTAZERO_DPLUSDELTAMINUS_SIG
D⁰Δ⁰ -> D⁺Δ⁻ cross section Tolos:2013kva .
std::optional< double > DbarzeroDeltaminus_elastic(double sqrts)
D̄⁰Δ⁻ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > DPLUSDELTAZERO_ELASTIC_SIG
Elastic D⁺Δ⁰ cross section Tolos:2013kva .
std::optional< double > DbarzeroDeltazero_elastic(double sqrts)
D̄⁰Δ⁰ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double k0n_elastic_background(double mandelstam_s)
K0 n elastic background cross section parametrization Source: Buss:2011mx , B.3.9.
static std::unique_ptr< InterpolateDataLinear< double > > Dminusp_Dbarzeron_interpolation
An interpolation that gets lazily filled using the DMINUSP_DBARZERON data.
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.
const std::initializer_list< double > DPLUSDELTAMINUS_DZERODELTAZERO_SIG
D⁺Δ⁻ -> D⁰Δ⁰ cross section Tolos:2013kva .
const std::initializer_list< double > DZEROKMINUS_ELASTIC_SIG
Elastic D⁰K⁻ cross section Tolos:2013kva .
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.
const std::initializer_list< double > DZERODELTAPLUS_ELASTIC_SIG
Elastic D⁰Δ⁺ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltaplus_elastic_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAPLUS_ELASTIC data.
double Dzeropiplus_Dpluspizero(double sqrts)
D⁰π⁺ -> D⁺π⁰ cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
const std::initializer_list< double > DSTARZEROKBARZERO_DSTARPLUSKMINUS_SIG
D*(2007)⁰K̄⁰ -> D*(2010)⁺K⁻ cross section.
double kbar0n_elastic_background(double mandelstam_s)
Kbar0 n elastic background cross section parametrization Source: Buss:2011mx , B.3....
const std::initializer_list< double > DMINUSDELTAMINUS_ELASTIC_SIG
Elastic D⁻Δ⁻ cross section Tolos:2013kva .
double kminusp_kbar0n(double mandelstam_s)
K- p <-> Kbar0 n cross section parametrization.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltazero_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAZERO_ELASTIC data.
std::optional< double > DstarplusKplus_elastic(double sqrts)
D*(2010)⁺K⁺ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
double sigmaplussigmaminus_ximinusp(double sqrts_sqrts0)
Sigma+ Sigma- <-> Xi- p cross section parametrization Two hyperon exchange, based on effective model ...
static std::unique_ptr< InterpolateDataLinear< double > > pizeropizero_total_interpolation
An interpolation that gets lazily filled using the PIZEROPIZERO_TOT data.
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 DzeroKplus_DplusKzero(double sqrts)
D⁰K⁺ -> D⁺K⁰ cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > Dplusn_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSN_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DminusDeltaplusplus_elastic_interpolation
An interpolation that gets lazily filled using the DMINUSDELTAPLUSPLUS_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DplusDeltaplus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSDELTAPLUS_ELASTIC data.
const std::initializer_list< double > DSTARPLUSETA_ELASTIC_SIG
Elastic D*(2010)⁺η cross section. Data provided by Juan Torres-Rincon.
const std::initializer_list< double > DSTARPLUSPIMINUS_DSTARZEROPIZERO_SIG
D*(2010)⁺π⁻ -> D*(2007)⁰π⁰ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > pipluspiminus_total_interpolation
An interpolation that gets lazily filled using the PIPLUSPIMINUS_TOT data.
double deuteron_nucleon_inelastic(double N_kinetic_energy)
Parametrization of deuteron-nucleon inelastic cross section.
static std::unique_ptr< InterpolateDataLinear< double > > DstarplusKbarzero_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSKBARZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > kminusn_total_interpolation
An interpolation that gets lazily filled using the KMINUSN_TOT data.
static std::unique_ptr< InterpolateDataLinear< double > > Dbarzerop_elastic_interpolation
An interpolation that gets lazily filled using the DBARZEROP_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DbarzeroDeltaplus_DminusDeltaplusplus_interpolation
An interpolation that gets lazily filled using the DBARZERODELTAPLUS_DMINUSDELTAPLUSPLUS data.
static std::unique_ptr< InterpolateDataLinear< double > > Dpluspiminus_Dzeropizero_interpolation
An interpolation that gets lazily filled using the DPLUSPIMINUS_DZEROPIZERO data.
const std::initializer_list< double > DSTARPLUSPIZERO_DSTARZEROPIPLUS_SIG
D*(2010)⁺π⁰ -> D*(2007)⁰π⁺ cross section.
std::optional< double > DminusDeltaminus_elastic(double sqrts)
D⁻Δ⁻ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double piplusp_total(double sqrts)
pi+ p total cross section parametrized from PDG2018, smoothed using the LOWESS algorithm.
static std::unique_ptr< InterpolateDataLinear< double > > DstarzeroKplus_DstarplusKzero_interpolation
An interpolation that gets lazily filled using the DSTARZEROKPLUS_DSTARPLUSKZERO data.
static std::unique_ptr< InterpolateDataLinear< double > > Dzeropiplus_Dpluspizero_interpolation
An interpolation that gets lazily filled using the DZEROPIPLUS_DPLUSPIZERO data.
static std::unique_ptr< InterpolateDataLinear< double > > DstarzeroKzero_elastic_interpolation
An interpolation that gets lazily filled using the DSTARZEROKZERO_ELASTIC data.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroDeltaplusplus_elastic_interpolation
An interpolation that gets lazily filled using the DZERODELTAPLUSPLUS_ELASTIC data.
double piminusp_high_energy(double mandelstam_s)
pi-p total cross section at high energies
std::optional< double > DstarzeroKbarzero_elastic(double sqrts)
D*(2007)⁰K̄⁰ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rin...
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.
std::optional< double > Dzeropiplus_elastic(double sqrts)
D⁰π⁺ elastic cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
const std::initializer_list< double > DSTARZEROPIZERO_ELASTIC_SIG
Elastic D*(2007)⁰π⁰ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > Dstarpluspiminus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSPIMINUS_ELASTIC data.
const std::initializer_list< double > DPLUSKZERO_DZEROKPLUS_SIG
D⁺K⁰ -> D⁰K⁺ cross section Tolos:2013kva .
double pp_elastic(double mandelstam_s)
pp elastic cross section parametrization Source: Weil:2013mya , eq.
double DzeroDeltaplusplus_DplusDeltaplus(double sqrts)
D⁰Δ⁺⁺ -> D⁺Δ⁺ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
static std::unique_ptr< InterpolateDataLinear< double > > DplusKminus_DzeroKbarzero_interpolation
An interpolation that gets lazily filled using the DPLUSKMINUS_DZEROKBARZERO data.
const std::initializer_list< double > KMINUSP_TOT_SIG
PDG smoothed data on K- p total cross section: cross section.
std::optional< double > Dstarpluspiminus_elastic(double sqrts)
D*(2010)⁺π⁻ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
const std::initializer_list< double > DZERODELTAPLUS_DPLUSDELTAZERO_SIG
D⁰Δ⁺ -> D⁺Δ⁰ cross section Tolos:2013kva .
static std::unique_ptr< InterpolateDataLinear< double > > DstarplusKplus_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSKPLUS_ELASTIC data.
std::optional< double > DstarplusKbarzero_elastic(double sqrts)
D*(2010)⁺K̄⁰ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rin...
const std::initializer_list< double > DBARZERODELTAMINUS_ELASTIC_SIG
Elastic D̄⁰Δ⁻ cross section Tolos:2013kva .
double Dzeropizero_Dpluspiminus(double sqrts)
D⁰π⁰ -> D⁺π⁻ cross section (Abreu:2011ic , data provided by Juan Torres-Rincon).
double kplusn_inelastic_background(double mandelstam_s)
K+ n inelastic background cross section parametrization Source: Buss:2011mx , B.3....
const std::initializer_list< double > DSTARPLUSKMINUS_ELASTIC_SIG
Elastic D*(2010)⁺K⁻ cross section.
const std::initializer_list< double > PIZEROPIZERO_TOT_SQRTS
Center-of-mass energy.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_lambdak0_interpolation
An interpolation that gets lazily filled using the PIMINUSP_LAMBDAK0 data.
std::optional< double > DstarplusKminus_elastic(double sqrts)
D*(2010)⁺K⁻ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
const std::initializer_list< double > DZERODELTAPLUSPLUS_ELASTIC_SIG
Elastic D⁰Δ⁺⁺ cross section Tolos:2013kva .
const std::initializer_list< double > DPLUSDELTAMINUS_ELASTIC_SIG
Elastic D⁺Δ⁻ cross section Tolos:2013kva .
const std::initializer_list< double > DSTARZEROKPLUS_DSTARPLUSKZERO_SIG
D*(2007)⁰K⁺ -> D*(2010)⁺K⁰ cross section.
static std::unique_ptr< InterpolateDataLinear< double > > piminusp_sigmaminuskplus_interpolation
An interpolation that gets lazily filled using the PIMINUSP_SIGMAMINUSKPLUS data.
double DbarzeroDeltazero_DminusDeltaplus(double sqrts)
D̄⁰Δ⁰ -> D⁻Δ⁺ cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double kplusp_elastic_background(double mandelstam_s)
K+ p elastic background cross section parametrization.
static std::unique_ptr< InterpolateDataLinear< double > > DzeroKminus_elastic_interpolation
An interpolation that gets lazily filled using the DZEROKMINUS_ELASTIC data.
std::optional< double > DbarzeroDeltaplus_elastic(double sqrts)
D̄⁰Δ⁺ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
double piplusp_elastic_AQM(double mandelstam_s, double m1, double m2)
pi+p elactic cross section parametrization.
double piplusp_elastic(double mandelstam_s)
pi+p elastic cross section parametrization, PDG data.
std::optional< double > Dstarzeropizero_elastic(double sqrts)
D*(2007)⁰π⁰ elastic cross section (closest reference Song:2015sfa , data provided by Juan Torres-Rinc...
static std::unique_ptr< InterpolateDataSpline > piminusp_elastic_res_interpolation
An interpolation that gets lazily filled using the PIMINUSP_RES data.
static std::unique_ptr< InterpolateDataLinear< double > > Dzeropizero_Dpluspiminus_interpolation
An interpolation that gets lazily filled using the DZEROPIZERO_DPLUSPIMINUS 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 ...
static std::unique_ptr< InterpolateDataLinear< double > > Dplusn_Dzerop_interpolation
An interpolation that gets lazily filled using the DPLUSN_DZEROP data.
const std::initializer_list< double > DZERON_ELASTIC_SIG
Elastic D⁰n cross section Tolos:2013kva .
const std::initializer_list< double > DZEROPIMINUS_ELASTIC_SIG
Elastic D⁰π⁻ cross section Abreu:2011ic .
static std::unique_ptr< InterpolateDataLinear< double > > DstarplusKzero_elastic_interpolation
An interpolation that gets lazily filled using the DSTARPLUSKZERO_ELASTIC data.
std::optional< double > DzeroDeltazero_elastic(double sqrts)
D⁰Δ⁰ elastic cross section (Tolos:2013kva ), data provided by Juan Torres-Rincon.
const std::initializer_list< double > DZEROETA_ELASTIC_SIG
Elastic D⁰η cross section Tolos:2013kva .
std::optional< double > Dzeroeta_elastic(double sqrts)
D⁰η elastic cross section (Tolos:2013kva , data provided by Juan Torres-Rincon).
static std::unique_ptr< InterpolateDataLinear< double > > Dpluspiplus_elastic_interpolation
An interpolation that gets lazily filled using the DPLUSPIPLUS_ELASTIC data.
const std::initializer_list< double > PIMINUSP_LAMBDAK0_SIG
PDG data on pi- p to Lambda K0 cross section: cross section.