Thermal-FIST 1.6
Package for hadron resonance gas model applications
Loading...
Searching...
No Matches
ThermalModelCanonicalCharm.cpp
Go to the documentation of this file.
1/*
2 * Thermal-FIST package
3 *
4 * Copyright (c) 2014-2019 Volodymyr Vovchenko
5 *
6 * GNU General Public License (GPLv3 or later)
7 */
9
10#include <cassert>
11#include <stdexcept>
12
13#include "HRGBase/xMath.h"
14
15
16using namespace std;
17
18namespace thermalfist {
19
22 {
23 m_densitiesGCE.resize(m_TPS->Particles().size());
24
25 m_CharmValues.resize(0);
26 m_CharmValues.push_back(0);
27 m_CharmValues.push_back(1);
28 m_CharmValues.push_back(-1);
29
30 m_CharmMap.clear();
31 for (unsigned int i = 0; i < m_CharmValues.size(); ++i) m_CharmMap[m_CharmValues[i]] = i;
32
33 m_Parameters.muC = 0.;
34
35 m_TAG = "ThermalModelCanonicalCharm";
36
37 m_Ensemble = CCE;
38 m_InteractionModel = Ideal;
39
40 }
41
45
46
51
53 {
54 m_Parameters.muC = 0.0;
55 }
56
59 m_densitiesGCE.resize(m_TPS->Particles().size());
60 }
61
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);
67 }
68
70 for (int i = 0; i < m_TPS->ComponentsNumber(); ++i) {
71 m_densitiesGCE[i] = m_TPS->Particles()[i].Density(m_Parameters, IdealGasFunctions::ParticleDensity, m_UseWidth, m_Chem[i]);
72 }
73 m_GCECalculated = true;
74 }
75
77 m_energydensitiesGCE.resize(m_densitiesGCE.size());
78 for (int i = 0; i < m_TPS->ComponentsNumber(); ++i) {
79 m_energydensitiesGCE[i] = m_TPS->Particles()[i].Density(m_Parameters, IdealGasFunctions::EnergyDensity, m_UseWidth, m_Chem[i]);
80 }
81 }
82
84 {
85 m_ConstrainMuC = false;
87 }
88
90 assert(m_IGFExtraConfig.MagneticField.B == 0.); // No magnetic field supported currently
91
93 throw std::runtime_error("ThermalModelCanonicalCharm::CalculatePrimordialDensities(): PCE not supported!");
94 }
95
96
97 m_FluctuationsCalculated = false;
98 m_energydensitiesGCE.resize(0);
99
101
102 // Validate: multi-charmed particles not supported in this model
103 for (int j = 0; j < m_TPS->ComponentsNumber(); ++j) {
104 if (abs(m_TPS->Particles()[j].Charm()) > 1)
105 throw std::runtime_error("ThermalModelCanonicalCharm::CalculatePrimordialDensities(): Charm particles with absolute charge > 1 not supported! Use ThermalModelCanonical instead.");
106 }
107
108 m_Zsum.resize(m_CharmValues.size());
109
110 m_partialZ.resize(m_CharmValues.size());
111 vector<double> xi(1, 0.), yi(1, 0.);
112
113 for (size_t i = 0; i < m_CharmValues.size(); ++i) {
114 m_partialZ[i] = 0.;
115 for (int j = 0; j < m_TPS->ComponentsNumber(); ++j) {
116 if (m_CharmValues[i] == m_TPS->Particles()[j].Charm()) m_partialZ[i] += m_densitiesGCE[j] * m_Parameters.SVc;
117 }
118 if (m_partialZ[i] < 1.e-10) m_partialZ[i] += 1e-10;
119 }
120
121
122 for (int i = 0; i < 1; ++i) {
123 xi[i] = 2. * sqrt(m_partialZ[m_CharmMap[i + 1]] * m_partialZ[m_CharmMap[-(i + 1)]]);
124 yi[i] = sqrt(m_partialZ[m_CharmMap[i + 1]] / m_partialZ[m_CharmMap[-(i + 1)]]);
125 }
126
127 for (size_t i = 0; i < m_CharmValues.size(); ++i) {
128 double res = 0.;
129
130 res = xMath::BesselI(abs(-m_CharmValues[i]), xi[0]) * pow(yi[0], m_CharmValues[i]);
131 m_Zsum[i] = res;
132 }
133
134 for (int i = 0; i < m_TPS->ComponentsNumber(); ++i) {
135 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];
136 }
137
138 m_Calculated = true;
140 }
141
143 m_wprim.resize(m_densities.size());
144 m_wtot.resize(m_densities.size());
145 for (size_t i = 0; i < m_wprim.size(); ++i) {
146 m_wprim[i] = 1.;
147 m_wtot[i] = 1.;
148 m_skewprim[i] = 1.;
149 m_skewtot[i] = 1.;
150 }
151 }
152
154 if (!m_Calculated) CalculateDensities();
155 if (m_energydensitiesGCE.size() == 0) CalculateEnergyDensitiesGCE();
156 double ret = 0.;
157 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];
158 return ret;
159 }
160
162 double ret = m_partialZ[0] + log(m_Zsum[m_CharmMap[0]]);
163 if (m_energydensitiesGCE.size() == 0) CalculateEnergyDensitiesGCE();
164 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);
165 return ret;
166 }
167
168
170 double ret = 0.;
171 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];
172 return ret;
173 }
174
178
179} // namespace thermalfist
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 &params)
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 &params=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 &params)
The thermal parameters.
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 SetCharmChemicalPotential(double muC)
Override the base class method to always set to zero.
ThermalModelCanonicalCharm(ThermalParticleSystem *TPS, const ThermalModelParameters &params=ThermalModelParameters())
Construct a new ThermalModelCanonicalCharm object.
virtual void ChangeTPS(ThermalParticleSystem *TPS)
Change the particle list.
void CalculateFluctuations()
Dummy function. Fluctuations not yet supported.
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)
Definition xMath.cpp:192
The main namespace where all classes and functions of the Thermal-FIST library reside.
Definition CosmicEoS.h:9
Name
Set of all conserved charges considered.
Structure containing all thermal parameters of the model.
Contains some extra mathematical functions used in the code.