39 for (
int r = 0; r < model->TPS()->ComponentsNumber(); ++r) {
44 double mn1 = model->ScaledVariancePrimordial(r) * model->Densities()[r] / pow(model->
Parameters().
T, 3) / pow(
xMath::GeVtoifm(), 3);
46 double mn2 = 0., mn3 = 0.;
47 for (
int j = 0; j < model->TPS()->ComponentsNumber(); ++j) {
51 for (
size_t i = 0; i < decayDistributions.size(); ++i) {
52 njavr += decayDistributions[i].first * decayDistributions[i].second[j];
55 mn2 += ch1[j] * njavr;
56 mn3 += ch2[j] * njavr;
59 ret += mn1 * mn2 * mn3;
73int main(
int argc,
char *argv[])
75 int withMonteCarlo = 1;
77 withMonteCarlo = atoi(argv[1]);
81 nevents = atoi(argv[2]);
83 string listname = string(ThermalFIST_INPUT_FOLDER) +
"/list/PDG2014/list.dat";
124 vector<double> coefsk(parts.
Particles().size(), 0.);
125 coefsk[parts.
PdgToId(321)] = 1.;
126 coefsk[parts.
PdgToId(-321)] = -1.;
136 double musp = 0., muqp = 0., mucp = 0.;
139 printf(
"Analytic\n");
141 FILE *f = fopen(
"cpc4.analyt.dat",
"w");
143 fprintf(f,
"%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s\n",
159 vector<double> ens, Ts, muBs, muQs, muSs;
161 double logSmin = log(smin);
162 double logSmax = log(smax);
163 double dlogS = (logSmax - logSmin) / iterss;
164 for (
int is = 0; is <= iterss; ++is) {
165 double ss = exp(logSmin + is * dlogS);
167 double muB =
muBss(ss);
186 muQs.push_back(muqp);
187 muSs.push_back(musp);
192 double chi1B = model->CalculateBaryonDensity() / pow(T, 3) / pow(
xMath::GeVtoifm(), 3);
193 double chi1Q = model->CalculateChargeDensity() / pow(T, 3) / pow(
xMath::GeVtoifm(), 3);
194 double chi1S = model->CalculateStrangenessDensity() / pow(T, 3) / pow(
xMath::GeVtoifm(), 3);
214 printf(
"%15lf%15lf%15lf%15lf%15lf%15lf%15lf\n",
223 fprintf(f,
"%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf\n",
247 printf(
"%30s %lf s\n",
"Running time:", (wt2 - wt1));
248 printf(
"%30s %lf s\n",
"Time per single calculation:", (wt2 - wt1) / iters);
255 printf(
"Monte Carlo\n");
257 f = fopen(
"cpc4.montecarlo.dat",
"w");
259 fprintf(f,
"%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s\n",
279 for (
size_t ind = 0; ind < ens.size(); ind++) {
285 double mc_B = 0., mc_Q = 0., mc_S = 0., mc_p = 0., mc_k = 0.;
286 double mc_B2 = 0., mc_Q2 = 0., mc_S2 = 0., mc_BQ = 0., mc_QS = 0., mc_BS = 0.;
287 double mc_p2 = 0., mc_k2 = 0., mc_pk = 0., mc_pQ = 0., mc_Qk = 0.;
297 for (
int i = 0; i < nevents; ++i) {
299 int mcev_B = 0, mcev_Q = 0, mcev_S = 0, mcev_p = 0, mcev_k = 0;
301 for (
size_t part = 0; part < ev.
Particles.size(); ++part) {
302 long long pdgid = ev.
Particles[part].PDGID;
310 else if (pdgid == -2212)
315 else if (pdgid == -321)
319 mc_B += ev.
weight * mcev_B;
320 mc_Q += ev.
weight * mcev_Q;
321 mc_S += ev.
weight * mcev_S;
322 mc_p += ev.
weight * mcev_p;
323 mc_k += ev.
weight * mcev_k;
325 mc_B2 += ev.
weight * mcev_B * mcev_B;
326 mc_Q2 += ev.
weight * mcev_Q * mcev_Q;
327 mc_S2 += ev.
weight * mcev_S * mcev_S;
328 mc_p2 += ev.
weight * mcev_p * mcev_p;
329 mc_k2 += ev.
weight * mcev_k * mcev_k;
331 mc_BQ += ev.
weight * mcev_B * mcev_Q;
332 mc_QS += ev.
weight * mcev_Q * mcev_S;
333 mc_BS += ev.
weight * mcev_B * mcev_S;
334 mc_pQ += ev.
weight * mcev_p * mcev_Q;
335 mc_pk += ev.
weight * mcev_p * mcev_k;
336 mc_Qk += ev.
weight * mcev_Q * mcev_k;
341 double chi1B = mc_B / wsum;
342 double chi1Q = mc_Q / wsum;
343 double chi1S = mc_S / wsum;
345 double chi1p = mc_p / wsum;
346 double chi1k = mc_k / wsum;
348 double chi2B = mc_B2 / wsum - mc_B / wsum * mc_B / wsum;
349 double chi2Q = mc_Q2 / wsum - mc_Q / wsum * mc_Q / wsum;
350 double chi2S = mc_S2 / wsum - mc_S / wsum * mc_S / wsum;
351 double chi11BS = mc_BS / wsum - mc_B / wsum * mc_S / wsum;
352 double chi11QS = mc_QS / wsum - mc_Q / wsum * mc_S / wsum;
353 double chi11BQ = mc_BQ / wsum - mc_B / wsum * mc_Q / wsum;
355 double chi2p = mc_p2 / wsum - mc_p / wsum * mc_p / wsum;
356 double chi2k = mc_k2 / wsum - mc_k / wsum * mc_k / wsum;
357 double chi11pk = mc_pk / wsum - mc_p / wsum * mc_k / wsum;
358 double chi11Qk = mc_Qk / wsum - mc_Q / wsum * mc_k / wsum;
359 double chi11pQ = mc_pQ / wsum - mc_p / wsum * mc_Q / wsum;
361 printf(
"%15lf%15lf%15lf%15lf%15lf%15lf%15lf\n", ens[ind], chi11BS / chi2S, chi11QS / chi2S, chi11BQ / chi2B, chi11pk / chi2k, chi11Qk / chi2k, chi11pQ / chi2p);
364 fprintf(f,
"%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf\n",
386 printf(
"%30s %lf s\n",
"Running time:", (wt2 - wt1));
387 printf(
"%30s %lf s\n",
"Time per single calculation:", (wt2 - wt1) / iters);
Class containing all information about a particle specie.
int BaryonCharge() const
Particle's baryon number.
@ BWTwoGamma
Energy-independent Breit-Wigner in +-2\Gamma interval.
void SetStable(bool stable=true)
Sets particle stability flag.
int ElectricCharge() const
Particle's electric charge.
Class containing the particle list.
std::vector< std::pair< double, std::vector< int > > > ResonanceFinalStatesDistribution
int PdgToId(long long pdgid) const
Transforms PDG ID to a 0-based particle id number.
const std::vector< ThermalParticle > & Particles() const
Returns the vector of all particle species.
const ThermalParticle & ParticleByPDG(long long pdgid) const
ThermalParticle object corresponding to particle species with a provided PDG ID.