8#ifndef RANDOMGENERATORS_H
9#define RANDOMGENERATORS_H
13#include "MersenneTwister.h"
32 void SetSeed(
const unsigned int seed);
56 static double pn(
int n,
double a,
int nu);
59 static double R(
double x,
int nu);
61 static double mu(
double a,
int nu) {
return a *
R(a, nu) / 2; }
63 static double chi2(
double a,
int nu);
65 static int m(
double a,
int nu) {
return static_cast<int>((sqrt(a*a+
static_cast<double>(nu)*nu) - nu)/2.); }
67 static double sig2(
double a,
int nu);
69 static double Q2(
double a,
int nu);
75 static double pmXmOverpm(
int X,
int tm,
double a,
int nu);
115 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const = 0;
139 m_Mass(mass), m_T(T), m_Mu(mu), m_Statistics(statistics)
142 m_Max = ComputeMaximum(m_Mass);
151 double GetP(
double mass = -1.)
const;
155 double g(
double x,
double mass = -1.)
const;
157 double ComputeMaximum(
double mass)
const;
161 double m_Mass, m_T, m_Mu;
191 m_Gamma = 1. / sqrt(1. - m_Beta * m_Beta);
209 m_Gamma = 1. / sqrt(1. - m_Beta * m_Beta);
214 double GetR()
const {
return m_R; }
219 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const;
225 double w(
double p)
const {
226 return sqrt(p*p + m_Mass * m_Mass);
229 double alpha(
double p)
const {
230 return m_Gamma * m_Beta * p / m_T;
235 double g(
double x,
double mass = -1.)
const;
236 double g2(
double x,
double tp,
double mass = -1.)
const;
239 void FixParameters();
244 double GetRandom(
double mass = -1.)
const;
281 m_Generator(mass, statistics, T, mu)
288 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const;
319 double Tkin = 0.100,
double etamax = 3.0,
double mass = 0.938,
int statistics = 0,
double mu = 0);
328 double EtaMax()
const {
return m_EtaMax; }
329 double Mass()
const {
return m_Mass; }
333 virtual std::vector<double>
GetMomentum(
double mass = -1.)
const;
372 BreitWignerGenerator(
double M,
double gamma,
double mthr) : m_M(M), m_Gamma(gamma), m_Mthr(mthr) { FixParameters(); }
397 double f(
double x)
const;
400 void FixParameters();
460 virtual double f(
double M)
const;
502 virtual double f(
double M)
const;
543 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) {
544 m_distr =
SSHDistribution(0, m_Mass, m_T, m_BetaS, m_EtaMax, m_n,
false);
562 void SetParameters(
double T,
double betas,
double etamax,
double npow,
double mass) {
582 m_BetaS = (2. + m_n) / 2. * betaT;
597 std::vector<double>
GetMomentum(
double mass = -1.)
const;
602 double w(
double p)
const {
603 return sqrt(p * p + m_Mass * m_Mass);
606 double g(
double x)
const {
607 return m_distr.
dndpt(-log(x)) / x;
610 double g2(
double x)
const {
614 void FixParameters();
616 void FixParameters2();
619 void FindMaximumPt();
621 void FindMaximumY(
double pt);
623 void FindMaximumY2(
double pt);
626 std::pair<double, double> GetRandom(
double mass = -1.);
628 std::pair<double, double> GetRandom2(
double mass = -1.)
const;
630 double m_T, m_BetaS, m_EtaMax, m_n, m_Mass;
631 double m_MaxY, m_MaxPt;
632 SSHDistribution m_distr;
633 SplineFunction m_dndpt;
634 std::vector<SplineFunction> m_dndy;
635 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)