8 #ifndef SRC_INCLUDE_SMASH_TABULATION_H_
9 #define SRC_INCLUDE_SMASH_TABULATION_H_
53 Tabulation(
double x_min,
double range,
size_t num,
54 std::function<
double(
double)> f);
139 if (sqrts <= stable_mass + resonance_mass) {
146 pCM(sqrts, stable_mass, resonance_mass);
169 if (sqrts <= res_mass_1 + res_mass_2) {
176 pCM(sqrts, res_mass_1, res_mass_2);
194 const double m_stable = stable.
mass();
195 return Tabulation(m_min + m_stable, range, 100, [&](
double srts) {
196 return integrate(m_min, srts - m_stable, [&](
double m) {
217 return Tabulation(m1_min + m2_min, range, 125, [&](
double srts) {
218 const double m1_max = srts - m2_min;
219 const double m2_max = srts - m1_min;
221 m1_min, m1_max, m2_min, m2_max, [&](
double m1,
double m2) {
A C++ interface for numerical integration in two dimensions with the Cuba Cuhre integration function.
A C++ interface for numerical integration in one dimension with the GSL CQUAD integration functions.
Particle type contains the static properties of a particle species.
double spectral_function(double m) const
Full spectral function of the resonance (relativistic Breit-Wigner distribution with mass-dependent ...
double min_mass_kinematic() const
The minimum mass of the resonance that is kinematically allowed.
A class for storing a one-dimensional lookup table of floating-point values.
double x_min_
lower bound for tabulation
double inv_dx_
inverse step size 1/dx
double x_max_
upper bound for tabulation
std::vector< double > values_
vector for storing tabulated values
static Tabulation from_file(std::ifstream &stream, sha256::Hash hash)
Construct a tabulation object by reading binary data from a stream.
Tabulation()
Construct an empty tabulation object.
void write(std::ofstream &stream, sha256::Hash hash) const
Write a binary representation of the tabulation to a stream.
double get_value_step(double x) const
Look up a value from the tabulation (without any interpolation, simply using the closest tabulated va...
double get_value_linear(double x, Extrapolation extrapolation=Extrapolation::Linear) const
Look up a value from the tabulation using linear interpolation.
std::array< uint8_t, HASH_SIZE > Hash
A SHA256 hash.
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept
static Integrator integrate
Tabulation spectral_integral_semistable(Integrator &integrate, const ParticleType &resonance, const ParticleType &stable, double range)
Create a table for the spectral integral of a resonance and a stable particle.
static Integrator2d integrate2d(1E7)
double spec_func_integrand_2res(double sqrts, double res_mass_1, double res_mass_2, const ParticleType &t1, const ParticleType &t2)
Spectral function integrand for GSL integration, with two resonances in the final state.
Extrapolation
The kind of extrapolation used by the tabulation.
Tabulation spectral_integral_unstable(Integrator2d &integrate2d, const ParticleType &res1, const ParticleType &res2, double range)
Create a table for the spectral integral of two resonances.
double spec_func_integrand_1res(double resonance_mass, double sqrts, double stable_mass, const ParticleType &type)
Spectral function integrand for GSL integration, with one resonance in the final state (the second pa...