Thermal-FIST 1.6
Package for hadron resonance gas model applications
Loading...
Searching...
No Matches
ThermalParticleSystem.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 THERMALPARTICLESYSTEM_H
9#define THERMALPARTICLESYSTEM_H
10
11#include <map>
12#include <vector>
13#include <set>
14#include <fstream>
15
17
18namespace thermalfist {
19
30 {
31 public:
32
42 ThermalParticleSystem(const std::string& InputFile = "", bool GenAntiP = true, double mcut = -1.) { Initialize(InputFile, std::string(""), GenAntiP, mcut); }
43
54 ThermalParticleSystem(const std::string& InputFile, const std::string& DecayFile, bool GenAntiP = true, double mcut = -1.) { Initialize(InputFile, DecayFile, GenAntiP, mcut); }
55
56
78 const std::vector<std::string>& ListFiles,
79 const std::vector<std::string>& DecayFiles = std::vector<std::string>(0),
80 const std::set<std::string>& flags = std::set<std::string>(),
81 double mcut = -1.);
82
88
97
103 void ProcessDecays();
104
115 void FillDecayProperties();
116
121 void FillDecayThresholds();
122
130 void FillResonanceDecays();
131
138
139
143 typedef std::pair<double, int> SingleDecayContribution;
144
146 typedef std::vector<SingleDecayContribution> DecayContributionsToParticle;
147
150 typedef std::vector<DecayContributionsToParticle> DecayContributionsToAllParticles;
151
155 typedef std::pair< std::vector<double>, int> SingleDecayCumulantsContribution;
156
158 typedef std::vector<SingleDecayCumulantsContribution> DecayCumulantsContributionsToParticle;
159
162 typedef std::vector<DecayCumulantsContributionsToParticle> DecayCumulantsContributionsToAllParticles;
163
169 typedef std::pair< std::vector<double>, int> SingleDecayProbabilityDistribution;
170
172 typedef std::vector<SingleDecayProbabilityDistribution> DecayProbabilityDistributionsToParticle;
173
176 typedef std::vector<DecayProbabilityDistributionsToParticle> DecayProbabilityDistributionsToAllParticles;
177
183 typedef std::vector< std::pair<double, std::vector<int> > > ResonanceFinalStatesDistribution;
184
191 const std::vector<DecayContributionsToAllParticles>& DecayContributionsByFeeddown() const { return m_DecayContributionsByFeeddown; }
192
201 const DecayCumulantsContributionsToAllParticles& DecayCumulants() const { return m_DecayCumulants; }
202
209 const std::vector<ResonanceFinalStatesDistribution>& ResonanceFinalStatesDistributions() const { return m_ResonanceFinalStatesDistributions; }
210
222 void LoadList(const std::vector<std::string>& ListFiles,
223 const std::vector<std::string>& DecayFiles = std::vector<std::string>(0),
224 const std::set<std::string>& flags = std::set<std::string>(),
225 double mcut = 1.e9);
226
238 void LoadList(const std::string& InputFile, const std::string& DecayFile, bool GenerateAntiParticles = true, double mcut = 1.e9);
239
252 void LoadList(const std::string& InputFile = "", bool GenerateAntiParticles = true, double mcut = -1.) { LoadList(InputFile, std::string(""), GenerateAntiParticles, mcut); }
253
254 void AddParticlesToListFromFile(const std::string& InputFile = "", const std::set<std::string>& flags = std::set<std::string>(), double mcut = -1.);
255
256
262 void LoadTable(const std::string& InputFile = "", bool GenerateAntiParticles = true, double mcut = -1.) { LoadList(InputFile, GenerateAntiParticles, mcut); }
263
271 void SetTableFromVector(const std::vector<ThermalParticle> &part_in, bool GenerateAntiParticles = true);
272
282 void WriteTableToFile(const std::string& OutputFile = "", bool WriteAntiParticles = false);
283
291 void LoadDecays(const std::vector<std::string>& DecayFiles, const std::set<std::string>& flags = std::set<std::string>());
292
300 void LoadDecays(const std::string& DecaysFile = "", bool GenerateAntiParticles = true);
301
308 void WriteDecaysToFile(const std::string& OutputFile = "", bool WriteAntiParticles = false);
309
316
322
324
330 IdealGasFunctions::QStatsCalculationType QStatsCalculationType() const { return m_QStatsCalculationType; }
332
342 void SetClusterExpansionOrder(int order);
343
345
354 ThermalParticle::ResonanceWidthShape ResonanceWidthShape() const { return m_ResonanceWidthShape; }
356
358
365 ThermalParticle::ResonanceWidthIntegration ResonanceWidthIntegrationType() const { return m_ResonanceWidthIntegrationType; }
367
369
378 void SetMaxDecayDistributionsSize(int maxsize) { m_MaxDecayDistributionsSize = maxsize; }
379 int MaxDecayDistributionsSize() const { return m_MaxDecayDistributionsSize; }
381
392 std::string GetNameFromPDG(long long pdgid);
393
396 bool hasBaryons() const { return (m_NumBaryons > 0); }
397
400 bool hasCharged() const { return (m_NumCharged > 0); }
401
404 bool hasStrange() const { return (m_NumStrange > 0); }
405
408 bool hasCharmed() const { return (m_NumCharmed > 0); }
409
412 bool hasMultiBaryons() const { return (m_MaxAbsBaryonNumber > 1); }
413
415 int ComponentsNumber() const { return static_cast<int>(m_Particles.size()); }
416
422 const std::vector<ThermalParticle>& Particles() const { return m_Particles; }
423 std::vector<ThermalParticle>& Particles() { return m_Particles; }
424
426
433 const ThermalParticle& Particle(int id) const;
434 ThermalParticle& Particle(int id);
436
447 const ThermalParticle& ParticleByPDG(long long pdgid) const;
448 ThermalParticle& ParticleByPDG(long long pdgid);
449
458 int PdgToId(long long pdgid) const;// { return (m_PDGtoID.count(pdgid) > 0) ? m_PDGtoID[pdgid] : -1; }
459
468 long long IdToPdg(int id) const { return (id >= 0 && id < static_cast<int>(m_Particles.size())) ? m_Particles[id].PdgId() : 0; }
469
477 void AddParticle(const ThermalParticle & part);
478
485 void RemoveParticleAt(int ind);
486
490 bool CheckDecayChargesConservation(int ind) const;
491
496
500 bool CheckAbsoluteQuarkNumbers() const;
501
507 std::vector<int> CheckDecayChargesConservationVector(int ind) const;
508
509 bool operator==(const ThermalParticleSystem &rhs) const;
510 bool operator!=(const ThermalParticleSystem &rhs) const { return !(*this == rhs); }
511
514 void FillPdgMap();
515
522
525 void SetSortMode(SortModeType type) { m_SortMode = type; FinalizeList(); ProcessDecays(); }
526
528 SortModeType SortMode() const { return m_SortMode; }
529
534 void FinalizeList();
535
551
552 static const std::string flag_no_antiparticles;
553 static const std::string flag_nostrangeness;
554 static const std::string flag_nocharm;
555 static const std::string flag_nonuclei;
556 static const std::string flag_noexcitednuclei;
557
563 std::vector<double> GetConservedChargesVector(ConservedCharge::Name charge);
564
565 private:
566 void GoResonance(int ind, int startind, double BR);
567
568 void GoResonanceByFeeddown(int ind, int startind, double BR, Feeddown::Type feeddown);
569
570 std::vector<double> GoResonanceDecayProbs(int ind, int goalind, bool firstdecay = false);
571
572 std::vector<double> GoResonanceDecayProbsCharge(int ind, int nch, bool firstdecay = false);
573
574 ResonanceFinalStatesDistribution GoResonanceDecayDistributions(int ind, bool firstdecay = false);
575
576 bool AcceptParticle(const ThermalParticle& part, const std::set<std::string>& flags, double mcut = -1.) const;
577
578 void LoadTable_OldFormat(std::ifstream& fin, const std::set<std::string>& flags = std::set<std::string>(), double mcut = 1.e9);
579
580 void LoadTable_NewFormat(std::ifstream& fin, const std::set<std::string>& flags = std::set<std::string>(), double mcut = 1.e9);
581
582 void ReadDecays_OldFormat(std::ifstream &fin);
583
584 void ReadDecays_NewFormat(std::ifstream &fin);
585
586 void Initialize(const std::vector<std::string>& ListFiles,
587 const std::vector<std::string>& DecayFiles = std::vector<std::string>(0),
588 const std::set<std::string>& flags = std::set<std::string>(),
589 double mcut = -1.);
590
591 void Initialize(const std::string& InputFile = "", const std::string& DecayFile = "", bool GenAntiP = true, double mcut = -1.);
592
593 void FinalizeListLoad();
594
595 void FinalizeDecaysLoad();
596
598 bool CheckListIsiSS(const std::string &filename);
599
601 void LoadListiSS(const std::string& filename, const std::set<std::string>& flags = std::set<std::string>(), double mcut = 1.e9);
602
603 private:
604 std::vector<ThermalParticle> m_Particles;
605 std::map<long long, int> m_PDGtoID;
606 int m_NumBaryons;
607 int m_NumCharged;
608 int m_NumStrange;
609 int m_NumCharmed;
610 int m_MaxAbsBaryonNumber;
611
612 int m_NumberOfParticles;
613
614 ThermalParticle::ResonanceWidthIntegration m_ResonanceWidthIntegrationType;
615
616 ThermalParticle::ResonanceWidthShape m_ResonanceWidthShape;
617
618 IdealGasFunctions::QStatsCalculationType m_QStatsCalculationType;
619
620 std::vector<DecayContributionsToAllParticles> m_DecayContributionsByFeeddown;
621
623
625
626 std::vector<ResonanceFinalStatesDistribution> m_ResonanceFinalStatesDistributions;
627
628 // Map for DP-based calculations of decay distributions
629 std::vector<ResonanceFinalStatesDistribution> m_DecayDistributionsMap;
630
631 SortModeType m_SortMode;
632
633 int m_MaxDecayDistributionsSize;
634 };
635
637 namespace CuteHRGHelper {
638 std::vector<std::string> split(const std::string &s, char delim);
639 void cutDecayDistributionsVector(std::vector<std::pair<double, std::vector<int> > > &vect, int maxsize = 2000);
640 }
641
643 namespace DecayLifetimes {
644 // In units of ctau (fm)
645 double GetLifetime(long long pdg);
646 }
647
648} // namespace thermalfist
649
650#endif
Class containing all information about a particle specie.
std::vector< ParticleDecayChannel > ParticleDecaysVector
Vector of all decay channels of a particle.
ResonanceWidthIntegration
Treatment of finite resonance widths.
ResonanceWidthShape
Relativistic vs non-relativistic Breit-Wigner shape.
Class containing the particle list.
void SetResonanceWidthIntegrationType(ThermalParticle::ResonanceWidthIntegration type)
Set (or get) the ThermalParticle::ResonanceWidthIntegration scheme for all particles.
void SetTableFromVector(const std::vector< ThermalParticle > &part_in, bool GenerateAntiParticles=true)
Sets the particle list from a provided vector of ThermalParticle objects.
IdealGasFunctions::QStatsCalculationType QStatsCalculationType() const
const DecayCumulantsContributionsToAllParticles & DecayCumulants() const
Cumulants of particle number distributions of from decays.
void LoadTable(const std::string &InputFile="", bool GenerateAntiParticles=true, double mcut=-1.)
Same as LoadList()
const std::vector< DecayContributionsToAllParticles > & DecayContributionsByFeeddown() const
std::vector< DecayProbabilityDistributionsToParticle > DecayProbabilityDistributionsToAllParticles
ThermalParticle::ResonanceWidthIntegration ResonanceWidthIntegrationType() const
std::vector< std::pair< double, std::vector< int > > > ResonanceFinalStatesDistribution
ThermalParticleSystem(const std::string &InputFile="", bool GenAntiP=true, double mcut=-1.)
Construct a new ThermalParticleSystem object.
ThermalParticleSystem(const std::string &InputFile, const std::string &DecayFile, bool GenAntiP=true, double mcut=-1.)
Construct a new ThermalParticleSystem object.
static const std::string flag_noexcitednuclei
int PdgToId(long long pdgid) const
Transforms PDG ID to a 0-based particle id number.
std::vector< SingleDecayProbabilityDistribution > DecayProbabilityDistributionsToParticle
A vector of SingleDecayProbabilityDistribution where each element corresponds to a certain resonance ...
SortModeType SortMode() const
Current mode to sort particle species.
void WriteTableToFile(const std::string &OutputFile="", bool WriteAntiParticles=false)
Writes the particle list to file.
void LoadList(const std::string &InputFile="", bool GenerateAntiParticles=true, double mcut=-1.)
Loads the particle list from file.
void ProcessDecays()
Computes the decay contributions of decaying resonances to all particle yields.
std::string GetNameFromPDG(long long pdgid)
Get the name of particle species with the specified PDG ID.
ThermalParticle::ParticleDecaysVector GetDecaysFromAntiParticle(const ThermalParticle::ParticleDecaysVector &Decays)
Generates the decay channels for an antiparticle based on the provided decay channels of a particle.
std::vector< DecayCumulantsContributionsToParticle > DecayCumulantsContributionsToAllParticles
void SetCalculationType(IdealGasFunctions::QStatsCalculationType type)
Sets the CalculationType() method to evaluate quantum statistics.
void NormalizeBranchingRatios()
Normalize branching ratios for all particles such that they add up to 100%.
bool operator==(const ThermalParticleSystem &rhs) const
void SetClusterExpansionOrder(int order)
Set the number of terms in the cluster expansion method.
const std::vector< ThermalParticle > & Particles() const
Returns the vector of all particle species.
std::vector< SingleDecayContribution > DecayContributionsToParticle
A vector of SingleDecayContribution where each element corresponds to a certain resonance species.
void RestoreBranchingRatios()
Restore the original values of all the branching ratios.
void FillDecayProperties()
Computes and fills decay channels of all particles with extra information.
void LoadList(const std::vector< std::string > &ListFiles, const std::vector< std::string > &DecayFiles=std::vector< std::string >(0), const std::set< std::string > &flags=std::set< std::string >(), double mcut=1.e9)
Loads the particle list from file.
static const std::string flag_no_antiparticles
std::pair< double, int > SingleDecayContribution
void FillResonanceDecaysByFeeddown()
Same as FillResonanceDecays() but separately for weak, electromagnetic, and strong decay feeddowns.
std::pair< std::vector< double >, int > SingleDecayCumulantsContribution
void FillDecayThresholds()
Computes mass thresholds of all decay channels of all particles. Obsolete.
void AddParticlesToListFromFile(const std::string &InputFile="", const std::set< std::string > &flags=std::set< std::string >(), double mcut=-1.)
static const std::string flag_nostrangeness
std::vector< int > CheckDecayChargesConservationVector(int ind) const
std::pair< std::vector< double >, int > SingleDecayProbabilityDistribution
static ParticleDecayType::DecayType DecayTypeByParticleType(const ThermalParticle &part)
Determines the decay type of a given particle specie.
const ThermalParticle & Particle(int id) const
ThermalParticle object corresponding to particle species with a provided 0-based index.
void RemoveParticleAt(int ind)
Removes particle specie with specified 0-based particle id number from the list.
long long IdToPdg(int id) const
Transforms 0-based particle id number to a PDG ID.
std::vector< DecayContributionsToParticle > DecayContributionsToAllParticles
const std::vector< ResonanceFinalStatesDistribution > & ResonanceFinalStatesDistributions() const
Final state particle number distributions for resonance decays.
std::vector< ThermalParticle > & Particles()
void AddParticle(const ThermalParticle &part)
Adds a new particle specie to the list.
ThermalParticle::ResonanceWidthShape ResonanceWidthShape() const
void SetResonanceWidthShape(ThermalParticle::ResonanceWidthShape shape)
Set (or get) the ThermalParticle::ResonanceWidthShape for all particles.
void LoadDecays(const std::vector< std::string > &DecayFiles, const std::set< std::string > &flags=std::set< std::string >())
Load the decay channels for all particles from a file.
const ThermalParticle & ParticleByPDG(long long pdgid) const
ThermalParticle object corresponding to particle species with a provided PDG ID.
void FillResonanceDecays()
Computes the decay contributions of decaying resonances to all particle yields.
std::vector< double > GetConservedChargesVector(ConservedCharge::Name charge)
Calculates vector of conserved charges for all particle species.
void SetMaxDecayDistributionsSize(int maxsize)
Maximum number of entries in the final-state decay distribution vector for a single resonance.
int ComponentsNumber() const
Number of different particle species in the list.
bool operator!=(const ThermalParticleSystem &rhs) const
void WriteDecaysToFile(const std::string &OutputFile="", bool WriteAntiParticles=false)
Writes the decay channels to a file.
SortModeType
Mode list to sort particles species.
~ThermalParticleSystem(void)
Destroy the ThermalParticleSystem object.
std::vector< SingleDecayCumulantsContribution > DecayCumulantsContributionsToParticle
A vector of SingleDecayCumulantsContribution where each element corresponds to a certain resonance sp...
Contains several helper routines.
void cutDecayDistributionsVector(std::vector< std::pair< double, std::vector< int > > > &vect, int maxsize=2000)
std::vector< std::string > split(const std::string &s, char delim)
Contains decay lifetimes needed for propagation in Monte Carlo.
QStatsCalculationType
Identifies whether quantum statistics are to be computed using the cluster expansion or numerical int...
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.
DecayType
Type of particle's decay.