herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.2.1
Decay
ScalarMeson
EtaPiPiGammaDecayer.h
1
// -*- C++ -*-
2
//
3
// EtaPiPiGammaDecayer.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_EtaPiPiGammaDecayer_H
10
#define HERWIG_EtaPiPiGammaDecayer_H
11
// This is the declaration of the EtaPiPiGammaDecayer class.
12
13
#include "Herwig/Utilities/Kinematics.h"
14
#include "Herwig/Decay/DecayIntegrator.h"
15
#include "Herwig/Decay/DecayPhaseSpaceMode.h"
16
#include "Herwig/Utilities/Interpolator.h"
17
#include "ThePEG/Helicity/LorentzPolarizationVector.h"
18
19
namespace
Herwig
{
20
using namespace
ThePEG
;
21
56
class
EtaPiPiGammaDecayer
:
public
DecayIntegrator
{
57
58
public
:
59
63
EtaPiPiGammaDecayer
();
64
71
virtual
int
modeNumber(
bool
& cc,
tcPDPtr
parent,
72
const
tPDVector
& children)
const
;
73
82
double
me2(
const
int
ichan,
const
Particle
& part,
83
const
ParticleVector
& decay,
MEOption
meopt)
const
;
84
90
virtual
WidthCalculatorBasePtr threeBodyMEIntegrator(
const
DecayMode
& dm)
const
;
91
105
virtual
double
threeBodyMatrixElement(
const
int
imode,
const
Energy2 q2,
106
const
Energy2 s3,
const
Energy2 s2,
107
const
Energy2 s1,
const
Energy m1,
108
const
Energy m2,
const
Energy m3)
const
;
109
115
virtual
void
dataBaseOutput(ofstream & os,
bool
header)
const
;
116
117
public
:
118
125
void
persistentOutput(
PersistentOStream
& os)
const
;
126
132
void
persistentInput(
PersistentIStream
& is,
int
version);
134
138
static
void
Init();
139
140
protected
:
141
148
virtual
IBPtr
clone
()
const
{
return
new_ptr(*
this
);}
149
154
virtual
IBPtr
fullclone
()
const
{
return
new_ptr(*
this
);}
156
157
protected
:
158
161
167
virtual
void
doinit();
168
172
virtual
void
doinitrun();
174
175
private
:
176
180
EtaPiPiGammaDecayer
& operator=(
const
EtaPiPiGammaDecayer
&) =
delete
;
181
182
private
:
183
189
Complex
analyticOmnes
(Energy2 s)
const
{
190
Energy2 mpi2(_mpi*_mpi),mrho2(_mrho*_mrho);
191
double
root, pi2 =
sqr
(Constants::pi);
192
Complex
f,ii(0.,1.);
193
double
pre(mpi2/12./pi2/_fpi/_fpi);
194
if
(s>4.*mpi2) {
195
// real piece
196
root=
sqrt
(1.-4.*mpi2/s);
197
f=(1.-0.25*s/mpi2)*root*log((root+1.)/(-root+1.))-2.;
198
f *=pre;
199
// imaginary piece
200
f += ii*s/mrho2*_rhoconst/8.*
pow
(root,3);
201
}
202
else
{
203
root=
sqrt
(4.*mpi2/s-1.);
204
f=2.*(1.-0.25*s/mpi2)*root*atan2(1.,root)-2.;
205
f *=pre;
206
}
207
return
1.-s/mrho2-s/48./pi2/_fpi/_fpi*log(mrho2/mpi2)-f;
208
}
209
215
Complex
experimentalOmnes
(Energy2 s)
const
{
216
if
(!_oreal) {
217
_oreal =
make_InterpolatorPtr
(_omnesfunctionreal,_omnesenergy,3);
218
_oimag =
make_InterpolatorPtr
(_omnesfunctionimag,_omnesenergy,3);
219
}
220
Energy q(
sqrt
(s));
Complex
ii(0.,1.);
221
return
(*_oreal)(q)+ii*(*_oimag)(q);
222
}
223
224
private
:
225
229
Energy
_fpi
;
230
234
vector<int>
_incoming
;
235
239
vector<double>
_coupling
;
240
244
vector<double>
_maxweight
;
245
249
vector<int>
_option
;
250
254
InvEnergy2
_aconst
;
255
259
double
_cconst
;
260
264
Energy
_mrho
;
265
269
Energy
_rhowidth
;
270
274
double
_rhoconst
;
275
279
Energy
_mpi
;
280
284
bool
_localparameters
;
285
289
vector<Energy>
_energy
;
290
294
vector<double>
_phase
;
295
299
vector<Energy>
_omnesenergy
;
300
304
vector<double>
_omnesfunctionreal
;
305
309
vector<double>
_omnesfunctionimag
;
310
314
bool
_initialize
;
315
319
unsigned
int
_npoints
;
320
328
mutable
Interpolator<double,Energy>::Ptr
_oreal
;
329
333
mutable
Interpolator<double,Energy>::Ptr
_oimag
;
335
339
Energy
_epscut
;
340
344
unsigned
int
_nsizea
;
345
349
unsigned
int
_nsizeb
;
350
354
mutable
RhoDMatrix
_rho
;
355
359
mutable
vector<Helicity::LorentzPolarizationVector>
_vectors
;
360
};
361
366
struct
OmnesIntegrand
{
367
373
OmnesIntegrand
(
Interpolator<double,Energy>::Ptr
inter, Energy2 cut) {
374
_interpolator=inter;
375
_precision=cut;
376
}
377
381
void
setScale
(Energy2 in) { _s=in;}
382
386
InvEnergy4 operator ()(Energy2 xpoint)
const
{
387
InvEnergy4 output = InvEnergy4();
388
Energy q(
sqrt
(xpoint));
389
if
(abs(xpoint-_s)>_precision)
390
output= (*_interpolator)(q)/xpoint/(xpoint-_s);
391
return
output;
392
}
394
typedef
InvEnergy4
ValType
;
396
typedef
Energy2
ArgType
;
397
401
Interpolator<double,Energy>::Ptr
_interpolator
;
402
406
Energy2
_s
;
407
411
Energy2
_precision
;
412
};
413
}
414
415
#endif
/* HERWIG_EtaPiPiGammaDecayer_H */
Herwig::EtaPiPiGammaDecayer::fullclone
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition:
EtaPiPiGammaDecayer.h:154
Herwig::OmnesIntegrand::setScale
void setScale(Energy2 in)
Set the scale.
Definition:
EtaPiPiGammaDecayer.h:381
ThePEG::PersistentIStream
Herwig::EtaPiPiGammaDecayer::_oimag
Interpolator< double, Energy >::Ptr _oimag
The interpolator for the imaginary part.
Definition:
EtaPiPiGammaDecayer.h:333
Herwig::EtaPiPiGammaDecayer::_option
vector< int > _option
The option for the energy dependence of the prefactor.
Definition:
EtaPiPiGammaDecayer.h:249
sqrt
double sqrt(int x)
Herwig::EtaPiPiGammaDecayer::_energy
vector< Energy > _energy
Energy values for the experimental data on the phase shift.
Definition:
EtaPiPiGammaDecayer.h:289
ThePEG::Complex
std::complex< double > Complex
ThePEG::Particle
Herwig::OmnesIntegrand::_interpolator
Interpolator< double, Energy >::Ptr _interpolator
The interpolator.
Definition:
EtaPiPiGammaDecayer.h:401
Herwig::EtaPiPiGammaDecayer::_coupling
vector< double > _coupling
Coupling for the decay, .
Definition:
EtaPiPiGammaDecayer.h:239
pow
constexpr double pow(double x, ExponentT p)
Herwig::EtaPiPiGammaDecayer
The EtaPiPiGammaDecayer class implements the decay of the or to using either a VMD type model or a...
Definition:
EtaPiPiGammaDecayer.h:56
Herwig::EtaPiPiGammaDecayer::_mpi
Energy _mpi
The .
Definition:
EtaPiPiGammaDecayer.h:279
ThePEG::PersistentOStream
Herwig::EtaPiPiGammaDecayer::_rhowidth
Energy _rhowidth
The width.
Definition:
EtaPiPiGammaDecayer.h:269
ThePEG::IBPtr
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
sqr
constexpr auto sqr(const T &x) -> decltype(x *x)
Herwig::Interpolator
Definition:
Interpolator.h:31
ThePEG
Herwig::EtaPiPiGammaDecayer::_omnesenergy
vector< Energy > _omnesenergy
Energy values for the interpolation table for the Omnes function.
Definition:
EtaPiPiGammaDecayer.h:299
Herwig::EtaPiPiGammaDecayer::_nsizea
unsigned int _nsizea
Size of the vectors for the experimental data.
Definition:
EtaPiPiGammaDecayer.h:344
Herwig::make_InterpolatorPtr
Interpolator< ValT, ArgT >::Ptr make_InterpolatorPtr(size_t size, const double f[], ValT funit, const double x[], ArgT xunit, unsigned int order)
helper function to create InterpolatorPtr easily from bare arrays (analogous to make_pair() ) ...
Definition:
Interpolator.h:206
Herwig::EtaPiPiGammaDecayer::analyticOmnes
Complex analyticOmnes(Energy2 s) const
The analytic Omnes function, .
Definition:
EtaPiPiGammaDecayer.h:189
Herwig::EtaPiPiGammaDecayer::_vectors
vector< Helicity::LorentzPolarizationVector > _vectors
Polarization vectors for the photon.
Definition:
EtaPiPiGammaDecayer.h:359
Herwig::EtaPiPiGammaDecayer::_epscut
Energy _epscut
Cut-off parameter for the integral of the experimental function.
Definition:
EtaPiPiGammaDecayer.h:339
Herwig::OmnesIntegrand
A simple struct to provide the integrand for the integral .
Definition:
EtaPiPiGammaDecayer.h:366
Herwig::OmnesIntegrand::ArgType
Energy2 ArgType
Argument type for the GaussianIntegrator.
Definition:
EtaPiPiGammaDecayer.h:396
Herwig::DecayIntegrator::MEOption
MEOption
Enum for the matrix element option.
Definition:
DecayIntegrator.h:79
Herwig::EtaPiPiGammaDecayer::_omnesfunctionimag
vector< double > _omnesfunctionimag
Imaginary part of the Omnes function for the interpolation table.
Definition:
EtaPiPiGammaDecayer.h:309
Herwig::EtaPiPiGammaDecayer::_maxweight
vector< double > _maxweight
The maximum weight.
Definition:
EtaPiPiGammaDecayer.h:244
Herwig::EtaPiPiGammaDecayer::clone
virtual IBPtr clone() const
Make a simple clone of this object.
Definition:
EtaPiPiGammaDecayer.h:148
Herwig::OmnesIntegrand::ValType
InvEnergy4 ValType
Return type for the GaussianIntegrator.
Definition:
EtaPiPiGammaDecayer.h:394
Herwig::EtaPiPiGammaDecayer::_initialize
bool _initialize
set up of the interpolation table
Definition:
EtaPiPiGammaDecayer.h:314
ThePEG::tPDVector
vector< tPDPtr > tPDVector
Herwig::OmnesIntegrand::OmnesIntegrand
OmnesIntegrand(Interpolator< double, Energy >::Ptr inter, Energy2 cut)
constructor with the interpolator and precision
Definition:
EtaPiPiGammaDecayer.h:373
Herwig::EtaPiPiGammaDecayer::_npoints
unsigned int _npoints
Number of points for the intepolation of the experimental Omnes function.
Definition:
EtaPiPiGammaDecayer.h:319
Herwig::DecayIntegrator
Main class for Decayers implementing multi-channel phase space integration.
Definition:
DecayIntegrator.h:62
ThePEG::tcPDPtr
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
Herwig::EtaPiPiGammaDecayer::_rho
RhoDMatrix _rho
Spin densit matrix.
Definition:
EtaPiPiGammaDecayer.h:354
Herwig::EtaPiPiGammaDecayer::experimentalOmnes
Complex experimentalOmnes(Energy2 s) const
The experimental Omnes function, .
Definition:
EtaPiPiGammaDecayer.h:215
Herwig::EtaPiPiGammaDecayer::_phase
vector< double > _phase
Experimental values of the phase shift.
Definition:
EtaPiPiGammaDecayer.h:294
Herwig::EtaPiPiGammaDecayer::_incoming
vector< int > _incoming
the PDG code for the incoming particle
Definition:
EtaPiPiGammaDecayer.h:234
Herwig::OmnesIntegrand::_s
Energy2 _s
The scale.
Definition:
EtaPiPiGammaDecayer.h:406
Herwig::EtaPiPiGammaDecayer::_nsizeb
unsigned int _nsizeb
Size of the vectors for the interpolation tables.
Definition:
EtaPiPiGammaDecayer.h:349
Herwig::EtaPiPiGammaDecayer::_aconst
InvEnergy2 _aconst
The constants for the omnes function form.
Definition:
EtaPiPiGammaDecayer.h:254
Herwig::EtaPiPiGammaDecayer::_mrho
Energy _mrho
The mass.
Definition:
EtaPiPiGammaDecayer.h:264
Herwig::EtaPiPiGammaDecayer::_cconst
double _cconst
The constants for the Omnes function form.
Definition:
EtaPiPiGammaDecayer.h:259
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
ThePEG::DecayMode
Herwig::EtaPiPiGammaDecayer::_oreal
Interpolator< double, Energy >::Ptr _oreal
Interpolators for the experimental Omnes function.
Definition:
EtaPiPiGammaDecayer.h:328
ThePEG::ParticleVector
vector< PPtr > ParticleVector
ThePEG::RhoDMatrix
Herwig::EtaPiPiGammaDecayer::_rhoconst
double _rhoconst
Constant for the running width.
Definition:
EtaPiPiGammaDecayer.h:274
Herwig::EtaPiPiGammaDecayer::_fpi
Energy _fpi
the pion decay constant, .
Definition:
EtaPiPiGammaDecayer.h:229
Herwig::EtaPiPiGammaDecayer::_omnesfunctionreal
vector< double > _omnesfunctionreal
Real part of the Omnes function for the interpolation table.
Definition:
EtaPiPiGammaDecayer.h:304
Herwig::EtaPiPiGammaDecayer::_localparameters
bool _localparameters
Use local values of the parameters.
Definition:
EtaPiPiGammaDecayer.h:284
Herwig::OmnesIntegrand::_precision
Energy2 _precision
The precision.
Definition:
EtaPiPiGammaDecayer.h:411
Generated on Sat Apr 11 2020 14:50:29 for Herwig by
1.8.13