Version: SMASH-3.0
decaytype.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2020,2022
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 
83  virtual bool is_dilepton_decay() const { return false; }
84 
85  protected:
87  ParticleTypePtrList particle_types_;
89  int L_;
90 };
91 
95 class TwoBodyDecay : public DecayType {
96  public:
104  TwoBodyDecay(ParticleTypePtrList part_types, int l);
105  unsigned int particle_number() const override;
106  bool has_particles(ParticleTypePtrList list) const override;
108  double threshold() const {
109  return particle_types_[0]->min_mass_spectral() +
110  particle_types_[1]->min_mass_spectral();
111  }
112 
113  protected:
123  virtual double rho(double mass) const {
124  SMASH_UNUSED(mass);
125  return 1.;
126  }
127 };
128 
134  public:
142  TwoBodyDecayStable(ParticleTypePtrList part_types, int l);
143 
152  double width(double m0, double G0, double m) const override;
153 
165  double in_width(double m0, double G0, double m, double m1,
166  double m2) const override;
167 
168  protected:
169  double rho(double m) const override;
170 };
171 
177  public:
185  TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l);
186 
195  double width(double m0, double G0, double m) const override;
196 
208  double in_width(double m0, double G0, double m, double m1,
209  double m2) const override;
210 
211  protected:
212  double rho(double m) const override;
213 
226  double get_Lambda();
227 
229  double Lambda_;
230 
232  mutable std::unique_ptr<Tabulation> tabulation_;
233 };
234 
240  public:
248  TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l);
249  double width(double m0, double G0, double m) const override;
250  double in_width(double m0, double G0, double m, double m1,
251  double m2) const override;
252 
253  protected:
254  double rho(double m) const override;
259  double get_Lambda();
260 
262  double Lambda_;
263 
265  mutable std::unique_ptr<Tabulation> tabulation_;
266 };
267 
273  public:
281  TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l);
282 
283  double width(double m0, double G0, double m) const override;
284  bool is_dilepton_decay() const override { return true; }
285 };
286 
290 class ThreeBodyDecay : public DecayType {
291  public:
299  ThreeBodyDecay(ParticleTypePtrList part_types, int l);
300 
301  unsigned int particle_number() const override;
302  bool has_particles(ParticleTypePtrList list) const override;
303  double width(double m0, double G0, double m) const override;
304  double in_width(double m0, double G0, double m, double m1,
305  double m2) const override;
306 };
307 
313  public:
322  ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types,
323  int l);
324 
325  bool has_mother(ParticleTypePtr mother) const override;
326 
345  static double diff_width(double m_par, double m_l, double m_dil,
346  double m_other, ParticleTypePtr other,
347  ParticleTypePtr t);
348  double width(double m0, double G0, double m) const override;
349 
350  bool is_dilepton_decay() const override { return true; }
351 
352  protected:
354  mutable std::unique_ptr<Tabulation> tabulation_;
355 
358 };
359 
360 } // namespace smash
361 
362 #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:89
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
virtual bool is_dilepton_decay() const
Definition: decaytype.h:83
ParticleTypePtrList particle_types_
final-state particles of the decay
Definition: decaytype.h:87
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:672
ThreeBodyDecayDilepton represents a decay type with three final-state particles, two of which are lep...
Definition: decaytype.h:312
ParticleTypePtr mother_
Type of the mother particle.
Definition: decaytype.h:357
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
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:350
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:354
ThreeBodyDecay represents a decay type with three final-state particles.
Definition: decaytype.h:290
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:272
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:284
TwoBodyDecaySemistable represents a decay type with two final-state particles, one of which is stable...
Definition: decaytype.h:176
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:232
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: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:229
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:133
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
This is a virtual helper method which is used to write the width as Gamma(m) = Gamma_0 * rho(m) / 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:239
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
This is a virtual helper method which is used to write the width as Gamma(m) = Gamma_0 * rho(m) / rho...
Definition: decaytype.cc:199
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:265
TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayUnstable.
Definition: decaytype.cc:181
double Lambda_
Cut-off parameter Λ for unstable decays.
Definition: decaytype.h:262
TwoBodyDecay represents a decay type with two final-state particles.
Definition: decaytype.h:95
unsigned int particle_number() const override
Definition: decaytype.cc:60
double threshold() const
Definition: decaytype.h:108
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:123
TwoBodyDecay(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecay.
Definition: decaytype.cc:51
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:62
#define SMASH_UNUSED(x)
Mark as unused, silencing compiler warnings.
Definition: macros.h:24
Definition: action.h:24