Thermal-FIST 1.5
Package for hadron resonance gas model applications
Loading...
Searching...
No Matches
ThermalModelBase.h
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 */
8#ifndef THERMALMODELBASE_H
9#define THERMALMODELBASE_H
10
11#include <string>
12
14#include "HRGBase/xMath.h"
15#include "HRGBase/Broyden.h"
16
17
18namespace thermalfist {
19
29 {
30 public:
36 GCE = 0,
37 CE = 1,
38 SCE = 2,
39 CCE = 3
40 };
41
54
62
63 virtual ~ThermalModelBase(void) { }
64
66 int ComponentsNumber() const { return static_cast<int>(m_densities.size()); }
67
79 virtual void FillVirial(const std::vector<double> & ri = std::vector<double>(0));
80
82 bool UseWidth() const { return m_UseWidth; }
83
92 void SetUseWidth(bool useWidth);
93
100
102
107 void SetNormBratio(bool normBratio);
108 bool NormBratio() const { return m_NormBratio; }
110
112 void SetOMP(bool openMP) { m_useOpenMP = openMP; }
113
115
120 virtual void SetParameters(const ThermalModelParameters& params);
121 const ThermalModelParameters& Parameters() const { return m_Parameters; }
123
128 void UpdateParameters() { SetParameters(m_Parameters); }
129
135 virtual void SetTemperature(double T);
136
142 virtual void SetBaryonChemicalPotential(double muB);
143
149 virtual void SetElectricChemicalPotential(double muQ);
150
156 virtual void SetStrangenessChemicalPotential(double muS);
157
163 virtual void SetCharmChemicalPotential(double muC);
164
170 virtual void SetGammaq(double gammaq);
171
177 virtual void SetGammaS(double gammaS);
178
184 virtual void SetGammaC(double gammaC);
185
191 virtual void SetBaryonCharge(int B);
192
198 virtual void SetElectricCharge(int Q);
199
205 virtual void SetStrangeness(int S);
206
212 virtual void SetCharm(int C);
213
219 virtual void SetRadius(double /*rad*/) { }
220
227 virtual void SetRadius(int /*i*/, double /*rad*/) { }
228
239 virtual void SetVirial(int /*i*/, int /*j*/, double /*b*/) { }
240
242 virtual void SetRepulsion(int i, int j, double b) { SetVirial(i,j,b); }
243
251 virtual void SetAttraction(int /*i*/, int /*j*/, double /*a*/) { }
252
254
256 virtual void DisableMesonMesonVirial();
259
262 virtual void DisableMesonMesonAttraction();
263
265
267 virtual void DisableMesonBaryonVirial();
270
273 virtual void DisableMesonBaryonAttraction();
274
276
278 virtual void DisableBaryonBaryonVirial();
281
284 virtual void DisableBaryonBaryonAttraction();
285
287
289 virtual void DisableBaryonAntiBaryonVirial();
292
296
304 virtual void ReadInteractionParameters(const std::string & /*filename*/) { }
305
313 virtual void WriteInteractionParameters(const std::string & /*filename*/) { }
314
320 virtual void ChangeTPS(ThermalParticleSystem *TPS);
321
323
333 virtual double VirialCoefficient(int /*i*/, int /*j*/) const { return 0.; }
334 double RepulsionCoefficient(int i, int j) const { return VirialCoefficient(i,j); }
336
344 virtual double AttractionCoefficient(int /*i*/, int /*j*/) const { return 0.; }
345
348 bool QuantumStatistics() const { return m_QuantumStats; }
349
352 virtual void SetStatistics(bool stats);
353
360 virtual void SetCalculationType(IdealGasFunctions::QStatsCalculationType type) { m_TPS->SetCalculationType(type); }
361
372 virtual void SetClusterExpansionOrder(int order) { m_TPS->SetClusterExpansionOrder(order); }
373
383 void SetResonanceWidthShape(ThermalParticle::ResonanceWidthShape shape) { m_TPS->SetResonanceWidthShape(shape); }
384
392 void SetResonanceWidthIntegrationType(ThermalParticle::ResonanceWidthIntegration type);// { m_TPS->SetResonanceWidthIntegrationType(type); }
393
401 virtual void FillChemicalPotentials();
402
411 virtual void SetChemicalPotentials(const std::vector<double> & chem = std::vector<double>(0));
412
418 const std::vector<double>& ChemicalPotentials() const { return m_Chem; }
419
426 double ChemicalPotential(int i) const;
427
435 virtual void SetChemicalPotential(int i, double chem);
436
445 virtual double FullIdealChemicalPotential(int i) const;
446
447
450 bool ConstrainMuB() const { return m_ConstrainMuB; }
451
454 void ConstrainMuB(bool constrain) { m_ConstrainMuB = constrain; }
455
458 bool ConstrainMuQ() const { return m_ConstrainMuQ; }
459
462 void ConstrainMuQ(bool constrain) { m_ConstrainMuQ = constrain; }
463
466 bool ConstrainMuS() const { return m_ConstrainMuS; }
467
470 void ConstrainMuS(bool constrain) { m_ConstrainMuS = constrain; }
471
474 bool ConstrainMuC() const { return m_ConstrainMuC; }
475
478 void ConstrainMuC(bool constrain) { m_ConstrainMuC = constrain; }
479
481 void UsePartialChemicalEquilibrium(bool usePCE) { m_PCE = usePCE; }
482
484 bool UsePartialChemicalEquilibrium() { return m_PCE; }
485
487
494 void SetSoverB(double SB) { m_SBgoal = SB; }
495 double SoverB() const { return m_SBgoal; }
497
499
506 void SetQoverB(double QB) { m_QBgoal = QB; }
507 double QoverB() const { return m_QBgoal; }
509
515 void SetVolume(double Volume) { m_Volume = Volume; m_Parameters.V = Volume; }
517 double Volume() const { return m_Parameters.V; }
518
527 void SetVolumeRadius(double R) { m_Volume = 4. / 3.*xMath::Pi() * R * R * R; m_Parameters.V = m_Volume; }
528
530 double CanonicalVolume() const { return m_Parameters.SVc; }
536
537 void SetCanonicalVolume(double Volume) { m_Parameters.SVc = Volume; }
538
547 void SetCanonicalVolumeRadius(double Rc) { m_Parameters.SVc = 4. / 3. * xMath::Pi() * Rc * Rc * Rc; }
548
549
550 //double StrangenessCanonicalVolume() const { return CanonicalVolume(); }
551 //void SetStrangenessCanonicalVolume(double Volume) { SetCanonicalVolume(Volume); }
552 //void SetStrangenessCanonicalVolumeRadius(double Radius) { SetCanonicalVolumeRadius(Radius); }
553
554 // Same as FixParameters but with a more clear name on what is actually does
570 void ConstrainChemicalPotentials(bool resetInitialValues = true);
571
572
578 virtual void FixParameters();
579
585 virtual void FixParametersNoReset();
586
614 virtual bool SolveChemicalPotentials(double totB = 0., double totQ = 0., double totS = 0., double totC = 0.,
615 double muBinit = 0., double muQinit = 0., double muSinit = 0., double muCinit = 0.,
616 bool ConstrMuB = true, bool ConstrMuQ = true, bool ConstrMuS = true, bool ConstrMuC = true);
617
644 virtual bool FixChemicalPotentialsThroughDensities(double rhoB = 0., double rhoQ = 0., double rhoS = 0., double rhoC = 0.,
645 double muBinit = 0., double muQinit = 0., double muSinit = 0., double muCinit = 0.,
646 bool ConstrMuB = true, bool ConstrMuQ = true, bool ConstrMuS = true, bool ConstrMuC = true);
647
654
660 virtual void CalculateDensities();
661
668 virtual void ValidateCalculation();
669
676 std::string ValidityCheckLog() const { return m_ValidityLog; }
677
684 virtual void CalculateDensitiesGCE() { CalculateDensities(); m_GCECalculated = true; }
685
693 virtual void CalculateFeeddown();
694
703 virtual void CalculateFluctuations();
704
709 virtual void CalculateTemperatureDerivatives();
710
721
740
746 virtual double TwoParticleSusceptibilityPrimordial(int i, int j) const;
747
753 virtual double TwoParticleSusceptibilityPrimordialByPdg(long long id1, long long id2);
754
760 virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordial(int i, int j) const;
761
767 virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordialByPdg(long long id1, long long id2);
768
774 virtual double NetParticleSusceptibilityPrimordialByPdg(long long id1, long long id2);
775
781 virtual double TwoParticleSusceptibilityFinal(int i, int j) const;
782
788 virtual double TwoParticleSusceptibilityFinalByPdg(long long id1, long long id2);
789
795 virtual double NetParticleSusceptibilityFinalByPdg(long long id1, long long id2);
796
802 virtual double PrimordialParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const;
803
810
817
818
824 virtual double FinalParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const;
825
831 virtual double FinalParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg);
832
838 virtual double FinalNetParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg);
839
840
851
867 virtual void CalculateSusceptibilityMatrix();
868
884
894
909 virtual std::vector<double> CalculateChargeFluctuations(const std::vector<double> &chgs, int order = 4);
910
928 virtual std::vector<double> CalculateGeneralizedSusceptibilities(const std::vector<std::vector<double>> &chgs);
929
930
931 //virtual double GetParticlePrimordialDensity(unsigned int);
932 //virtual double GetParticleTotalDensity(unsigned int);
933
934 // Equation of state etc.
935
937 double Pressure() { return CalculatePressure(); }
938
940 double EnergyDensity() { return CalculateEnergyDensity(); }
941
943 double EntropyDensity() { return CalculateEntropyDensity(); }
944
946 double HadronDensity() { return CalculateHadronDensity(); }
947
949 double BaryonDensity() { return CalculateBaryonDensity(); }
950
952 double ElectricChargeDensity() { return CalculateChargeDensity(); }
953
955 double StrangenessDensity() { return CalculateStrangenessDensity(); }
956
958 double CharmDensity() { return CalculateCharmDensity(); }
959
961 double AbsoluteBaryonDensity() { return CalculateAbsoluteBaryonDensity(); }
962
964 double AbsoluteElectricChargeDensity() { return CalculateAbsoluteChargeDensity(); }
965
967 double AbsoluteStrangenessDensity() { return CalculateAbsoluteStrangenessDensity(); }
968
970 double AbsoluteCharmDensity() { return CalculateAbsoluteCharmDensity(); }
971
973 double SpecificHeatChem() { return CalculateSpecificHeatChem(); }
974
988 double cs2(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true) {
989 return CalculateAdiabaticSpeedOfSoundSquared(rhoBconst, rhoQconst, rhoSconst, rhoCconst);
990 }
991
1005 double cT2(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true) {
1006 return CalculateIsothermalSpeedOfSoundSquared(rhoBconst, rhoQconst, rhoSconst, rhoCconst);
1007 }
1008
1016 double HeatCapacity(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true) {
1017 return CalculateHeatCapacity(rhoBconst, rhoQconst, rhoSconst, rhoCconst);
1018 }
1019
1021
1022 virtual double CalculatePressure() = 0;
1023 virtual double CalculateEnergyDensity() = 0;
1024 virtual double CalculateEntropyDensity() = 0;
1025 virtual double CalculateHadronDensity();
1026 virtual double CalculateBaryonDensity();
1027 virtual double CalculateChargeDensity();
1028 virtual double CalculateStrangenessDensity();
1029 virtual double CalculateCharmDensity();
1030 virtual double CalculateAbsoluteBaryonDensity();
1031 virtual double CalculateAbsoluteChargeDensity();
1032 virtual double CalculateAbsoluteStrangenessDensity();
1033 virtual double CalculateAbsoluteCharmDensity();
1034 virtual double CalculateAbsoluteStrangenessDensityModulo();
1035 virtual double CalculateAbsoluteCharmDensityModulo();
1036 virtual double CalculateEnergyDensityDerivativeT() = 0;
1037 virtual double CalculateSpecificHeatChem();
1038 virtual double CalculateAdiabaticSpeedOfSoundSquared(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true);
1039 virtual double CalculateIsothermalSpeedOfSoundSquared(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true);
1040 virtual double CalculateHeatCapacity(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true);
1042
1044 virtual double CalculateArbitraryChargeDensity();
1045
1047 virtual double CalculateBaryonMatterEntropyDensity() { return 0.; }
1048
1050 virtual double CalculateMesonMatterEntropyDensity() { return 0.; }
1051
1053 virtual double ParticleScaledVariance(int) { return 1.; }
1054
1056 virtual double ParticleSkewness(int) { return 1.; }
1057
1059 virtual double ParticleKurtosis(int) { return 1.; }
1060
1063 virtual double CalculateEigenvolumeFraction() { return 0.; }
1064
1066 virtual double ParticleScalarDensity(int i) = 0;
1067
1068 virtual double GetMaxDiff() const { return m_MaxDiff; }
1069
1073 virtual bool IsLastSolutionOK() const { return m_LastCalculationSuccessFlag; }
1074
1079 double GetdndT(int i) const;
1080
1086 double GetDensity(long long PDGID, int feeddown) { return GetDensity(PDGID, static_cast<Feeddown::Type>(feeddown)); }
1087
1096 double GetDensity(long long PDGID, Feeddown::Type feeddown);
1097
1106 double GetYield(long long PDGID, Feeddown::Type feeddown) { return GetDensity(PDGID, feeddown) * Volume(); }
1107
1108 std::vector<double> GetIdealGasDensities() const;
1109
1112 ThermalParticleSystem* TPS() { return m_TPS; }
1113
1118 const std::vector<double>& Densities() const { return m_densities; }
1119 std::vector<double>& Densities() { return m_densities; }
1120
1127 const std::vector<double>& TotalDensities() const { return m_densitiestotal; }
1128
1132 const std::vector< std::vector<double> >& AllDensities() const { return m_densitiesbyfeeddown; }
1133
1139 void SetTAG(const std::string & tag) { m_TAG = tag; }
1140
1142 const std::string& TAG() const { return m_TAG; }
1143
1145 int PdgToId(long long pdgid) const { return m_TPS->PdgToId(pdgid); }
1146
1148 void ResetCalculatedFlags();
1149
1152 bool IsCalculated() const { return m_Calculated; }
1153
1156 bool IsFluctuationsCalculated() const { return m_FluctuationsCalculated; }
1157
1160 bool IsSusceptibilitiesCalculated() const { return m_SusceptibilitiesCalculated; }
1161
1164 bool IsTemperatureDerivativesCalculated() const { return m_TemperatureDerivativesCalculated; }
1165
1168 bool IsGCECalculated() const { return m_GCECalculated; }
1169
1177 double ScaledVariancePrimordial(int id) const { return (id >= 0 && id < static_cast<int>(m_wprim.size())) ? m_wprim[id] : 1.; }
1178
1189 double ScaledVarianceTotal(int id) const { return (id >= 0 && id < static_cast<int>(m_wtot.size())) ? m_wtot[id] : 1.; }
1190
1198 double SkewnessPrimordial(int id) const { return (id >= 0 && id < static_cast<int>(m_skewprim.size())) ? m_skewprim[id] : 1.; }
1199
1210 double SkewnessTotal(int id) const { return (id >= 0 && id < static_cast<int>(m_skewtot.size())) ? m_skewtot[id] : 1.; }
1211
1219 double KurtosisPrimordial(int id) const { return (id >= 0 && id < static_cast<int>(m_kurtprim.size())) ? m_kurtprim[id] : 1.; }
1220
1231 double KurtosisTotal(int id) const { return (id >= 0 && id < static_cast<int>(m_kurttot.size())) ? m_kurttot[id] : 1.; }
1232
1241 double ConservedChargeDensity(ConservedCharge::Name chg);
1242
1251 double ConservedChargeDensitydT(ConservedCharge::Name chg);
1252
1262 double Susc(ConservedCharge::Name i, ConservedCharge::Name j) const;// { return m_Susc[i][j]; }
1263
1273 double dSuscdT(ConservedCharge::Name i, ConservedCharge::Name j) const;
1274
1290 double ProxySusc(ConservedCharge::Name i, ConservedCharge::Name j) const;// { return m_ProxySusc[i][j]; }
1291
1302 double ChargedMultiplicity(int type = 0);
1303
1314 double ChargedScaledVariance(int type = 0);
1315
1323 double ChargedMultiplicityFinal(int type = 0);
1324
1332 double ChargedScaledVarianceFinal(int type = 0);
1333
1339 ThermalModelEnsemble Ensemble() { return m_Ensemble; }
1340
1341
1345 virtual bool IsConservedChargeCanonical(ConservedCharge::Name charge) const { return 0; }
1346
1352 ThermalModelInteraction InteractionModel() { return m_InteractionModel; }
1353
1354
1358 void SetDensityModelForParticleSpecies(int i, GeneralizedDensity* density_model = NULL);
1359
1363 void SetDensityModelForParticleSpeciesByPdg(long long PDGID, GeneralizedDensity* density_model = NULL);
1364
1368 void ClearDensityModels();
1369
1370 const IdealGasFunctions::IdealGasFunctionsExtraConfig& GetIdealGasFunctionsExtraConfig() const { return m_IGFExtraConfig; }
1371
1372
1380 void SetMagneticField(double B = 0.0, int lmax = -1);
1386 void RecomputeThresholdsDueToMagneticField();
1387
1394 std::vector<double> PartialPressures();
1395
1397 void ClearMagneticField();
1398
1399 protected:
1400 ThermalModelParameters m_Parameters;
1401 ThermalParticleSystem* m_TPS;
1402
1404 IdealGasFunctions::IdealGasFunctionsExtraConfig m_IGFExtraConfig;
1405
1406 bool m_LastCalculationSuccessFlag;
1407 double m_MaxDiff;
1408
1409 bool m_Calculated;
1410 bool m_FeeddownCalculated;
1411 bool m_FluctuationsCalculated;
1412 bool m_SusceptibilitiesCalculated;
1413 bool m_GCECalculated;
1414 bool m_UseWidth;
1415 bool m_NormBratio;
1416 bool m_QuantumStats;
1417 double m_QBgoal;
1418 double m_SBgoal;
1419 double m_Volume;
1420
1421 bool m_ConstrainMuB;
1422 bool m_ConstrainMuQ;
1423 bool m_ConstrainMuS;
1424 bool m_ConstrainMuC;
1425
1426 bool m_PCE;
1427
1428 bool m_useOpenMP;
1429
1430 std::vector<double> m_densities;
1431 std::vector<double> m_densitiestotal;
1432 //std::vector<double> m_densitiestotalweak;
1433 std::vector< std::vector<double> > m_densitiesbyfeeddown;
1434 std::vector<double> m_Chem;
1435
1436 // Scaled variance
1437 std::vector<double> m_wprim;
1438 std::vector<double> m_wtot;
1439
1440 // Skewness
1441 std::vector<double> m_skewprim;
1442 std::vector<double> m_skewtot;
1443
1444 // Kurtosis
1445 std::vector<double> m_kurtprim;
1446 std::vector<double> m_kurttot;
1447
1448 // 2nd order correlations of primordial and total numbers
1449 std::vector< std::vector<double> > m_PrimCorrel;
1450 std::vector< std::vector<double> > m_TotalCorrel;
1451
1452 // Shifted chemical potential derivatives
1453 std::vector< std::vector<double> > m_dmusdmu;
1454
1455
1456 // Particle number-conserved charge correlators
1457 std::vector< std::vector<double> > m_PrimChargesCorrel;
1458 std::vector< std::vector<double> > m_FinalChargesCorrel;
1459
1460 // Conserved charges susceptibility matrix
1461 std::vector< std::vector<double> > m_Susc;
1462
1463 // Temperature derivative of the conserved charges susceptibility matrix (GeV^-1)
1464 std::vector< std::vector<double> > m_dSuscdT;
1465
1466 // Susceptibility matrix of net-p, net-Q, and net-K
1467 std::vector< std::vector<double> > m_ProxySusc;
1468
1469 // Temperature derivatives
1470 bool m_TemperatureDerivativesCalculated;
1471 // Densities
1472 std::vector<double> m_dndT;
1473 // (Shifted) chemical potentials
1474 std::vector<double> m_dmusdT;
1475 // Primordial mixed susceptibilities
1476 std::vector< std::vector<double> > m_PrimChi2sdT; // GeV^-1
1477
1478 // Cumulants of arbitrary charge calculation
1479 //std::vector< std::vector<double> > m_chi;
1480
1481 // Contains log of possible errors when checking the calculation
1482 std::string m_ValidityLog;
1483
1484 double m_wnSum;
1485
1486 std::string m_TAG;
1487
1488 ThermalModelEnsemble m_Ensemble;
1489 ThermalModelInteraction m_InteractionModel;
1490
1492 virtual double MuShift(int /*id*/) const { return 0.; }
1493
1494
1495 private:
1496 void ResetChemicalPotentials();
1497
1498 double GetDensity(long long PDGID, const std::vector<double> *dens);
1499
1500 class BroydenEquationsChem : public BroydenEquations
1501 {
1502 public:
1503 BroydenEquationsChem(ThermalModelBase *model) : BroydenEquations(), m_THM(model) { m_N = 2; }
1504 std::vector<double> Equations(const std::vector<double> &x);
1505 private:
1506 ThermalModelBase *m_THM;
1507 };
1508
1509 class BroydenJacobianChem : public BroydenJacobian
1510 {
1511 public:
1512 BroydenJacobianChem(ThermalModelBase *model) : BroydenJacobian(), m_THM(model) { }
1513 std::vector<double> Jacobian(const std::vector<double> &x);
1514 private:
1515 ThermalModelBase *m_THM;
1516 };
1517
1518 class BroydenChem : public Broyden
1519 {
1520 public:
1521 BroydenChem(ThermalModelBase *THM, BroydenEquations *eqs = NULL, BroydenJacobian *jaco = NULL) : Broyden(eqs, jaco) { m_THM = THM; }
1522 ~BroydenChem(void) { }
1523 std::vector<double> Solve(const std::vector<double> &x0, BroydenSolutionCriterium *solcrit = NULL, int max_iterations = MAX_ITERS);
1524 private:
1525 ThermalModelBase *m_THM;
1526 };
1527
1528
1529 class BroydenEquationsChemTotals : public BroydenEquations
1530 {
1531 public:
1532 BroydenEquationsChemTotals(const std::vector<int> & vConstr, const std::vector<int> & vType, const std::vector<double> & vTotals, ThermalModelBase *model);// : BroydenEquations(), m_THM(model) { m_N = 3; }
1533 std::vector<double> Equations(const std::vector<double> &x);
1534 private:
1535 std::vector<int> m_Constr;
1536 std::vector<int> m_Type;
1537 std::vector<double> m_Totals;
1538 ThermalModelBase *m_THM;
1539 };
1540
1541 class BroydenJacobianChemTotals : public BroydenJacobian
1542 {
1543 public:
1544 BroydenJacobianChemTotals(const std::vector<int> & vConstr, const std::vector<int> & vType, const std::vector<double> & vTotals, ThermalModelBase *model) : BroydenJacobian(), m_Constr(vConstr), m_Type(vType), m_Totals(vTotals), m_THM(model) { }
1545 std::vector<double> Jacobian(const std::vector<double> &x);
1546 private:
1547 std::vector<int> m_Constr;
1548 std::vector<int> m_Type;
1549 std::vector<double> m_Totals;
1550 ThermalModelBase *m_THM;
1551 };
1552 };
1553
1554} // namespace thermalfist
1555
1556#endif // THERMALMODELBASE_H
Implementation of the generic Broyden's method routines.
map< string, double > params
virtual void CalculateSusceptibilityMatrix()
Calculates the conserved charges susceptibility matrix.
virtual double FullIdealChemicalPotential(int i) const
Chemical potential entering the ideal gas expressions of particle species i.
virtual void FixParametersNoReset()
Method which actually implements ConstrainChemicalPotentialsNoReset() (for backward compatibility).
void SetSoverB(double SB)
The entropy per baryon ratio to be used to constrain the baryon chemical potential.
virtual void CalculateDensitiesGCE()
Calculates the particle densities in a grand-canonical ensemble.
virtual void ChangeTPS(ThermalParticleSystem *TPS)
Change the particle list.
virtual void SetGammaC(double gammaC)
Set the charm quark fugacity factor.
virtual void CalculateParticleChargeCorrelationMatrix()
Calculates the matrix of correlators between primordial (and also final) particle numbers and conserv...
virtual void SetTemperature(double T)
Set the temperature.
virtual void CalculateFluctuations()
Computes the fluctuation observables.
bool UsePartialChemicalEquilibrium()
Whether partial chemical equilibrium with additional chemical potentials is used.
void SetQoverB(double QB)
The electric-to-baryon charge ratio to be used to constrain the electric chemical potential.
virtual void SetRepulsion(int i, int j, double b)
Same as SetVirial() but with a more clear name on what is actually does.
virtual bool SolveChemicalPotentials(double totB=0., double totQ=0., double totS=0., double totC=0., double muBinit=0., double muQinit=0., double muSinit=0., double muCinit=0., bool ConstrMuB=true, bool ConstrMuQ=true, bool ConstrMuS=true, bool ConstrMuC=true)
The procedure which calculates the chemical potentials which reproduce the specified total baryon,...
virtual double TwoParticleSusceptibilityPrimordialByPdg(long long id1, long long id2)
Returns the computed primordial particle number (cross-)susceptibility for particles with pdg codes ...
void SetCanonicalVolumeRadius(double Rc)
Set the canonical correlation system radius.
double RepulsionCoefficient(int i, int j) const
void ConstrainMuB(bool constrain)
virtual void SetVirial(int, int, double)
Set the excluded volume coefficient .
virtual void FillChemicalPotentials()
Sets the chemical potentials of all particles.
virtual void CalculateTemperatureDerivatives()
Computes the temperature derivatives of densities, shifted chemical potentials, and primordial hadron...
virtual void WriteInteractionParameters(const std::string &)
Write the QvdW interaction parameters to a file.
void ConstrainMuC(bool constrain)
void ConstrainChemicalPotentials(bool resetInitialValues=true)
Constrains the chemical potentials by the conservation laws imposed.
virtual void FixParameters()
Method which actually implements ConstrainChemicalPotentials() (for backward compatibility).
virtual double TwoParticleSusceptibilityFinalByPdg(long long id1, long long id2)
Returns the computed final particle number (cross-)susceptibility for particles with pdg codes id1 a...
virtual double TwoParticleSusceptibilityFinal(int i, int j) const
Returns the computed final particle number (cross-)susceptibility for particles with ids i and j....
virtual void SetGammaS(double gammaS)
Set the strange quark fugacity factor.
virtual void SetCharm(int C)
Set the total charm (for canonical ensemble only)
ThermalModelInteraction
Type of interactions included in the HRG model.
@ QvdW
Quantum van der Waals model.
@ MeanField
Mean field model. Not yet fully implemented.
@ DiagonalEV
Diagonal excluded volume model.
@ CrosstermsEV
Crossterms excluded volume model.
virtual double FinalNetParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed final (after decays) net particle vs conserved charge (cross-)susceptibility fo...
void ConstrainMuQ(bool constrain)
void SetResonanceWidthIntegrationType(ThermalParticle::ResonanceWidthIntegration type)
Set the ThermalParticle::ResonanceWidthIntegration scheme for all particles. Calls the corresponding ...
virtual void CalculateFeeddown()
Calculates the total densities which include feeddown contributions.
virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordial(int i, int j) const
Returns the computed temperature derivative of the primordial particle number (cross-)susceptibility ...
virtual void ReadInteractionParameters(const std::string &)
Reads the QvdW interaction parameters from a file.
void SetUseWidth(bool useWidth)
Sets whether finite resonance widths are used. Deprecated.
virtual double AttractionCoefficient(int, int) const
QvdW mean field attraction coefficient .
virtual double FinalParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed final (after decays) particle vs conserved charge (cross-)susceptibility for pa...
virtual void DisableBaryonAntiBaryonAttraction()
void UsePartialChemicalEquilibrium(bool usePCE)
Sets whether partial chemical equilibrium with additional chemical potentials is used.
virtual double FinalParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const
Returns the computed final (after decays) particle vs conserved charge (cross-)susceptibility for pa...
virtual void SetChemicalPotentials(const std::vector< double > &chem=std::vector< double >(0))
Sets the chemical potentials of all particles.
void SetOMP(bool openMP)
OpenMP support. Currently not used.
double ChemicalPotential(int i) const
Chemical potential of particle species i.
virtual void SetElectricCharge(int Q)
Set the total electric charge (for canonical ensemble only)
virtual std::vector< double > CalculateChargeFluctuations(const std::vector< double > &chgs, int order=4)
Calculates fluctuations (diagonal susceptibilities) of an arbitrary "conserved" charge.
virtual void SetBaryonChemicalPotential(double muB)
Set the baryon chemical potential.
virtual void CalculateTwoParticleCorrelations()
Computes the fluctuations and correlations of the primordial particle numbers.
virtual double SusceptibilityDimensionfull(ConservedCharge::Name i, ConservedCharge::Name j) const
A 2nd order susceptibility of conserved charges.
void SetNormBratio(bool normBratio)
Whether branching ratios are renormalized to 100%.
void UpdateParameters()
Calls SetParameters() with current m_Parameters.
virtual void SetParameters(const ThermalModelParameters &params)
The thermal parameters.
virtual void SetRadius(double)
Set the same excluded volume radius parameter for all species.
virtual void SetElectricChemicalPotential(double muQ)
Set the electric chemical potential.
virtual double PrimordialNetParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed primordial net particle vs conserved charge (cross-)susceptibility for particle...
virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordialByPdg(long long id1, long long id2)
Returns the computed temperature derivative of the primordial particle number (cross-)susceptibility ...
virtual double NetParticleSusceptibilityFinalByPdg(long long id1, long long id2)
Returns the computed (cross-)susceptibility between final net-particle numbers for pdg codes id1 and...
virtual void SetChemicalPotential(int i, double chem)
Sets the chemical potential of particle species i.
std::string ValidityCheckLog() const
All messaged which occured during the validation procedure in the ValidateCalculation() method.
virtual bool FixChemicalPotentialsThroughDensities(double rhoB=0., double rhoQ=0., double rhoS=0., double rhoC=0., double muBinit=0., double muQinit=0., double muSinit=0., double muCinit=0., bool ConstrMuB=true, bool ConstrMuQ=true, bool ConstrMuS=true, bool ConstrMuC=true)
The procedure which calculates the chemical potentials which reproduce the specified baryon,...
void SetVolume(double Volume)
Sets the system volume.
virtual void ValidateCalculation()
Checks whether issues have occured during the calculation of particle densities in the CalculateDensi...
void SetResonanceWidthShape(ThermalParticle::ResonanceWidthShape shape)
Set the ThermalParticle::ResonanceWidthShape for all particles. Calls the corresponding method in TPS...
int ComponentsNumber() const
Number of different particle species in the list.
virtual void SetBaryonCharge(int B)
Set the total baryon number (for canonical ensemble only)
virtual double VirialCoefficient(int, int) const
Excluded volume coefficient .
virtual void CalculateProxySusceptibilityMatrix()
Calculates the susceptibility matrix of conserved charges proxies.
ThermalModelBase(ThermalParticleSystem *TPS, const ThermalModelParameters &params=ThermalModelParameters())
Construct a new ThermalModelBase object.
virtual double PrimordialParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const
Returns the computed primordial particle vs conserved charge (cross-)susceptibility for particle wit...
virtual void CalculatePrimordialDensities()=0
Calculates the primordial densities of all species.
void SetCanonicalVolume(double Volume)
Set the canonical correlation volume V .
virtual void SetStrangenessChemicalPotential(double muS)
Set the strangeness chemical potential.
bool UseWidth() const
Whether finite resonance widths are considered.
void ConstrainMuS(bool constrain)
virtual double TwoParticleSusceptibilityPrimordial(int i, int j) const
Returns the computed primordial particle number (cross-)susceptibility for particles with ids i and ...
virtual void SetClusterExpansionOrder(int order)
Set the number of terms in the cluster expansion method. Calls the corresponding method in TPS().
virtual void CalculateDensities()
Calculates the primordial and total (after decays) densities of all species.
virtual void SetCalculationType(IdealGasFunctions::QStatsCalculationType type)
Sets the CalculationType() method to evaluate quantum statistics. Calls the corresponding method in T...
virtual void FillVirial(const std::vector< double > &ri=std::vector< double >(0))
Fills the excluded volume coefficients based on the provided radii parameters for all species.
const std::vector< double > & ChemicalPotentials() const
A vector of chemical potentials of all particles.
virtual void SetGammaq(double gammaq)
Set the light quark fugacity factor.
virtual void SetStrangeness(int S)
Set the total strangeness (for canonical ensemble only)
virtual void SetAttraction(int, int, double)
Set the vdW mean field attraction coefficient .
virtual double PrimordialParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed primordial particle vs conserved charge (cross-)susceptibility for particle wit...
const ThermalModelParameters & Parameters() const
virtual double NetParticleSusceptibilityPrimordialByPdg(long long id1, long long id2)
Returns the computed (cross-)susceptibility between primordial net-particle numbers for pdg codes id...
virtual void SetCharmChemicalPotential(double muC)
Set the charm chemical potential.
virtual void SetStatistics(bool stats)
double Volume() const
System volume (fm )
virtual void SetRadius(int, double)
Set the radius parameter for particle species i.
ThermalModelEnsemble
The list of statistical ensembles.
@ SCE
Strangeness-canonical ensemble.
@ GCE
Grand canonical ensemble.
@ CCE
Charm-canonical ensemble.
virtual void CalculateTwoParticleFluctuationsDecays()
Computes particle number correlations and fluctuations for all final-state particles which are marked...
double CanonicalVolume() const
The canonical correlation volume V (fm )
void SetVolumeRadius(double R)
Sets the system radius.
ResonanceWidthIntegration
Treatment of finite resonance widths.
ResonanceWidthShape
Relativistic vs non-relativistic Breit-Wigner shape.
Class containing the particle list.
QStatsCalculationType
Identifies whether quantum statistics are to be computed using the cluster expansion or numerical int...
constexpr double Pi()
Pi constant.
Definition xMath.h:23
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.