herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
TwoPionPhotonCurrent.h
1// -*- C++ -*-
2//
3// TwoPionPhotonCurrent.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_TwoPionPhotonCurrent_H
10#define HERWIG_TwoPionPhotonCurrent_H
11//
12// This is the declaration of the TwoPionPhotonCurrent class.
13//
14#include "WeakCurrent.h"
15
16namespace Herwig {
17using namespace ThePEG;
18
61
62public:
63
68
76
82 void persistentInput(PersistentIStream & is, int version);
84
88 static void Init();
89
90public:
91
112 virtual bool createMode(int icharge, tcPDPtr resonance,
113 FlavourInfo flavour,
114 unsigned int imode,PhaseSpaceModePtr mode,
115 unsigned int iloc,int ires,
116 PhaseSpaceChannel phase, Energy upp );
117
127 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
129
143 virtual vector<LorentzPolarizationVectorE>
144 current(tcPDPtr resonance,
145 FlavourInfo flavour,
146 const int imode, const int ichan,Energy & scale,
147 const tPDVector & outgoing,
148 const vector<Lorentz5Momentum> & momenta,
149 DecayIntegrator::MEOption meopt) const;
150
154 virtual void constructSpinInfo(ParticleVector decay) const;
155
161 virtual bool accept(vector<int> id);
162
169 virtual unsigned int decayMode(vector<int> id);
170
177 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
178
179protected:
180
187 virtual IBPtr clone() const {return new_ptr(*this);}
188
193 virtual IBPtr fullclone() const {return new_ptr(*this);}
195
196private:
197
202
203private:
204
210 complex<InvEnergy> FFunction(Energy2 q2) const {
211 complex<InvEnergy2> output(ZERO);
212 for(unsigned int ix=0; ix<_resweights.size();++ix) {
213 output -= _resweights[ix]*BreitWigner(q2,ix);
214 }
215 return output*_grho*_grhoomegapi*sqrt(2.);
216 }
217
225 complex<InvEnergy2> BreitWigner(Energy2 q2,unsigned int ires) const {
226 static const Complex ii(0.,1.);
227 complex<Energy2> denom;
228 if(ires<_rhomasses.size()) {
229 denom = q2-_rhomasses[ires]*_rhomasses[ires]+ii*_rhomasses[ires]*_rhowidths[ires];
230 }
231 else if(ires==10) {
233 }
234 else assert(false);
235 return 1./denom;
236 }
237
238private:
239
243 Energy2 _grho;
244
248 InvEnergy _grhoomegapi;
249
253 vector<double> _resweights;
254
258 vector<Energy> _rhomasses;
259
263 vector<Energy> _rhowidths;
264
269
274
279 Energy _intmass;
280
285 Energy _intwidth;
286
287};
288
289}
290
291
292#endif /* HERWIG_TwoPionPhotonCurrent_H */
MEOption
Enum for the matrix element option.
This class is designed to store the information needed for a given phase-space channel for use by the...
This class implements the decay current for via an intermediate .
virtual IBPtr clone() const
Make a simple clone of this object.
Energy _intmass
Mass for the intermediate in the phase-space, this is a technical parameter to improve the phase-spac...
virtual vector< LorentzPolarizationVectorE > current(tcPDPtr resonance, FlavourInfo flavour, const int imode, const int ichan, Energy &scale, const tPDVector &outgoing, const vector< Lorentz5Momentum > &momenta, DecayIntegrator::MEOption meopt) const
Hadronic current.
TwoPionPhotonCurrent()
Default constructor.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
vector< double > _resweights
Weights of the different rho resonances in the current.
InvEnergy _grhoomegapi
Coupling of the rho to the omega and a pion, .
virtual void constructSpinInfo(ParticleVector decay) const
Construct the SpinInfo for the decay products.
static void Init()
Standard Init function used to initialize the interfaces.
complex< InvEnergy2 > BreitWigner(Energy2 q2, unsigned int ires) const
Fixed width Breit wigner.
virtual unsigned int decayMode(vector< int > id)
Return the decay mode number for a given set of particles in the current.
vector< Energy > _rhowidths
Widths of the resonances.
complex< InvEnergy > FFunction(Energy2 q2) const
Calculate the function at a given scale.
virtual bool accept(vector< int > id)
Accept the decay.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
TwoPionPhotonCurrent & operator=(const TwoPionPhotonCurrent &)=delete
Private and non-existent assignment operator.
vector< Energy > _rhomasses
Masses of the resonances.
Energy2 _grho
Coupling of the rho to the photon, .
virtual bool createMode(int icharge, tcPDPtr resonance, FlavourInfo flavour, unsigned int imode, PhaseSpaceModePtr mode, unsigned int iloc, int ires, PhaseSpaceChannel phase, Energy upp)
Complete the construction of the decay mode for integration.classes inheriting from this one.
virtual void dataBaseOutput(ofstream &os, bool header, bool create) const
Output the setup information for the particle database.
Energy _intwidth
Width for the intermediate in the phase-space, this is a technical parameter to improve the phase-spa...
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia)
The particles produced by the current.
The WeakCurrent class is the base class for the hadronic currents produced in weak decays.
Definition: WeakCurrent.h:59
-*- C++ -*-
double sqrt(int x)
std::complex< double > Complex
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< tPDPtr > tPDVector
vector< PPtr > ParticleVector
constexpr ZeroUnit ZERO
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr