herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
FourPionNovosibirskCurrent.h
1// -*- C++ -*-
2//
3// FourPionNovosibirskCurrent.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_FourPionNovosibirskCurrent_H
10#define HERWIG_FourPionNovosibirskCurrent_H
11//
12// This is the declaration of the FourPionNovosibirskCurrent class.
13//
14#include "WeakCurrent.h"
15#include "Herwig/Utilities/Interpolator.h"
16#include "Herwig/Utilities/Kinematics.h"
17
18namespace Herwig {
19using namespace ThePEG;
20
38
44
45public:
46
51
59
65 void persistentInput(PersistentIStream & is, int version);
67
71 static void Init();
72
73public:
74
95 virtual bool createMode(int icharge, tcPDPtr resonance,
96 FlavourInfo flavour,
97 unsigned int imode,PhaseSpaceModePtr mode,
98 unsigned int iloc,int ires,
99 PhaseSpaceChannel phase, Energy upp );
100
110 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
112
113
127 virtual vector<LorentzPolarizationVectorE>
128 current(tcPDPtr resonance,
129 FlavourInfo flavour,
130 const int imode, const int ichan,Energy & scale,
131 const tPDVector & outgoing,
132 const vector<Lorentz5Momentum> & momenta,
133 DecayIntegrator::MEOption meopt) const;
134
140 virtual bool accept(vector<int> id);
141
148 virtual unsigned int decayMode(vector<int> id);
149
156 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
157
170 double threeBodyMatrixElement(const int iopt, const Energy2 q2,
171 const Energy2 s3, const Energy2 s2,
172 const Energy2 s1, const Energy m1,
173 const Energy m2, const Energy m3) const;
174
175protected:
176
183 virtual IBPtr clone() const;
184
189 virtual IBPtr fullclone() const;
191
192protected:
193
201 virtual void doinit();
202
206 virtual void doinitrun();
207
211 virtual void doupdate();
213
214private:
215
220
221protected:
222
223
229 void inita1width(int iopt);
230
236 double a1FormFactor(Energy2 q2) const {
237 return sqr((1.+_a1massolam2)/(1.+q2*_onedlam2));
238 }
239
246 Complex sigmaBreitWigner(Energy2 q2,unsigned int iopt) const;
247
253 Complex a1BreitWigner(Energy2 q2) const;
254
260 Complex omegaBreitWigner(Energy2 q2) const;
261
267 Complex rhoBreitWigner(Energy2 q2) const;
268
274 Energy a1width(Energy2 q2) const {return (*_a1runinter)(q2);}
275
285 t1(Lorentz5Momentum & q1,Lorentz5Momentum & q2,
286 Lorentz5Momentum & q3,Lorentz5Momentum & q4) const;
287
298 t2(Lorentz5Momentum & q1,Lorentz5Momentum & q2,
299 Lorentz5Momentum & q3,Lorentz5Momentum & q4,
300 unsigned int iopt) const;
301
311 t3(Lorentz5Momentum & q1,Lorentz5Momentum & q2,
312 Lorentz5Momentum & q3,Lorentz5Momentum & q4) const;
313
320 InvEnergy6 gFunction(Energy2 q2, int ichan) const;
321
325 Energy2 DParameter() const;
326
330 double dhdq2Parameter() const;
331
337 Energy2 hFunction(const Energy q) const;
338
339private:
340
349
354
359
365
369 Energy _mpic;
370
374 Energy _mpi0;
375
379 Energy _rhomass;
380
384 Energy _a1mass;
385
390
395
399 Energy _rhowidth;
400
404 Energy _a1width;
405
410
415
420 Energy _intmass;
421
426 Energy _intwidth;
427
432
436 double _zmag;
437
441 double _zphase;
442
446 Energy2 _lambda2;
447
451 InvEnergy2 _onedlam2;
452
458
463 vector<Energy> _psigma;
464
468 Energy2 _mpic2;
469
473 Energy2 _mpi02;
474
478 Energy2 _hm2;
479
483 Energy2 _rhoD;
484
488 Energy _prho;
489
493 double _dhdq2m2;
494
498 InvEnergy _aomega;
499
503 InvEnergy _athreec;
504
508 InvEnergy _aonec;
509
513 double _bomega;
514
518 double _bthreec;
519
523 double _bonec;
524
528 double _comega;
529
533 double _cthreec;
534
538 double _conec;
539
543 vector<double> _omegaparam;
544
549
554
558 vector<Energy> _a1runwidth;
559
563 vector<Energy2> _a1runq2;
564
569
573 Energy _maxmass;
574
578 Energy _maxcalc;
579};
580
581}
582
583#endif /* HERWIG_FourPionNovosibirskCurrent_H */
584
MEOption
Enum for the matrix element option.
The FourPionNovosibirskCurrent class implements the decay of the weak current to 4 pions using the ha...
vector< Energy2 > _a1runq2
The values for the interpolation table for the running width.
Complex omegaBreitWigner(Energy2 q2) const
The Breit-Wigner for the .
double dhdq2Parameter() const
The function in the rho propagator evaluated at .
void inita1width(int iopt)
Initialize the width.
Energy _a1mass
The mass of the for the current.
vector< Energy > _psigma
The momentum of the pions in on-shell decay which is used in the calculation of the running width.
Interpolator< double, Energy >::Ptr _Fthreec
The interpolator for the three charged pion current.
Energy2 DParameter() const
The d parameter in the propagator.
Energy _intmass
Mass for the intermediate in the phase-space, this is a technical parameter to improve the phase-spac...
double _conec
Magic number for the one charged pion current.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
LorentzVector< complex< Energy5 > > t1(Lorentz5Momentum &q1, Lorentz5Momentum &q2, Lorentz5Momentum &q3, Lorentz5Momentum &q4) const
The current used in calculating the current.
Energy _prho
The momentum of the pions produced in on-shell decay.
InvEnergy6 gFunction(Energy2 q2, int ichan) const
The G functions of hep-ph/0201149.
virtual void doinitrun()
Initialize this object to the begining of the run phase.
double _bonec
Magic number for the one charged pion current.
virtual void doupdate()
Check sanity of the object during the setup phase.
Interpolator< double, Energy >::Ptr _Fonec
The interpolator for the one charged pion current.
Complex sigmaBreitWigner(Energy2 q2, unsigned int iopt) const
Breit-Wigner for the meson.
Energy _sigmamass
The mass of the for the current.
virtual void dataBaseOutput(ofstream &os, bool header, bool create) const
Output the setup information for the particle database.
Energy _maxmass
The maximum mass of the hadronic system.
LorentzVector< complex< Energy5 > > t3(Lorentz5Momentum &q1, Lorentz5Momentum &q2, Lorentz5Momentum &q3, Lorentz5Momentum &q4) const
The current used in calculating the current.
double _bthreec
Magic number for the three charged pion current.
Energy _rhomass
The mass of the for the current.
double _comega
Magic number for the omega current.
virtual void doinit()
Initialize this object after the setup phase before saving and EventGenerator to disk.
FourPionNovosibirskCurrent & operator=(const FourPionNovosibirskCurrent &)=delete
Private and non-existent assignment operator.
Energy2 _lambda2
The mass parameter for the form-factor.
Energy2 _rhoD
The d parameter for the width.
bool _localparameters
use local values of the particle masses
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.
FourPionNovosibirskCurrent()
Default constructor.
Energy2 _mpi02
The neutral pion mass squared.
double _bomega
Magic number for the omega current.
double threeBodyMatrixElement(const int iopt, 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 evaluate the running width.
Complex rhoBreitWigner(Energy2 q2) const
The Breit-Wigner for the .
bool _initializea1
whether or not to initialize the calculation of the width
virtual IBPtr clone() const
Make a simple clone of this object.
InvEnergy _aonec
Magic number for the one charged pion current.
Energy2 _mpic2
The charged pion mass squared.
Energy a1width(Energy2 q2) const
Return the running width.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
double _cthreec
Magic number for the three charged pion current.
InvEnergy _athreec
Magic number for the three charged pion current.
double a1FormFactor(Energy2 q2) const
Form foactor for the vertex.
double _a1massolam2
The physical mass divided by the mass parameter in the form-factor.
virtual bool accept(vector< int > id)
Accept the decay.
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia)
The particles produced by the current.
virtual unsigned int decayMode(vector< int > id)
Return the decay mode number for a given set of particles in the current.
double _zmag
The magnitude of the coupling.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
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.
Interpolator< Energy, Energy2 >::Ptr _a1runinter
The interpolator for the running width.
Interpolator< double, Energy >::Ptr _Fomega
Interpolating functions for the G functions of hep-ph/0201149.
Energy _omegamass
The mass of the for the current.
InvEnergy _aomega
Magic number for the omega current.
Energy2 _hm2
The h function evaluated at the mass.
LorentzVector< complex< Energy5 > > t2(Lorentz5Momentum &q1, Lorentz5Momentum &q2, Lorentz5Momentum &q3, Lorentz5Momentum &q4, unsigned int iopt) const
The current used in calculating the current.
static void Init()
Standard Init function used to initialize the interfaces.
Interpolator< double, Energy2 >::Ptr _Fsigma
The interpolator for the current.
Energy _intwidth
Width for the intermediate in the phase-space, this is a technical parameter to improve the phase-spa...
Energy2 hFunction(const Energy q) const
The h function in the propagator.
Energy _maxcalc
The maximum mass when the running width was calculated.
vector< double > _omegaparam
magic numbers for the running omega width
friend class FourPionDefaultMatrixElement
The FourPionDefaultMatrixElement class is a friend so it can perform the integration.
Complex a1BreitWigner(Energy2 q2) const
The breit wigner.
vector< Energy > _a1runwidth
The widths for the interpolation table for the running width.
InvEnergy2 _onedlam2
The inverse of the mass parameter for the form-factor.
double _zphase
The phase of the coupling.
Ptr< Interpolator< ValT, ArgT > >::pointer Ptr
Pointer to an Interpolator.
Definition: Interpolator.h:38
This class is designed to store the information needed for a given phase-space channel for use by the...
The WeakCurrent class is the base class for the hadronic currents produced in weak decays.
Definition: WeakCurrent.h:59
-*- C++ -*-
std::complex< double > Complex
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< tPDPtr > tPDVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
constexpr auto sqr(const T &x) -> decltype(x *x)