Version: SMASH-1.8
isoparticletype.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2019
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 
8 #ifndef SRC_INCLUDE_ISOPARTICLETYPE_H_
9 #define SRC_INCLUDE_ISOPARTICLETYPE_H_
10 
11 #include <string>
12 #include <unordered_map>
13 
14 #include "particletype.h"
15 #include "sha256.h"
16 #include "tabulation.h"
17 
18 namespace smash {
19 
28  public:
38  IsoParticleType(const std::string &n, double m, double w, unsigned int s,
39  Parity p);
40 
45  IsoParticleType(const IsoParticleType &) = delete;
47  IsoParticleType &operator=(const IsoParticleType &) = delete;
48 
50  IsoParticleType(IsoParticleType &&) = default;
53 
60  bool operator==(const IsoParticleType &rhs) const {
61  return states_[0]->pdgcode() == rhs.states_[0]->pdgcode();
62  }
63 
65  const std::string &name() const { return name_; }
66 
68  double mass() const { return mass_; }
69 
71  double width() const { return width_; }
72 
74  int isospin() const { return states_.size() - 1; }
75 
80  unsigned int spin() const { return spin_; }
81 
85  Parity parity() const { return parity_; }
86 
90  bool is_hadron() const { return states_[0]->is_hadron(); }
91 
93  ParticleTypePtrList get_states() const { return states_; }
94 
101  void add_state(const ParticleType &type);
102 
107  const IsoParticleType *anti_multiplet() const;
108 
113  bool has_anti_multiplet() const;
114 
116  static const IsoParticleTypeList &list_all();
117 
120  static const std::vector<const IsoParticleType *> list_baryon_resonances();
121 
130  static const IsoParticleType *try_find(const std::string &name);
131 
139  static const IsoParticleType &find(const std::string &name);
140 
148  static IsoParticleType *find(const ParticleType &type);
149 
154  struct ParticleNotFoundFailure : public std::runtime_error {
155  using std::runtime_error::runtime_error;
156  };
157 
164  static bool exists(const std::string &name);
165 
173  static const ParticleTypePtr find_state(const std::string &name);
174 
182  static void create_multiplet(const ParticleType &type);
183 
193  static void tabulate_integrals(sha256::Hash hash,
194  const bf::path &tabulations_path);
195 
201  double get_integral_NR(double sqrts);
202 
209  double get_integral_RR(IsoParticleType *type_res_2, double sqrts);
210 
216  double get_integral_RK(double sqrts);
217 
223  double get_integral_piR(double sqrts);
224 
230  double get_integral_rhoR(double sqrts);
231 
232  private:
234  std::string name_;
236  double mass_;
238  double width_;
240  unsigned int spin_;
244  ParticleTypePtrList states_;
245 
264 
271  static IsoParticleType &find_private(const std::string &name);
272 };
273 
274 } // namespace smash
275 
276 #endif // SRC_INCLUDE_ISOPARTICLETYPE_H_
smash
Definition: action.h:24
smash::IsoParticleType::isospin
int isospin() const
Returns twice the total isospin of the multiplet.
Definition: isoparticletype.h:74
smash::IsoParticleType::parity
Parity parity() const
Definition: isoparticletype.h:85
smash::IsoParticleType::anti_multiplet
const IsoParticleType * anti_multiplet() const
Return a multiplet of antiparticles, if it is different from the original multiplet.
Definition: isoparticletype.cc:107
smash::IsoParticleType::width
double width() const
Returns the (average) multiplet width.
Definition: isoparticletype.h:71
smash::IsoParticleType::find
static const IsoParticleType & find(const std::string &name)
Returns the IsoParticleType object for the given name.
Definition: isoparticletype.cc:62
smash::IsoParticleType::spin_
unsigned int spin_
twice the spin of the multiplet
Definition: isoparticletype.h:240
smash::IsoParticleType::name_
std::string name_
name of the multiplet
Definition: isoparticletype.h:234
smash::IsoParticleType::name
const std::string & name() const
Returns the name of the multiplet.
Definition: isoparticletype.h:65
smash::IsoParticleType::get_integral_rhoR
double get_integral_rhoR(double sqrts)
Look up the tabulated resonance integral for the XX -> rhoR cross section.
Definition: isoparticletype.cc:329
smash::IsoParticleType::has_anti_multiplet
bool has_anti_multiplet() const
Check if there is a multiplet of antiparticles, which is different from the original multiplet.
Definition: isoparticletype.cc:120
smash::IsoParticleType::mass_
double mass_
(average) mass of the multiplet
Definition: isoparticletype.h:236
smash::IsoParticleType::spin
unsigned int spin() const
Returns twice the spin of the multiplet.
Definition: isoparticletype.h:80
smash::IsoParticleType::states_
ParticleTypePtrList states_
list of states that are contained in the multiplet
Definition: isoparticletype.h:244
smash::IsoParticleType::parity_
Parity parity_
parity of the multiplet
Definition: isoparticletype.h:242
smash::IsoParticleType::XS_NR_tabulation_
Tabulation * XS_NR_tabulation_
A tabulation for the NN -> NR cross sections, where R is a resonance from this multiplet.
Definition: isoparticletype.h:254
smash::IsoParticleType::XS_RK_tabulation_
Tabulation * XS_RK_tabulation_
A tabulation of the spectral integral for the NK -> RK cross sections.
Definition: isoparticletype.h:249
smash::IsoParticleType::operator==
bool operator==(const IsoParticleType &rhs) const
Returns whether the two IsoParticleType objects have the same PDG code for their first state; if so,...
Definition: isoparticletype.h:60
smash::IsoParticleType::is_hadron
bool is_hadron() const
Definition: isoparticletype.h:90
smash::IsoParticleType::tabulate_integrals
static void tabulate_integrals(sha256::Hash hash, const bf::path &tabulations_path)
Tabulate all relevant integrals.
Definition: isoparticletype.cc:267
smash::IsoParticleType::XS_rhoR_tabulation_
Tabulation * XS_rhoR_tabulation_
A tabulation for the ρρ integrals.
Definition: isoparticletype.h:263
smash::ParticleTypePtr
Definition: particletype.h:663
smash::IsoParticleType::get_integral_piR
double get_integral_piR(double sqrts)
Look up the tabulated resonance integral for the XX -> piR cross section.
Definition: isoparticletype.cc:313
smash::IsoParticleType::find_state
static const ParticleTypePtr find_state(const std::string &name)
Returns the ParticleType object for the given name, by first finding the correct multiplet and then l...
Definition: isoparticletype.cc:124
smash::IsoParticleType
Definition: isoparticletype.h:27
smash::IsoParticleType::list_baryon_resonances
static const std::vector< const IsoParticleType * > list_baryon_resonances()
Returns a list of all IsoParticleTypes that are baryon resonances.
Definition: isoparticletype.cc:25
smash::IsoParticleType::add_state
void add_state(const ParticleType &type)
Add a new state to an existing multiplet (and check if isospin symmetry is fulfilled).
Definition: isoparticletype.cc:140
smash::IsoParticleType::exists
static bool exists(const std::string &name)
Returns whether the ParticleType with the given pdgcode exists.
Definition: isoparticletype.cc:79
smash::IsoParticleType::get_integral_NR
double get_integral_NR(double sqrts)
Look up the tabulated resonance integral for the XX -> NR cross section.
Definition: isoparticletype.cc:305
smash::ParticleType
Definition: particletype.h:97
smash::IsoParticleType::XS_piR_tabulation_
Tabulation * XS_piR_tabulation_
A tabulation of the spectral integral for the dpi -> d'pi cross sections.
Definition: isoparticletype.h:247
particletype.h
smash::Tabulation
A class for storing a one-dimensional lookup table of floating-point values.
Definition: tabulation.h:35
smash::IsoParticleType::mass
double mass() const
Returns the (average) multiplet mass.
Definition: isoparticletype.h:68
sha256.h
smash::sha256::Hash
std::array< uint8_t, HASH_SIZE > Hash
A SHA256 hash.
Definition: sha256.h:16
smash::IsoParticleType::ParticleNotFoundFailure
Definition: isoparticletype.h:154
smash::IsoParticleType::XS_DeltaR_tabulation_
Tabulation * XS_DeltaR_tabulation_
A tabulation for the NN -> RΔ cross sections, where R is a resonance from this multiplet.
Definition: isoparticletype.h:259
smash::IsoParticleType::try_find
static const IsoParticleType * try_find(const std::string &name)
Returns the IsoParticleType pointer for the given name.
Definition: isoparticletype.cc:58
smash::IsoParticleType::get_integral_RK
double get_integral_RK(double sqrts)
Look up the tabulated resonance integral for the XX -> RK cross section.
Definition: isoparticletype.cc:321
smash::IsoParticleType::find_private
static IsoParticleType & find_private(const std::string &name)
Private version of the 'find' method that returns a non-const reference.
Definition: isoparticletype.cc:70
smash::IsoParticleType::get_integral_RR
double get_integral_RR(IsoParticleType *type_res_2, double sqrts)
Look up the tabulated resonance integral for the XX -> RR cross section.
Definition: isoparticletype.cc:337
smash::Parity
Parity
Represent the parity of a particle type.
Definition: particletype.h:24
smash::pdg::p
constexpr int p
Proton.
Definition: pdgcode_constants.h:28
smash::IsoParticleType::operator=
IsoParticleType & operator=(const IsoParticleType &)=delete
Assignment is not allowed, see copy constructor above.
smash::IsoParticleType::width_
double width_
(average) width of the multiplet
Definition: isoparticletype.h:238
smash::pdg::n
constexpr int n
Neutron.
Definition: pdgcode_constants.h:30
smash::IsoParticleType::IsoParticleType
IsoParticleType(const std::string &n, double m, double w, unsigned int s, Parity p)
Creates a fully initialized IsoParticleType object.
Definition: isoparticletype.cc:39
tabulation.h
smash::IsoParticleType::get_states
ParticleTypePtrList get_states() const
Returns list of states that form part of the multiplet.
Definition: isoparticletype.h:93
smash::IsoParticleType::list_all
static const IsoParticleTypeList & list_all()
Returns a list of all IsoParticleTypes.
Definition: isoparticletype.cc:43
smash::IsoParticleType::create_multiplet
static void create_multiplet(const ParticleType &type)
Add a new multiplet to the global list of IsoParticleTypes, which contains type.
Definition: isoparticletype.cc:161