Version: SMASH-3.1
decaytype.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2020,2022-2023
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([[maybe_unused]] ParticleTypePtr mother) const {
55  return true;
56  }
58  const ParticleTypePtrList &particle_types() const { return particle_types_; }
60  inline int angular_momentum() const { return L_; }
68  virtual double width(double m0, double G0, double m) const = 0;
78  virtual double in_width(double m0, double G0, double m, double m1,
79  double m2) const = 0;
80 
82  virtual bool is_dilepton_decay() const { return false; }
83 
84  protected:
86  ParticleTypePtrList particle_types_;
88  int L_;
89 };
90 
94 class TwoBodyDecay : public DecayType {
95  public:
103  TwoBodyDecay(ParticleTypePtrList part_types, int l);
104  unsigned int particle_number() const override;
105  bool has_particles(ParticleTypePtrList list) const override;
107  double threshold() const {
108  return particle_types_[0]->min_mass_spectral() +
109  particle_types_[1]->min_mass_spectral();
110  }
111 
112  protected:
122  virtual double rho([[maybe_unused]] double mass) const { return 1.; }
123 };
124 
130  public:
138  TwoBodyDecayStable(ParticleTypePtrList part_types, int l);
139 
148  double width(double m0, double G0, double m) const override;
149 
161  double in_width(double m0, double G0, double m, double m1,
162  double m2) const override;
163 
164  protected:
168  double rho(double m) const override;
169 };
170 
176  public:
184  TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l);
185 
194  double width(double m0, double G0, double m) const override;
195 
207  double in_width(double m0, double G0, double m, double m1,
208  double m2) const override;
209 
210  protected:
214  double rho(double m) const override;
215 
228  double get_Lambda();
229 
231  double Lambda_;
232 
234  mutable std::unique_ptr<Tabulation> tabulation_;
235 };
236 
242  public:
250  TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l);
251  double width(double m0, double G0, double m) const override;
252  double in_width(double m0, double G0, double m, double m1,
253  double m2) const override;
254 
255  protected:
259  double rho(double m) const override;
264  double get_Lambda();
265 
267  double Lambda_;
268 
270  mutable std::unique_ptr<Tabulation> tabulation_;
271 };
272 
278  public:
286  TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l);
287 
288  double width(double m0, double G0, double m) const override;
289  bool is_dilepton_decay() const override { return true; }
290 };
291 
295 class ThreeBodyDecay : public DecayType {
296  public:
304  ThreeBodyDecay(ParticleTypePtrList part_types, int l);
305 
306  unsigned int particle_number() const override;
307  bool has_particles(ParticleTypePtrList list) const override;
308  double width(double m0, double G0, double m) const override;
309  double in_width(double m0, double G0, double m, double m1,
310  double m2) const override;
311 };
312 
318  public:
327  ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types,
328  int l);
329 
333  bool has_mother(ParticleTypePtr mother) const override;
334 
353  static double diff_width(double m_par, double m_l, double m_dil,
354  double m_other, ParticleTypePtr other,
355  ParticleTypePtr t);
356  double width(double m0, double G0, double m) const override;
357 
358  bool is_dilepton_decay() const override { return true; }
359 
360  protected:
362  mutable std::unique_ptr<Tabulation> tabulation_;
363 
366 };
367 
368 } // namespace smash
369 
370 #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:88
virtual double in_width(double m0, double G0, double m, double m1, double m2) const =0
virtual ~DecayType()=default
Virtual Destructor.
virtual bool has_particles(ParticleTypePtrList list) const =0
virtual bool is_dilepton_decay() const
Definition: decaytype.h:82
ParticleTypePtrList particle_types_
final-state particles of the decay
Definition: decaytype.h:86
const ParticleTypePtrList & particle_types() const
Definition: decaytype.h:58
int angular_momentum() const
Definition: decaytype.h:60
virtual double width(double m0, double G0, double m) const =0
virtual bool has_mother([[maybe_unused]] ParticleTypePtr mother) const
Definition: decaytype.h:54
A pointer-like interface to global references to ParticleType objects.
Definition: particletype.h:676
ThreeBodyDecayDilepton represents a decay type with three final-state particles, two of which are lep...
Definition: decaytype.h:317
ParticleTypePtr mother_
Type of the mother particle.
Definition: decaytype.h:365
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:337
bool has_mother(ParticleTypePtr mother) const override
See DecayType::has_mother.
Definition: decaytype.cc:333
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:448
ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecayDilepton.
Definition: decaytype.cc:306
bool is_dilepton_decay() const override
Definition: decaytype.h:358
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:362
ThreeBodyDecay represents a decay type with three final-state particles.
Definition: decaytype.h:295
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:295
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:285
unsigned int particle_number() const override
Definition: decaytype.cc:283
ThreeBodyDecay(ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecay.
Definition: decaytype.cc:274
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:299
TwoBodyDecayDilepton represents a decay with a lepton and its antilepton as the final-state particles...
Definition: decaytype.h:277
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:253
TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayDilepton.
Definition: decaytype.cc:241
bool is_dilepton_decay() const override
Definition: decaytype.h:289
TwoBodyDecaySemistable represents a decay type with two final-state particles, one of which is stable...
Definition: decaytype.h:175
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:234
double rho(double m) const override
See TwoBodyDecay::rho.
Definition: decaytype.cc:145
TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecaySemistable.
Definition: decaytype.cc:123
double Lambda_
Cut-off parameter Λ for semi-stable decays.
Definition: decaytype.h:231
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:170
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:165
TwoBodyDecayStable represents a decay type with two stable final-state particles.
Definition: decaytype.h:129
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:90
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:95
double rho(double m) const override
See TwoBodyDecay::rho.
Definition: decaytype.cc:82
TwoBodyDecayStable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayStable.
Definition: decaytype.cc:72
TwoBodyDecayUnstable represents a decay type with two unstable final-state particles.
Definition: decaytype.h:241
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:231
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:227
double rho(double m) const override
See TwoBodyDecay::rho.
Definition: decaytype.cc:199
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:270
TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayUnstable.
Definition: decaytype.cc:181
double Lambda_
Cut-off parameter Λ for unstable decays.
Definition: decaytype.h:267
TwoBodyDecay represents a decay type with two final-state particles.
Definition: decaytype.h:94
unsigned int particle_number() const override
Definition: decaytype.cc:60
double threshold() const
Definition: decaytype.h:107
virtual double rho([[maybe_unused]] 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:122
TwoBodyDecay(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecay.
Definition: decaytype.cc:51
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:62
Definition: action.h:24