Version: SMASH-2.1
decaytype.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2020
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 
8 #ifndef SRC_INCLUDE_SMASH_DECAYTYPE_H_
9 #define SRC_INCLUDE_SMASH_DECAYTYPE_H_
10 
11 #include <memory>
12 #include <vector>
13 
14 #include "forwarddeclarations.h"
15 #include "particletype.h"
16 #include "tabulation.h"
17 
18 namespace smash {
19 
23 class DecayType {
24  public:
32  DecayType(ParticleTypePtrList part_types, int l)
33  : particle_types_(part_types), L_(l) {}
39  virtual ~DecayType() = default;
41  virtual unsigned int particle_number() const = 0;
47  virtual bool has_particles(ParticleTypePtrList list) const = 0;
54  virtual bool has_mother(ParticleTypePtr mother) const {
55  SMASH_UNUSED(mother);
56  return true;
57  }
59  const ParticleTypePtrList &particle_types() const { return particle_types_; }
61  inline int angular_momentum() const { return L_; }
69  virtual double width(double m0, double G0, double m) const = 0;
79  virtual double in_width(double m0, double G0, double m, double m1,
80  double m2) const = 0;
81 
82  protected:
84  ParticleTypePtrList particle_types_;
86  int L_;
87 };
88 
92 class TwoBodyDecay : public DecayType {
93  public:
101  TwoBodyDecay(ParticleTypePtrList part_types, int l);
102  unsigned int particle_number() const override;
103  bool has_particles(ParticleTypePtrList list) const override;
105  double threshold() const {
106  return particle_types_[0]->min_mass_spectral() +
107  particle_types_[1]->min_mass_spectral();
108  }
109 
110  protected:
120  virtual double rho(double mass) const {
121  SMASH_UNUSED(mass);
122  return 1.;
123  }
124 };
125 
131  public:
139  TwoBodyDecayStable(ParticleTypePtrList part_types, int l);
140 
149  double width(double m0, double G0, double m) const override;
150 
162  double in_width(double m0, double G0, double m, double m1,
163  double m2) const override;
164 
165  protected:
166  double rho(double m) const override;
167 };
168 
174  public:
182  TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l);
183 
192  double width(double m0, double G0, double m) const override;
193 
205  double in_width(double m0, double G0, double m, double m1,
206  double m2) const override;
207 
208  protected:
209  double rho(double m) const override;
210 
223  double get_Lambda();
224 
226  double Lambda_;
227 
229  mutable std::unique_ptr<Tabulation> tabulation_;
230 };
231 
237  public:
245  TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l);
246  double width(double m0, double G0, double m) const override;
247  double in_width(double m0, double G0, double m, double m1,
248  double m2) const override;
249 
250  protected:
251  double rho(double m) const override;
256  double get_Lambda();
257 
259  double Lambda_;
260 
262  mutable std::unique_ptr<Tabulation> tabulation_;
263 };
264 
270  public:
278  TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l);
279 
280  double width(double m0, double G0, double m) const override;
281 };
282 
286 class ThreeBodyDecay : public DecayType {
287  public:
295  ThreeBodyDecay(ParticleTypePtrList part_types, int l);
296 
297  unsigned int particle_number() const override;
298  bool has_particles(ParticleTypePtrList list) const override;
299  double width(double m0, double G0, double m) const override;
300  double in_width(double m0, double G0, double m, double m1,
301  double m2) const override;
302 };
303 
309  public:
318  ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types,
319  int l);
320 
321  bool has_mother(ParticleTypePtr mother) const override;
322 
341  static double diff_width(double m_par, double m_l, double m_dil,
342  double m_other, ParticleTypePtr other,
343  ParticleTypePtr t);
344  double width(double m0, double G0, double m) const override;
345 
346  protected:
348  mutable std::unique_ptr<Tabulation> tabulation_;
349 
352 };
353 
354 } // namespace smash
355 
356 #endif // SRC_INCLUDE_SMASH_DECAYTYPE_H_
DecayType is the abstract base class for all decay types.
Definition: decaytype.h:23
virtual unsigned int particle_number() const =0
DecayType(ParticleTypePtrList part_types, int l)
Construct a DecayType.
Definition: decaytype.h:32
int L_
angular momentum of the decay
Definition: decaytype.h:86
virtual double in_width(double m0, double G0, double m, double m1, double m2) const =0
virtual bool has_mother(ParticleTypePtr mother) const
Definition: decaytype.h:54
virtual ~DecayType()=default
Virtual Destructor.
virtual bool has_particles(ParticleTypePtrList list) const =0
ParticleTypePtrList particle_types_
final-state particles of the decay
Definition: decaytype.h:84
const ParticleTypePtrList & particle_types() const
Definition: decaytype.h:59
int angular_momentum() const
Definition: decaytype.h:61
virtual double width(double m0, double G0, double m) const =0
A pointer-like interface to global references to ParticleType objects.
Definition: particletype.h:665
ThreeBodyDecayDilepton represents a decay type with three final-state particles, two of which are lep...
Definition: decaytype.h:308
ParticleTypePtr mother_
Type of the mother particle.
Definition: decaytype.h:351
static double diff_width(double m_par, double m_l, double m_dil, double m_other, ParticleTypePtr other, ParticleTypePtr t)
Get the mass-differential width for a dilepton Dalitz decay, where is the invariant mass of the lep...
Definition: decaytype.cc:338
bool has_mother(ParticleTypePtr mother) const override
Definition: decaytype.cc:334
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:449
ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecayDilepton.
Definition: decaytype.cc:307
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:348
ThreeBodyDecay represents a decay type with three final-state particles.
Definition: decaytype.h:286
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:296
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:286
unsigned int particle_number() const override
Definition: decaytype.cc:284
ThreeBodyDecay(ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecay.
Definition: decaytype.cc:275
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:300
TwoBodyDecayDilepton represents a decay with a lepton and its antilepton as the final-state particles...
Definition: decaytype.h:269
double width(double m0, double G0, double m) const override
Get the mass-dependent width of a two-body decay into stable particles according to Manley:1992yb .
Definition: decaytype.cc:254
TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayDilepton.
Definition: decaytype.cc:242
TwoBodyDecaySemistable represents a decay type with two final-state particles, one of which is stable...
Definition: decaytype.h:173
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:229
double rho(double m) const override
This is a virtual helper method which is used to write the width as Gamma(m) = Gamma_0 * rho(m) / rho...
Definition: decaytype.cc:146
TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecaySemistable.
Definition: decaytype.cc:124
double Lambda_
Cut-off parameter Λ for semi-stable decays.
Definition: decaytype.h:226
double in_width(double m0, double G0, double m, double m1, double m2) const override
Get the mass-dependent in-width for a resonance formation process from one stable and one unstable pa...
Definition: decaytype.cc:171
double width(double m0, double G0, double m) const override
Get the mass-dependent width of a two-body decay into one stable and one unstable particle according ...
Definition: decaytype.cc:166
TwoBodyDecayStable represents a decay type with two stable final-state particles.
Definition: decaytype.h:130
double width(double m0, double G0, double m) const override
Get the mass-dependent width of a two-body decay into stable particles according to Manley:1992yb .
Definition: decaytype.cc:91
double in_width(double m0, double G0, double m, double m1, double m2) const override
Get the mass-dependent in-width for a resonance formation process from two stable particles according...
Definition: decaytype.cc:96
double rho(double m) const override
This is a virtual helper method which is used to write the width as Gamma(m) = Gamma_0 * rho(m) / rho...
Definition: decaytype.cc:83
TwoBodyDecayStable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayStable.
Definition: decaytype.cc:73
TwoBodyDecayUnstable represents a decay type with two unstable final-state particles.
Definition: decaytype.h:236
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:232
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:228
double rho(double m) const override
This is a virtual helper method which is used to write the width as Gamma(m) = Gamma_0 * rho(m) / rho...
Definition: decaytype.cc:200
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:262
TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayUnstable.
Definition: decaytype.cc:182
double Lambda_
Cut-off parameter Λ for unstable decays.
Definition: decaytype.h:259
TwoBodyDecay represents a decay type with two final-state particles.
Definition: decaytype.h:92
unsigned int particle_number() const override
Definition: decaytype.cc:61
double threshold() const
Definition: decaytype.h:105
virtual double rho(double mass) const
This is a virtual helper method which is used to write the width as Gamma(m) = Gamma_0 * rho(m) / rho...
Definition: decaytype.h:120
TwoBodyDecay(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecay.
Definition: decaytype.cc:52
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:63
#define SMASH_UNUSED(x)
Mark as unused, silencing compiler warnings.
Definition: macros.h:24
Definition: action.h:24