8#ifndef RANDOMGENERATORS_H
9#define RANDOMGENERATORS_H
13#include "MersenneTwister.h"
31 void SetSeed(
const unsigned int seed);
55 static double pn(
int n,
double a,
int nu);
58 static double R(
double x,
int nu);
60 static double mu(
double a,
int nu) {
return a *
R(a, nu) / 2; }
62 static double chi2(
double a,
int nu);
64 static int m(
double a,
int nu) {
return static_cast<int>((sqrt(a*a+
static_cast<double>(nu)*nu) - nu)/2.); }
66 static double sig2(
double a,
int nu);
68 static double Q2(
double a,
int nu);
74 static double pmXmOverpm(
int X,
int tm,
double a,
int nu);
114 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const = 0;
138 m_Mass(mass), m_T(T), m_Mu(mu), m_Statistics(statistics)
141 m_Max = ComputeMaximum(m_Mass);
150 double GetP(
double mass = -1.)
const;
154 double g(
double x,
double mass = -1.)
const;
156 double ComputeMaximum(
double mass)
const;
160 double m_Mass, m_T, m_Mu;
190 m_Gamma = 1. / sqrt(1. - m_Beta * m_Beta);
208 m_Gamma = 1. / sqrt(1. - m_Beta * m_Beta);
213 double GetR()
const {
return m_R; }
218 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const;
224 double w(
double p)
const {
225 return sqrt(p*p + m_Mass * m_Mass);
228 double alpha(
double p)
const {
229 return m_Gamma * m_Beta * p / m_T;
234 double g(
double x,
double mass = -1.)
const;
235 double g2(
double x,
double tp,
double mass = -1.)
const;
238 void FixParameters();
243 double GetRandom(
double mass = -1.)
const;
280 m_Generator(mass, statistics, T, mu)
287 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const;
318 double Tkin = 0.100,
double etamax = 3.0,
double mass = 0.938,
int statistics = 0,
double mu = 0);
327 double EtaMax()
const {
return m_EtaMax; }
328 double Mass()
const {
return m_Mass; }
332 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const;
371 BreitWignerGenerator(
double M,
double gamma,
double mthr) : m_M(M), m_Gamma(gamma), m_Mthr(mthr) { FixParameters(); }
396 double f(
double x)
const;
399 void FixParameters();
459 virtual double f(
double M)
const;
501 virtual double f(
double M)
const;
542 SSHMomentumGenerator(
double T,
double betas,
double etamax,
double npow,
double mass) :m_T(T), m_BetaS(betas), m_EtaMax(etamax), m_n(npow), m_Mass(mass) {
543 m_distr =
SSHDistribution(0, m_Mass, m_T, m_BetaS, m_EtaMax, m_n,
false);
561 void SetParameters(
double T,
double betas,
double etamax,
double npow,
double mass) {
581 m_BetaS = (2. + m_n) / 2. * betaT;
596 std::vector<double>
GetMomentum(
double mass = -1.)
const;
601 double w(
double p)
const {
602 return sqrt(p * p + m_Mass * m_Mass);
605 double g(
double x)
const {
606 return m_distr.
dndpt(-log(x)) / x;
609 double g2(
double x)
const {
613 void FixParameters();
615 void FixParameters2();
618 void FindMaximumPt();
620 void FindMaximumY(
double pt);
622 void FindMaximumY2(
double pt);
625 std::pair<double, double> GetRandom(
double mass = -1.);
627 std::pair<double, double> GetRandom2(
double mass = -1.)
const;
629 double m_T, m_BetaS, m_EtaMax, m_n, m_Mass;
630 double m_MaxY, m_MaxPt;
631 SSHDistribution m_distr;
632 SplineFunction m_dndpt;
633 std::vector<SplineFunction> m_dndy;
634 std::vector<double> m_MaxYs;
Base class implementing a longitudinally boost-invariant azimuthally symmetric freeze-out parametriza...
virtual std::vector< double > GetMomentum(double mass=-1.) const
BoostInvariantMomentumGenerator(BoostInvariantFreezeoutParametrization *FreezeoutModel=NULL, double Tkin=0.100, double etamax=3.0, double mass=0.938, int statistics=0, double mu=0)
Construct a new BoostInvariantMomentumGenerator object.
virtual double GetRandomZeta(MTRand &rangen=RandomGenerators::randgenMT) const
Samples zeta for use in Monte Carlo event generator.
virtual ~BoostInvariantMomentumGenerator()
BoostInvariantMomentumGenerator desctructor.
void SetParameters(double M, double gamma, double mthr)
Set the Breit-Wigner spectral function parameters.
double GetRandom() const
Samples the resonance mass from a relativistic Breit-Wigner distribution with a constant width.
BreitWignerGenerator(double M, double gamma, double mthr)
Construct a new BreitWignerGenerator object.
ParticleMomentumGenerator()
Default constructor.
virtual std::vector< double > GetMomentum(double mass=-1.) const =0
virtual ~ParticleMomentumGenerator()
Destructor.
void SetParameters(double T, double betas, double etamax, double npow, double mass)
Sets the parameters of the distribution.
void SetMeanBetaT(double betaT)
Set the mean transverse flow velocity.
SSHMomentumGenerator(double T, double betas, double etamax, double npow, double mass)
Construct a new SSHGenerator object.
std::vector< double > GetMomentum(double mass=-1.) const
double GetBetaSurface() const
virtual std::vector< double > GetMomentum(double mass=-1.) const
SiemensRasmussenMomentumGeneratorGeneralized()
SiemensRasmussenMomentumGeneratorGeneralized(double T, double beta, double R, double mass, int statistics=0, double mu=0)
Construct a new SiemensRasmussenMomentumGeneratorGeneralized object.
~SiemensRasmussenMomentumGenerator()
void SetParameters(double T, double beta, double R, double mass)
Sets the parameters of the Siemens-Rasmussen distribution.
SiemensRasmussenMomentumGenerator(double T, double beta, double R, double mass)
Construct a new SiemensRasmussenMomentumGenerator object.
SiemensRasmussenMomentumGenerator()
virtual std::vector< double > GetMomentum(double mass=-1.) const
ThermalBreitWignerGenerator()
virtual void FixParameters()
Computes some auxiliary stuff needed for sampling.
ThermalBreitWignerGenerator(ThermalParticle *part, double T, double Mu)
Construct a new ThermalBreitWignerGenerator object.
void SetParameters(ThermalParticle *part, double T, double Mu)
Sets the parameters of the distribution.
virtual ~ThermalBreitWignerGenerator()
double GetRandom() const
Samples the mass.
virtual double f(double M) const
Unnormalized resonance mass probability density.
~ThermalEnergyBreitWignerGenerator()
virtual double f(double M) const
Unnormalized resonance mass probability density.
ThermalEnergyBreitWignerGenerator(ThermalParticle *part, double T, double Mu)
Construct a new ThermalEnergyBreitWignerGenerator object.
ThermalEnergyBreitWignerGenerator()
virtual void FixParameters()
Computes some auxiliary stuff needed for sampling.
Class for generating the absolute values of the momentum of a particle in its local rest frame.
double GetP(double mass=-1.) const
Samples the momentum of a particle.
ThermalMomentumGenerator(double mass=0.938, int statistics=0, double T=0.100, double mu=0.)
Construct a new ThermalMomentumGenerator object.
Class implementing the momentum distribution in the longitudinally symmetric Blast-Wave model.
virtual double dndpt(double pt) const
The pT distribution function.
double f(double arg) const
Class containing all information about a particle specie.
Contains random generator functions used in the Monte Carlo Thermal Event Generator.
double SkellamProbability(int k, double mu1, double mu2)
Probability of a Skellam distributed random variable with Poisson means mu1 and mu2 to have the value...
int RandomPoisson(double mean)
Generates random integer distributed by Poisson with specified mean Uses randgenMT.
MTRand randgenMT
The Mersenne Twister random number generator.
void SetSeed(const unsigned int seed)
Set the seed of the random number generator randgenMT.
std::mt19937 rng_std
The Mersenne Twister random number generator from STD library.
The main namespace where all classes and functions of the Thermal-FIST library reside.
Generator of a random number from the Bessel distribution (a, nu), nu is integer Uses methods from ht...
static double chi2(double a, int nu)
static int RandomBesselNormal(double a, int nu)
static int RandomBesselNormal(double a, int nu, MTRand &rangen)
static int RandomBesselDevroye1(double a, int nu, MTRand &rangen)
static int RandomBesselDevroye3(double a, int nu)
static int RandomBesselDevroye3(double a, int nu, MTRand &rangen)
static double pmXmOverpm(int X, int tm, double a, int nu)
static int RandomBesselPoisson(double a, int nu)
static double mu(double a, int nu)
static double Q2(double a, int nu)
static int RandomBesselCombined(double a, int nu, MTRand &rangen)
static int RandomBesselCombined(double a, int nu)
static int RandomBesselPoisson(double a, int nu, MTRand &rangen)
static int RandomBesselDevroye1(double a, int nu)
static int m(double a, int nu)
static int RandomBesselDevroye2(double a, int nu, MTRand &rangen)
static double pn(int n, double a, int nu)
static double R(double x, int nu)
static double sig2(double a, int nu)
static int RandomBesselDevroye2(double a, int nu)