Version: SMASH-1.5
decaytype.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2018
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 
8 #ifndef SRC_INCLUDE_DECAYTYPE_H_
9 #define SRC_INCLUDE_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 
141  double width(double m0, double G0, double m) const override;
142 
143  double in_width(double m0, double G0, double m, double m1,
144  double m2) const override;
145 
146  protected:
147  double rho(double m) const override;
148 };
149 
155  public:
163  TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l);
164 
165  double width(double m0, double G0, double m) const override;
166 
167  double in_width(double m0, double G0, double m, double m1,
168  double m2) const override;
169 
170  protected:
171  double rho(double m) const override;
172 
185  double get_Lambda();
186 
188  double Lambda_;
189 
191  mutable std::unique_ptr<Tabulation> tabulation_;
192 };
193 
199  public:
207  TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l);
208  double width(double m0, double G0, double m) const override;
209  double in_width(double m0, double G0, double m, double m1,
210  double m2) const override;
211 
212  protected:
213  double rho(double m) const override;
218  double get_Lambda();
219 
221  double Lambda_;
222 
224  mutable std::unique_ptr<Tabulation> tabulation_;
225 };
226 
232  public:
240  TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l);
241 
242  double width(double m0, double G0, double m) const override;
243 };
244 
248 class ThreeBodyDecay : public DecayType {
249  public:
257  ThreeBodyDecay(ParticleTypePtrList part_types, int l);
258 
259  unsigned int particle_number() const override;
260  bool has_particles(ParticleTypePtrList list) const override;
261  double width(double m0, double G0, double m) const override;
262  double in_width(double m0, double G0, double m, double m1,
263  double m2) const override;
264 };
265 
271  public:
280  ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types,
281  int l);
282 
283  bool has_mother(ParticleTypePtr mother) const override;
284 
302  static double diff_width(double m_par, double m_l, double m_dil,
303  double m_other, ParticleTypePtr other,
304  ParticleTypePtr t);
305  double width(double m0, double G0, double m) const override;
306 
307  protected:
309  mutable std::unique_ptr<Tabulation> tabulation_;
310 
313 };
314 
315 } // namespace smash
316 
317 #endif // SRC_INCLUDE_DECAYTYPE_H_
TwoBodyDecayUnstable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayUnstable.
Definition: decaytype.cc:185
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:257
double Lambda_
Cut-off parameter Λ for unstable decays.
Definition: decaytype.h:221
#define SMASH_UNUSED(x)
Mark as unused, silencing compiler warnings.
Definition: macros.h:24
ThreeBodyDecayDilepton(ParticleTypePtr mother, ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecayDilepton.
Definition: decaytype.cc:310
TwoBodyDecay(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecay.
Definition: decaytype.cc:55
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:309
const ParticleTypePtrList & particle_types() const
Definition: decaytype.h:59
TwoBodyDecaySemistable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecaySemistable.
Definition: decaytype.cc:127
DecayType(ParticleTypePtrList part_types, int l)
Construct a DecayType.
Definition: decaytype.h:32
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:94
ParticleTypePtrList particle_types_
final-state particles of the decay
Definition: decaytype.h:84
ThreeBodyDecayDilepton represents a decay type with three final-state particles, two of which are lep...
Definition: decaytype.h:270
virtual unsigned int particle_number() const =0
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:428
unsigned int particle_number() const override
Definition: decaytype.cc:64
int L_
angular momentum of the decay
Definition: decaytype.h:86
unsigned int particle_number() const override
Definition: decaytype.cc:287
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
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:289
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:299
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:99
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:224
DecayType is the abstract base class for all decay types.
Definition: decaytype.h:23
TwoBodyDecaySemistable represents a decay type with two final-state particles, one of which is stable...
Definition: decaytype.h:154
ThreeBodyDecay represents a decay type with three final-state particles.
Definition: decaytype.h:248
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:86
TwoBodyDecayDilepton(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayDilepton.
Definition: decaytype.cc:245
TwoBodyDecayDilepton represents a decay with a lepton and its antilepton as the final-state particles...
Definition: decaytype.h:231
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:203
virtual double width(double m0, double G0, double m) const =0
virtual double in_width(double m0, double G0, double m, double m1, double m2) const =0
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:303
bool has_particles(ParticleTypePtrList list) const override
Definition: decaytype.cc:66
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:231
std::unique_ptr< Tabulation > tabulation_
Tabulation of the resonance integrals.
Definition: decaytype.h:191
int angular_momentum() const
Definition: decaytype.h:61
double Lambda_
Cut-off parameter Λ for semi-stable decays.
Definition: decaytype.h:188
bool has_mother(ParticleTypePtr mother) const override
Definition: decaytype.cc:337
virtual ~DecayType()=default
Virtual Destructor.
ThreeBodyDecay(ParticleTypePtrList part_types, int l)
Construct a ThreeBodyDecay.
Definition: decaytype.cc:278
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:174
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:341
virtual bool has_particles(ParticleTypePtrList list) const =0
TwoBodyDecay represents a decay type with two final-state particles.
Definition: decaytype.h:92
TwoBodyDecayStable represents a decay type with two stable final-state particles. ...
Definition: decaytype.h:130
TwoBodyDecayUnstable represents a decay type with two unstable final-state particles.
Definition: decaytype.h:198
TwoBodyDecayStable(ParticleTypePtrList part_types, int l)
Construct a TwoBodyDecayStable.
Definition: decaytype.cc:76
ParticleTypePtr mother_
Type of the mother particle.
Definition: decaytype.h:312
A pointer-like interface to global references to ParticleType objects.
Definition: particletype.h:660
double width(double m0, double G0, double m) const override
Definition: decaytype.cc:169
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:149
double in_width(double m0, double G0, double m, double m1, double m2) const override
Definition: decaytype.cc:235
virtual bool has_mother(ParticleTypePtr mother) const
Definition: decaytype.h:54
Definition: action.h:24
double threshold() const
Definition: decaytype.h:105