8 #ifndef MOMENTUMDISTRIBUTION_H 9 #define MOMENTUMDISTRIBUTION_H 39 virtual double dndp(
double p)
const = 0;
42 virtual double dndy(
double y)
const = 0;
45 virtual double dnmtdmt(
double mt)
const = 0;
48 virtual double d2ndptdy(
double pt,
double y)
const = 0;
88 m_Gamma = 1. / sqrt(1. - m_Beta * m_Beta);
107 if (pdgid != 0)
m_PDGID = pdgid;
108 m_Gamma = 1. / sqrt(1. - m_Beta * m_Beta);
116 virtual double dndp(
double p)
const;
118 virtual double dndy(
double y)
const;
120 virtual double dnmtdmt(
double mt)
const;
122 virtual double d2ndptdy(
double pt,
double y)
const;
127 double w(
double p)
const {
131 double alpha(
double p)
const {
132 return m_Gamma * m_Beta * p / m_T;
141 std::vector<double> m_xlag, m_wlag;
163 m_FreezeoutModel(freezeoutModel),
164 m_T(T), m_EtaMax(etamax)
166 if (m_FreezeoutModel == NULL) {
169 m_NormY = m_NormPt = m_Norm = 1.;
190 virtual double dndp(
double )
const {
return 0.; }
192 virtual double dndy(
double y)
const;
194 virtual double dnmtdmt(
double mt)
const;
196 virtual double d2ndptdy(
double pt,
double y)
const;
201 virtual double ZetaIntegrandpTYSingleFireball(
double zeta,
double pt,
double y)
const;
202 virtual double ZetaIntegrandpT(
double zeta,
double pt)
const;
207 virtual double dndysingle(
double y)
const;
209 virtual double dndptsingle(
double pt,
double y)
const;
212 virtual double dndpt(
double pt)
const {
return pt *
dnmtdmt(sqrt(pt * pt +
m_Mass *
m_Mass)); }
214 virtual double dndpt(
double pt,
double y)
const;
220 double m_NormY, m_NormPt, m_Norm;
221 std::vector<double> m_xlag, m_wlag;
222 std::vector<double> m_xlegT, m_wlegT;
223 std::vector<double> m_xlegY, m_wlegY;
224 std::vector<double> m_xlegeta, m_wlegeta;
257 SSHDistribution(
int pdgid = 0,
double mass = 0.,
double T = 0.100,
double betas = 0.5,
double etamax = 0.5,
double npow = 1.,
bool norm =
false) :
259 m_T(T), m_BetaS(betas), m_EtaMax(etamax), m_n(npow)
261 m_NormY = m_NormPt = m_Norm = 1.;
280 void SetParameters(
double T,
double betas,
double etamax,
double npow,
double mass,
int pdgid = 0,
bool norm =
true) {
286 if (pdgid != 0)
m_PDGID = pdgid;
287 m_NormY = m_NormPt = m_Norm = 1.;
301 m_BetaS = (2. + m_n) / 2. * betaT;
307 virtual double dndy(
double y,
double pt)
const;
310 virtual double dndysingle(
double y,
double pt)
const;
313 virtual double dndpt(
double pt)
const;
317 virtual double dndp(
double )
const {
return 0.; }
319 virtual double dndy(
double y)
const;
321 virtual double dnmtdmt(
double mt)
const;
323 virtual double d2ndptdy(
double pt,
double y)
const;
330 virtual double dndysingle(
double y)
const;
332 virtual double dndptsingle(
double pt,
double y)
const;
335 virtual double dndpt(
double pt,
double y)
const;
337 double w(
double p)
const {
341 double asinh(
double x)
const {
342 return log(x + sqrt(1. + x * x));
345 double atanh(
double x)
const {
346 return 0.5 * log((1. + x) / (1. - x));
349 double betar(
double r)
const {
353 return m_BetaS * r * r;
355 return m_BetaS * pow(r, m_n);
358 double rho(
double r)
const {
return atanh(betar(r)); }
365 double m_BetaS, m_EtaMax;
366 double m_NormY, m_NormPt, m_Norm;
368 std::vector<double> m_xlag, m_wlag;
369 std::vector<double> m_xlegT, m_wlegT;
370 std::vector<double> m_xlegY, m_wlegY;
371 std::vector<double> m_xlegeta, m_wlegeta;
bool m_Normalized
Whether the distribution has been normalized to unity.
bool m_useacc
Whether the acceptance functions are used.
void SetMeanBetaT(double betaT)
Set the mean transverse flow velocity.
void SetParameters(double T, double beta, double mass, int pdgid=0)
Set the parameters of the Siemens-Rasmussen distribution.
virtual double dndp(double) const
Distribution density over the absolute value of the 3-momentum.
bool isNormalized() const
Whether the distribution has been normalized to unity.
Class implementing the primordial 3-momentum distribution function of certain particle species...
virtual void Normalize()=0
Normalizes the momentum distribution to unity.
Class implementing a simple linear spline.
BoostInvariantMomentumDistribution(BoostInvariantFreezeoutParametrization *freezeoutModel=NULL, int pdgid=0, double mass=0., double T=0.100, double etamax=0.5, bool norm=false)
virtual ~SSHDistribution()
double m_ycm
Center-of-mass rapidity for the acceptance function.
SiemensRasmussenDistribution(int pdgid=0, double mass=0., double T=0.100, double beta=0.5)
Structure which contains the binomial probabilities for particle with given y and pt to be accepted...
virtual ~MomentumDistributionBase()
Destructor.
void SetParameters(double T, double betas, double etamax, double npow, double mass, int pdgid=0, bool norm=true)
Set the parameters of the longitudinal blast-wave distribution.
virtual double dndp(double p) const =0
Distribution density over the absolute value of the 3-momentum.
virtual double dndy(double y) const =0
Distribution density over the longitudinal rapidity.
virtual double d2ndptdy(double pt, double y) const =0
2D distribution density in rapidity and transverse momentum
void SetAcceptance(Acceptance::AcceptanceFunction *acc_, double ycm_=0.)
Class implementing the momentum distribution of boost-invariant, azimuthally symmetric freeze-out mod...
virtual ~SiemensRasmussenDistribution()
double m_Mass
Mass of a particle.
Base class implementing a longitudinally boost-invariant azimuthally symmetric freeze-out parametriza...
Acceptance::AcceptanceFunction * m_acc
Pointer to acceptance function.
virtual double dndp(double) const
Distribution density over the absolute value of the 3-momentum.
virtual double dnmtdmt(double mt) const =0
Transverse mass distribution.
Class implementing the momentum distribution in the spherically symmetric Blast-Wave model of Siemens...
int m_PDGID
PDG code of a particle.
MomentumDistributionBase(int pdgid=0, double mass=0.)
The main namespace where all classes and functions of the Thermal-FIST library reside.
Class implementing the momentum distribution in the longitudinally symmetric Blast-Wave model...
SSHDistribution(int pdgid=0, double mass=0., double T=0.100, double betas=0.5, double etamax=0.5, double npow=1., bool norm=false)