23 m_densitiesGCE.resize(m_TPS->Particles().size());
25 m_CharmValues.resize(0);
26 m_CharmValues.push_back(0);
27 m_CharmValues.push_back(1);
28 m_CharmValues.push_back(-1);
31 for (
unsigned int i = 0; i < m_CharmValues.size(); ++i) m_CharmMap[m_CharmValues[i]] = i;
33 m_Parameters.muC = 0.;
35 m_TAG =
"ThermalModelCanonicalCharm";
38 m_InteractionModel =
Ideal;
49 m_Parameters.muC = 0.;
54 m_Parameters.muC = 0.0;
59 m_densitiesGCE.resize(m_TPS->Particles().size());
63 m_QuantumStats = stats;
64 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i)
65 if (m_TPS->Particles()[i].Charm() == 0) m_TPS->Particle(i).UseStatistics(stats);
66 else m_TPS->Particle(i).UseStatistics(
false);
70 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i) {
73 m_GCECalculated =
true;
77 m_energydensitiesGCE.resize(m_densitiesGCE.size());
78 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i) {
85 m_ConstrainMuC =
false;
90 assert(m_IGFExtraConfig.MagneticField.B == 0.);
93 throw std::runtime_error(
"ThermalModelCanonicalCharm::CalculatePrimordialDensities(): PCE not supported!");
96 m_FluctuationsCalculated =
false;
97 m_energydensitiesGCE.resize(0);
101 m_Zsum.resize(m_CharmValues.size());
103 m_partialZ.resize(m_CharmValues.size());
104 vector<double> xi(1, 0.), yi(1, 0.);
106 for (
size_t i = 0; i < m_CharmValues.size(); ++i) {
108 for (
int j = 0; j < m_TPS->ComponentsNumber(); ++j)
109 if (m_CharmValues[i] == m_TPS->Particles()[j].Charm()) m_partialZ[i] += m_densitiesGCE[j] * m_Volume;
110 if (m_partialZ[i] < 1.e-10) m_partialZ[i] += 1e-10;
114 for (
int i = 0; i < 1; ++i) {
115 xi[i] = 2. * sqrt(m_partialZ[m_CharmMap[i + 1]] * m_partialZ[m_CharmMap[-(i + 1)]]);
116 yi[i] = sqrt(m_partialZ[m_CharmMap[i + 1]] / m_partialZ[m_CharmMap[-(i + 1)]]);
119 for (
size_t i = 0; i < m_CharmValues.size(); ++i) {
122 res =
xMath::BesselI(abs(-m_CharmValues[i]), xi[0]) * pow(yi[0], m_CharmValues[i]);
126 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i) {
127 if (m_CharmMap.count(-m_TPS->Particles()[i].Charm())) m_densities[i] = (m_Zsum[m_CharmMap[-m_TPS->Particles()[i].Charm()]] / m_Zsum[m_CharmMap[0]]) * m_densitiesGCE[i];
135 m_wprim.resize(m_densities.size());
136 m_wtot.resize(m_densities.size());
137 for (
size_t i = 0; i < m_wprim.size(); ++i) {
149 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i) ret += (m_Zsum[m_CharmMap[-m_TPS->Particles()[i].Charm()]] / m_Zsum[m_CharmMap[0]]) * m_energydensitiesGCE[i];
154 double ret = m_partialZ[0] + log(m_Zsum[m_CharmMap[0]]);
156 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i)
if (m_CharmMap.count(-m_TPS->Particles()[i].Charm())) ret += (m_Zsum[m_CharmMap[-m_TPS->Particles()[i].Charm()]] / m_Zsum[m_CharmMap[0]]) * ((m_energydensitiesGCE[i] - (m_Parameters.muB * m_TPS->Particles()[i].BaryonCharge() + m_Parameters.muQ * m_TPS->Particles()[i].ElectricCharge() + m_Parameters.muS * m_TPS->Particles()[i].Strangeness()) * m_densitiesGCE[i]) / m_Parameters.T);
163 for (
int i = 0; i < m_TPS->ComponentsNumber(); ++i) ret += (m_Zsum[m_CharmMap[-m_TPS->Particles()[i].Charm()]] / m_Zsum[m_CharmMap[0]]) * m_Parameters.T * m_densitiesGCE[i];
map< string, double > params
virtual void ChangeTPS(ThermalParticleSystem *TPS)
Change the particle list.
bool UsePartialChemicalEquilibrium()
Whether partial chemical equilibrium with additional chemical potentials is used.
virtual void FixParameters()
Method which actually implements ConstrainChemicalPotentials() (for backward compatibility).
virtual void SetParameters(const ThermalModelParameters ¶ms)
The thermal parameters.
virtual void ValidateCalculation()
Checks whether issues have occured during the calculation of particle densities in the CalculateDensi...
ThermalModelBase(ThermalParticleSystem *TPS, const ThermalModelParameters ¶ms=ThermalModelParameters())
Construct a new ThermalModelBase object.
virtual void CalculateDensities()
Calculates the primordial and total (after decays) densities of all species.
@ CCE
Charm-canonical ensemble.
virtual void SetParameters(const ThermalModelParameters ¶ms)
The thermal parameters.
virtual double CalculateEnergyDensity()
virtual double CalculateEntropyDensity()
void CalculateEnergyDensitiesGCE()
Calculates the grand-canonical energy densities.
virtual void FixParameters()
Method which actually implements ConstrainChemicalPotentials() (for backward compatibility).
virtual void CalculatePrimordialDensities()
Calculates the primordial densities of all species.
void CalculateDensitiesGCE()
Calculates the particle densities in a grand-canonical ensemble.
virtual void SetStatistics(bool stats)
virtual void SetCharmChemicalPotential(double muC)
Override the base class method to always set to zero.
ThermalModelCanonicalCharm(ThermalParticleSystem *TPS, const ThermalModelParameters ¶ms=ThermalModelParameters())
Construct a new ThermalModelCanonicalCharm object.
virtual void ChangeTPS(ThermalParticleSystem *TPS)
Change the particle list.
void CalculateFluctuations()
Dummy function. Fluctuations not yet supported.
virtual double CalculatePressure()
virtual ~ThermalModelCanonicalCharm(void)
Destroy the ThermalModelCanonicalCharm object.
virtual bool IsConservedChargeCanonical(ConservedCharge::Name charge) const
Class containing the particle list.
double BesselI(int n, double x)
Integer order modified Bessel function I_n(x)
The main namespace where all classes and functions of the Thermal-FIST library reside.
Name
Set of all conserved charges considered.
Structure containing all thermal parameters of the model.
Contains some extra mathematical functions used in the code.