herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
a1SimpleDecayer.h
1 // -*- C++ -*-
2 //
3 // a1SimpleDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2019 The Herwig Collaboration
5 //
6 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef HERWIG_a1SimpleDecayer_H
10 #define HERWIG_a1SimpleDecayer_H
11 //
12 // This is the declaration of the a1SimpleDecayer class.
13 //
14 
15 #include "Herwig/Decay/DecayIntegrator.h"
16 #include "Herwig/Decay/DecayPhaseSpaceMode.h"
17 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
18 
19 namespace Herwig {
20 
21 using namespace ThePEG;
22 
31 
32 public:
33 
38 
45  virtual int modeNumber(bool & cc, tcPDPtr parent,
46  const tPDVector & children) const;
47 
56  double me2(const int ichan,const Particle & part,
57  const ParticleVector& decay, MEOption meopt) const;
58 
64  virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
65 
79  virtual double threeBodyMatrixElement(const int imode , const Energy2 q2,
80  const Energy2 s3, const Energy2 s2,
81  const Energy2 s1, const Energy m1,
82  const Energy m2, const Energy m3) const;
83 
89  virtual void dataBaseOutput(ofstream & os,bool header) const;
90 
91 public:
92 
99  void persistentOutput(PersistentOStream & os) const;
100 
106  void persistentInput(PersistentIStream & is, int version);
108 
115  static void Init();
116 
117 protected:
118 
125  virtual IBPtr clone() const {return new_ptr(*this);}
126 
131  virtual IBPtr fullclone() const {return new_ptr(*this);}
133 
134 
135 protected:
136 
144  virtual void doinit();
145 
150  virtual void doinitrun();
152 
153 private:
154 
160  Complex rhoBreitWigner(Energy2 q2, unsigned int ires) const {
161  Energy q(sqrt(q2));
162  Energy mass = _rhomass[ires], width = _rhowidth[ires];
163  Energy pcm0(Kinematics::pstarTwoBodyDecay(mass,_mpi,_mpi));
164  Energy pcm = 2.*_mpi<q ? Kinematics::pstarTwoBodyDecay(q,_mpi,_mpi) : ZERO;
165  Energy gamrun(width*mass*Math::Pow<3>(pcm/pcm0)/q);
166  return -sqr(mass)/complex<Energy2>(q2-mass*mass,mass*gamrun);
167  }
168 
175  Complex rhoFormFactor(Energy2 q2,int ires) const;
176 
177 private:
178 
183  a1SimpleDecayer & operator=(const a1SimpleDecayer &) = delete;
184 
185 private:
186 
190  vector<Energy> _rhomass;
191 
195  vector<Energy> _rhowidth;
196 
200  vector<double> _rhowgts;
201 
206 
210  InvEnergy _coupling;
211 
215  mutable double _onemax;
216 
220  mutable double _twomax;
221 
225  mutable double _threemax;
226 
230  mutable vector<double> _onewgts;
231 
235  mutable vector<double> _twowgts;
236 
240  mutable vector<double> _threewgts;
241 
245  Energy _mpi;
246 
250  mutable RhoDMatrix _rho;
251 
255  mutable vector<Helicity::LorentzPolarizationVector> _vectors;
256 
257 };
258 
259 }
260 
261 #endif /* HERWIG_a1SimpleDecayer_H */
vector< double > _onewgts
Weights for the channels for the one charged pion channel.
double sqrt(int x)
double _twomax
Maximum weight for the two charged pion channel.
std::complex< double > Complex
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
vector< Energy > _rhowidth
The widths.
vector< Helicity::LorentzPolarizationVector > _vectors
Polarization vectors.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
The a1SimpleDecayer class provides a simple model of the decay of the meson to three pions including...
MEOption
Enum for the matrix element option.
virtual IBPtr clone() const
Make a simple clone of this object.
vector< double > _rhowgts
Weights for the different resonances.
Complex rhoBreitWigner(Energy2 q2, unsigned int ires) const
Breit-Wigner for the .
vector< tPDPtr > tPDVector
bool _localparameters
Use local values of the parameters.
Main class for Decayers implementing multi-channel phase space integration.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
Energy pstarTwoBodyDecay(const Energy M, const Energy m1, const Energy m2)
For the two body decay M -> m1 + m2 it gives the module of the 3-momentum of the decay product in the...
Definition: Kinematics.h:93
Energy _mpi
The pion mass.
vector< double > _twowgts
Weights for the channels for the two charged pion channel.
double _onemax
Maximum weight for the one charged pion channel.
RhoDMatrix _rho
Spin Density matrix.
vector< Energy > _rhomass
The masses.
vector< double > _threewgts
Weights for the channels for the three charged pion channel.
-*- C++ -*-
InvEnergy _coupling
The overall coupling for the decay.
double _threemax
Maximum weight for the three charged pion channel.
vector< PPtr > ParticleVector
constexpr ZeroUnit ZERO