Version: SMASH-2.0
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_
smash::TwoBodyDecay::TwoBodyDecay
TwoBodyDecay(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecay.
Definition: decaytype.cc:52
smash
Definition: action.h:24
smash::DecayType::particle_number
virtual unsigned int particle_number() const =0
smash::TwoBodyDecayUnstable::TwoBodyDecayUnstable
TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayUnstable.
Definition: decaytype.cc:182
smash::ThreeBodyDecay::particle_number
unsigned int particle_number() const override
Definition: decaytype.cc:284
smash::TwoBodyDecay::threshold
double threshold() const
Definition: decaytype.h:105
smash::TwoBodyDecayStable::TwoBodyDecayStable
TwoBodyDecayStable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayStable.
Definition: decaytype.cc:73
smash::DecayType
DecayType is the abstract base class for all decay types.
Definition: decaytype.h:23
smash::ThreeBodyDecay
ThreeBodyDecay represents a decay type with three final-state particles.
Definition: decaytype.h:286
smash::TwoBodyDecay::particle_number
unsigned int particle_number() const override
Definition: decaytype.cc:61
smash::ThreeBodyDecayDilepton::tabulation_
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:348
smash::DecayType::L_
int L_
angular momentum of the decay
Definition: decaytype.h:86
smash::TwoBodyDecay::rho
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
smash::TwoBodyDecayStable::rho
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
smash::TwoBodyDecaySemistable::in_width
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
smash::TwoBodyDecayUnstable::get_Lambda
double get_Lambda()
Definition: decaytype.cc:193
smash::TwoBodyDecayUnstable::tabulation_
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:262
smash::TwoBodyDecay::has_particles
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:63
smash::TwoBodyDecaySemistable::get_Lambda
double get_Lambda()
Definition: decaytype.cc:130
smash::ThreeBodyDecay::has_particles
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:286
smash::DecayType::DecayType
DecayType(ParticleTypePtrList part_types, int l)
Construct a DecayType.
Definition: decaytype.h:32
smash::DecayType::~DecayType
virtual ~DecayType()=default
Virtual Destructor.
smash::TwoBodyDecaySemistable::TwoBodyDecaySemistable
TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecaySemistable.
Definition: decaytype.cc:124
smash::DecayType::particle_types_
ParticleTypePtrList particle_types_
final-state particles of the decay
Definition: decaytype.h:84
smash::DecayType::angular_momentum
int angular_momentum() const
Definition: decaytype.h:61
smash::ThreeBodyDecayDilepton::has_mother
bool has_mother(ParticleTypePtr mother) const override
Definition: decaytype.cc:334
smash::TwoBodyDecayUnstable::rho
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
smash::ThreeBodyDecayDilepton
ThreeBodyDecayDilepton represents a decay type with three final-state particles, two of which are lep...
Definition: decaytype.h:308
smash::TwoBodyDecayStable::width
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
smash::TwoBodyDecaySemistable::width
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
smash::TwoBodyDecaySemistable::rho
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
forwarddeclarations.h
smash::ParticleTypePtr
Definition: particletype.h:665
smash::DecayType::in_width
virtual double in_width(double m0, double G0, double m, double m1, double m2) const =0
smash::ThreeBodyDecay::width
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:296
smash::ThreeBodyDecay::in_width
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:300
smash::ThreeBodyDecay::ThreeBodyDecay
ThreeBodyDecay(ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecay.
Definition: decaytype.cc:275
smash::TwoBodyDecayStable::in_width
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
smash::TwoBodyDecayDilepton::TwoBodyDecayDilepton
TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayDilepton.
Definition: decaytype.cc:242
particletype.h
smash::ThreeBodyDecayDilepton::mother_
ParticleTypePtr mother_
Type of the mother particle.
Definition: decaytype.h:351
smash::DecayType::has_mother
virtual bool has_mother(ParticleTypePtr mother) const
Definition: decaytype.h:54
smash::DecayType::has_particles
virtual bool has_particles(ParticleTypePtrList list) const =0
SMASH_UNUSED
#define SMASH_UNUSED(x)
Mark as unused, silencing compiler warnings.
Definition: macros.h:24
smash::TwoBodyDecayStable
TwoBodyDecayStable represents a decay type with two stable final-state particles.
Definition: decaytype.h:130
smash::TwoBodyDecayUnstable::width
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:228
smash::TwoBodyDecayUnstable
TwoBodyDecayUnstable represents a decay type with two unstable final-state particles.
Definition: decaytype.h:236
smash::TwoBodyDecayDilepton
TwoBodyDecayDilepton represents a decay with a lepton and its antilepton as the final-state particles...
Definition: decaytype.h:269
smash::ThreeBodyDecayDilepton::diff_width
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
smash::TwoBodyDecay
TwoBodyDecay represents a decay type with two final-state particles.
Definition: decaytype.h:92
smash::DecayType::width
virtual double width(double m0, double G0, double m) const =0
smash::ThreeBodyDecayDilepton::width
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:425
smash::TwoBodyDecaySemistable::Lambda_
double Lambda_
Cut-off parameter Λ for semi-stable decays.
Definition: decaytype.h:226
smash::TwoBodyDecaySemistable::tabulation_
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:229
smash::TwoBodyDecayUnstable::in_width
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:232
smash::TwoBodyDecaySemistable
TwoBodyDecaySemistable represents a decay type with two final-state particles, one of which is stable...
Definition: decaytype.h:173
smash::DecayType::particle_types
const ParticleTypePtrList & particle_types() const
Definition: decaytype.h:59
tabulation.h
smash::TwoBodyDecayDilepton::width
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
smash::TwoBodyDecayUnstable::Lambda_
double Lambda_
Cut-off parameter Λ for unstable decays.
Definition: decaytype.h:259
smash::ThreeBodyDecayDilepton::ThreeBodyDecayDilepton
ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecayDilepton.
Definition: decaytype.cc:307