herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
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/PhaseSpaceMode.h"
17#include "ThePEG/Helicity/LorentzPolarizationVector.h"
18#include "Herwig/Decay/ResonanceHelpers.h"
19
20namespace Herwig {
21
22using namespace ThePEG;
23
32
33public:
34
39
46 virtual int modeNumber(bool & cc, tcPDPtr parent,
47 const tPDVector & children) const;
48
58 double me2(const int ichan,const Particle & part,
59 const tPDVector & outgoing,
60 const vector<Lorentz5Momentum> & momenta,
61 MEOption meopt) const;
62
66 virtual void constructSpinInfo(const Particle & part,
68
74 virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
75
89 virtual double threeBodyMatrixElement(const int imode , const Energy2 q2,
90 const Energy2 s3, const Energy2 s2,
91 const Energy2 s1, const Energy m1,
92 const Energy m2, const Energy m3) const;
93
99 virtual void dataBaseOutput(ofstream & os,bool header) const;
100
101public:
102
110
116 void persistentInput(PersistentIStream & is, int version);
118
125 static void Init();
126
127protected:
128
135 virtual IBPtr clone() const {return new_ptr(*this);}
136
141 virtual IBPtr fullclone() const {return new_ptr(*this);}
143
144
145protected:
146
154 virtual void doinit();
155
160 virtual void doinitrun();
162
163private:
164
171 Complex rhoFormFactor(Energy2 q2,int ires) const {
172 Complex output(0.),norm(0.);
173 for(unsigned int ix=0;ix<3;++ix) norm += _rhowgts[ix];
174 if(ires<0) {
175 for(unsigned int ix=0;ix<3;++ix)
176 output+=_rhowgts[ix]*Resonance::BreitWignerPWave(q2,_rhomass[ix],_rhowidth[ix],_mpi,_mpi);
177 }
178 else {
179 assert(ires<3);
180 output=_rhowgts[ires]*Resonance::BreitWignerPWave(q2,_rhomass[ires],_rhowidth[ires],_mpi,_mpi);
181 }
182 return output/norm;
183 }
184
185private:
186
192
193private:
194
198 vector<Energy> _rhomass;
199
203 vector<Energy> _rhowidth;
204
208 vector<double> _rhowgts;
209
214
218 InvEnergy _coupling;
219
223 double _onemax;
224
228 double _twomax;
229
233 double _threemax;
234
238 vector<double> _onewgts;
239
243 vector<double> _twowgts;
244
248 vector<double> _threewgts;
249
253 Energy _mpi;
254
259
263 mutable vector<Helicity::LorentzPolarizationVector> _vectors;
264
265};
266
267}
268
269#endif /* HERWIG_a1SimpleDecayer_H */
Main class for Decayers implementing multi-channel phase space integration.
int imode() const
The mode being used for this decay.
MEOption
Enum for the matrix element option.
The a1SimpleDecayer class provides a simple model of the decay of the meson to three pions including...
virtual int modeNumber(bool &cc, tcPDPtr parent, const tPDVector &children) const
Which of the possible decays is required.
virtual void doinitrun()
Initialize this object.
Energy _mpi
The pion mass.
vector< double > _rhowgts
Weights for the different resonances.
RhoDMatrix _rho
Spin Density matrix.
vector< Energy > _rhowidth
The widths.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
double me2(const int ichan, const Particle &part, const tPDVector &outgoing, const vector< Lorentz5Momentum > &momenta, MEOption meopt) const
Return the matrix element squared for a given mode and phase-space channel.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
virtual void dataBaseOutput(ofstream &os, bool header) const
Output the setup information for the particle database.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
vector< double > _twowgts
Weights for the channels for the two charged pion channel.
bool _localparameters
Use local values of the parameters.
virtual IBPtr clone() const
Make a simple clone of this object.
virtual double threeBodyMatrixElement(const int imode, const Energy2 q2, const Energy2 s3, const Energy2 s2, const Energy2 s1, const Energy m1, const Energy m2, const Energy m3) const
The matrix element to be integrated for the three-body decays as a function of the invariant masses o...
double _onemax
Maximum weight for the one charged pion channel.
vector< Energy > _rhomass
The masses.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
InvEnergy _coupling
The overall coupling for the decay.
a1SimpleDecayer & operator=(const a1SimpleDecayer &)=delete
The assignment operator is private and must never be called.
virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode &dm) const
Method to return an object to calculate the 3 body partial width.
static void Init()
The standard Init function used to initialize the interfaces.
a1SimpleDecayer()
The default constructor.
vector< double > _onewgts
Weights for the channels for the one charged pion channel.
vector< Helicity::LorentzPolarizationVector > _vectors
Polarization vectors.
double _twomax
Maximum weight for the two charged pion channel.
Complex rhoFormFactor(Energy2 q2, int ires) const
The form factors.
double _threemax
Maximum weight for the three charged pion channel.
vector< double > _threewgts
Weights for the channels for the three charged pion channel.
virtual void constructSpinInfo(const Particle &part, ParticleVector outgoing) const
Construct the SpinInfos for the particles produced in the decay.
-*- C++ -*-
std::complex< double > Complex
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< tPDPtr > tPDVector
vector< PPtr > ParticleVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr