11 #include <gsl/gsl_sf_bessel.h>
24 double breit_wigner(
const double m,
const double pole,
const double width) {
25 const double msqr = m * m;
26 const double dmsqr = msqr - pole * pole;
27 return 2. * msqr * width / (M_PI * (dmsqr * dmsqr + msqr * width * width));
32 return cauchy(m, pole, width / 2.);
36 double cauchy(
double x,
double pole,
double width) {
37 const double dm = x - pole;
38 return width / (M_PI * (dm * dm + width * width));
43 const double temperature) {
44 return 4.0 * M_PI * momentum_sqr * std::exp(-energy / temperature);
48 const double temperature) {
49 return momentum_sqr * std::sqrt(momentum_sqr) *
50 std::exp(-energy / temperature);
54 const double temperature) {
55 return ((3.0 / 20.0) * (momentum_sqr / (temperature * temperature)) -
56 (6.0 / 5.0) * (energy / temperature) + (14.0 / 5.0)) *
57 std::exp(-energy / temperature) * momentum_sqr;
61 const double temperature) {
62 return (0.75 + 0.125 * (momentum_sqr / (temperature * temperature)) -
63 (1.0 / 30.0) * (momentum_sqr * energy /
64 (temperature * temperature * temperature)) +
66 (momentum_sqr * momentum_sqr /
67 (temperature * temperature * temperature * temperature))) *
68 std::exp(-energy / temperature) * momentum_sqr;
72 const double mass,
const double temperature,
73 const double baryon_chemical_potential,
76 (std::exp((std::sqrt(momentum_radial * momentum_radial + mass * mass) -
77 baryon_chemical_potential) /
88 const double mom_min = 0.0;
89 const double mom_max =
90 std::sqrt(50. * 50. * temperature * temperature - mass * mass);
93 const double p_non_eq_sq =
94 0.5 * (9 * temperature * temperature +
96 std::sqrt(81 * temperature * temperature + 36 * mass * mass));
97 const double e_non_eq = std::sqrt(p_non_eq_sq + mass * mass);
98 const double probability_max =
103 double energy, momentum_radial, probability;
108 energy = std::sqrt(momentum_radial * momentum_radial + mass * mass);
110 energy, momentum_radial * momentum_radial, temperature);
113 return momentum_radial;
120 double energy_average;
123 const double m_over_T = mass / temperature;
124 energy_average = 3 * temperature + mass * gsl_sf_bessel_K1(m_over_T) /
125 gsl_sf_bessel_Kn(2, m_over_T);
128 energy_average = 3 * temperature;
130 const double momentum_average_sqr =
131 (energy_average - mass) * (energy_average + mass);
132 const double energy_min = mass;
133 const double energy_max = 50. * temperature;
136 const double probability_max =
142 double momentum_radial_sqr, probability;
145 momentum_radial_sqr = (energy - mass) * (energy + mass);
150 return std::sqrt(momentum_radial_sqr);
157 double energy_average;
160 const double m_over_T = mass / temperature;
161 energy_average = 3 * temperature + mass * gsl_sf_bessel_K1(m_over_T) /
162 gsl_sf_bessel_Kn(2, m_over_T);
165 energy_average = 3 * temperature;
167 const double momentum_average_sqr =
168 (energy_average - mass) * (energy_average + mass);
169 const double energy_min = mass;
170 const double energy_max = 50. * temperature;
173 const double probability_max =
179 double momentum_radial_sqr, probability;
182 momentum_radial_sqr = (energy - mass) * (energy + mass);
187 return std::sqrt(momentum_radial_sqr);
194 double momentum_radial, energy;
196 if (temperature > 0.6 * mass) {
201 momentum_radial = temperature * (a + b + c);
202 energy = std::sqrt(momentum_radial * momentum_radial + mass * mass);
204 std::exp((momentum_radial - energy) / temperature)) {
211 const double I1 = mass * mass;
212 const double I2 = 2.0 * mass * temperature;
213 const double I3 = 2.0 * temperature * temperature;
214 const double Itot = I1 + I2 + I3;
216 if (r0 < I1 / Itot) {
218 K = -temperature * std::log(r1);
219 }
else if (r0 < (I1 + I2) / Itot) {
222 K = -temperature * std::log(r1 * r2);
227 K = -temperature * std::log(r1 * r2 * r3);
230 momentum_radial = std::sqrt((energy + mass) * (energy - mass));
236 return momentum_radial;
240 double momentum_radial;
245 momentum_radial = (3.0 / 4.0) * temperature * (a + b + c + d);
247 return momentum_radial;