herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
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 "WeakDecayCurrent.h"
15 #include "Herwig/Utilities/Interpolator.h"
16 #include "Herwig/Utilities/Kinematics.h"
17 
18 namespace Herwig {
19 using namespace ThePEG;
20 
38 
43  friend class FourPionDefaultMatrixElement;
44 
45 public:
46 
51 
58  void persistentOutput(PersistentOStream & os) const;
59 
65  void persistentInput(PersistentIStream & is, int version);
67 
71  static void Init();
72 
73 public:
74 
77 
92  virtual bool createMode(int icharge,unsigned int imode,DecayPhaseSpaceModePtr mode,
93  unsigned int iloc,unsigned int ires,
94  DecayPhaseSpaceChannelPtr phase,Energy upp);
95 
105  virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
107 
117  virtual vector<LorentzPolarizationVectorE>
118  current(const int imode, const int ichan,Energy & scale,
119  const ParticleVector & decay, DecayIntegrator::MEOption meopt) const;
120 
126  virtual bool accept(vector<int> id);
127 
134  virtual unsigned int decayMode(vector<int> id);
135 
142  virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
143 
156  double threeBodyMatrixElement(const int iopt, const Energy2 q2,
157  const Energy2 s3, const Energy2 s2,
158  const Energy2 s1, const Energy m1,
159  const Energy m2, const Energy m3) const;
160 
161 protected:
162 
169  virtual IBPtr clone() const;
170 
175  virtual IBPtr fullclone() const;
177 
178 protected:
179 
187  virtual void doinit();
188 
192  virtual void doinitrun();
193 
197  virtual void doupdate();
199 
200 private:
201 
205  FourPionNovosibirskCurrent & operator=(const FourPionNovosibirskCurrent &) = delete;
206 
207 protected:
208 
209 
215  void inita1width(int iopt);
216 
222  double a1FormFactor(Energy2 q2) const {
223  return sqr((1.+_a1massolam2)/(1.+q2*_onedlam2));
224  }
225 
232  Complex sigmaBreitWigner(Energy2 q2,unsigned int iopt) const;
233 
239  Complex a1BreitWigner(Energy2 q2) const;
240 
246  Complex omegaBreitWigner(Energy2 q2) const;
247 
253  Complex rhoBreitWigner(Energy2 q2) const;
254 
260  Energy a1width(Energy2 q2) const {return (*_a1runinter)(q2);}
261 
271  t1(Lorentz5Momentum & q1,Lorentz5Momentum & q2,
272  Lorentz5Momentum & q3,Lorentz5Momentum & q4) const;
273 
284  t2(Lorentz5Momentum & q1,Lorentz5Momentum & q2,
285  Lorentz5Momentum & q3,Lorentz5Momentum & q4,
286  unsigned int iopt) const;
287 
297  t3(Lorentz5Momentum & q1,Lorentz5Momentum & q2,
298  Lorentz5Momentum & q3,Lorentz5Momentum & q4) const;
299 
306  InvEnergy6 gFunction(Energy2 q2, int ichan) const;
307 
311  Energy2 DParameter() const;
312 
316  double dhdq2Parameter() const;
317 
323  Energy2 hFunction(const Energy q) const;
324 
325 private:
326 
335 
340 
345 
351 
355  Energy _mpic;
356 
360  Energy _mpi0;
361 
365  Energy _rhomass;
366 
370  Energy _a1mass;
371 
375  Energy _omegamass;
376 
380  Energy _sigmamass;
381 
385  Energy _rhowidth;
386 
390  Energy _a1width;
391 
395  Energy _omegawidth;
396 
400  Energy _sigmawidth;
401 
406  Energy _intmass;
407 
412  Energy _intwidth;
413 
418 
422  double _zmag;
423 
427  double _zphase;
428 
432  Energy2 _lambda2;
433 
437  InvEnergy2 _onedlam2;
438 
443  double _a1massolam2;
444 
449  vector<Energy> _psigma;
450 
454  Energy2 _mpic2;
455 
459  Energy2 _mpi02;
460 
464  Energy2 _hm2;
465 
469  Energy2 _rhoD;
470 
474  Energy _prho;
475 
479  double _dhdq2m2;
480 
484  InvEnergy _aomega;
485 
489  InvEnergy _athreec;
490 
494  InvEnergy _aonec;
495 
499  double _bomega;
500 
504  double _bthreec;
505 
509  double _bonec;
510 
514  double _comega;
515 
519  double _cthreec;
520 
524  double _conec;
525 
529  vector<double> _omegaparam;
530 
535 
540 
544  vector<Energy> _a1runwidth;
545 
549  vector<Energy2> _a1runq2;
550 
555 
559  Energy _maxmass;
560 
564  Energy _maxcalc;
565 };
566 
567 }
568 
569 #endif /* HERWIG_FourPionNovosibirskCurrent_H */
570 
double a1FormFactor(Energy2 q2) const
Form foactor for the vertex.
Energy _a1mass
The mass of the for the current.
The WeakDecayCurrent class is the base class for the hadronic currents produced in weak decays...
double _zphase
The phase of the coupling.
vector< Energy > _psigma
The momentum of the pions in on-shell decay which is used in the calculation of the running width...
std::complex< double > Complex
bool _initializea1
whether or not to initialize the calculation of the width
double _cthreec
Magic number for the three charged pion current.
InvEnergy _athreec
Magic number for the three charged pion current.
The FourPionNovosibirskCurrent class implements the decay of the weak current to 4 pions using the ha...
Energy2 _hm2
The h function evaluated at the mass.
vector< Energy > _a1runwidth
The widths for the interpolation table for the running width.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
vector< Energy2 > _a1runq2
The values for the interpolation table for the running width.
InvEnergy _aonec
Magic number for the one charged pion current.
Energy2 _mpic2
The charged pion mass squared.
Energy _sigmamass
The mass of the for the current.
MEOption
Enum for the matrix element option.
bool _localparameters
use local values of the particle masses
Energy _prho
The momentum of the pions produced in on-shell decay.
Interpolator< double, Energy >::Ptr _Fthreec
The interpolator for the three charged pion current.
double _dhdq2m2
evaluates at for the .
Energy _maxmass
The maximum mass of the hadronic system.
double _bthreec
Magic number for the three charged pion current.
vector< tPDPtr > tPDVector
Energy2 _mpi02
The neutral pion mass squared.
double _conec
Magic number for the one charged pion current.
Energy a1width(Energy2 q2) const
Return the running width.
Energy _intmass
Mass for the intermediate in the phase-space, this is a technical parameter to improve the phase-spac...
vector< double > _omegaparam
magic numbers for the running omega width
Energy _rhomass
The mass of the for the current.
double _bomega
Magic number for the omega current.
Energy _omegamass
The mass of the for the current.
Interpolator< double, Energy >::Ptr _Fonec
The interpolator for the one charged pion current.
Energy _maxcalc
The maximum mass when the running width was calculated.
-*- C++ -*-
double _zmag
The magnitude of the coupling.
InvEnergy2 _onedlam2
The inverse of the mass parameter for the form-factor.
Energy2 _rhoD
The d parameter for the width.
Interpolator< Energy, Energy2 >::Ptr _a1runinter
The interpolator for the running width.
double _bonec
Magic number for the one charged pion current.
vector< PPtr > ParticleVector
Energy _intwidth
Width for the intermediate in the phase-space, this is a technical parameter to improve the phase-spa...
InvEnergy _aomega
Magic number for the omega current.
double _comega
Magic number for the omega current.
Interpolator< double, Energy >::Ptr _Fomega
Interpolating functions for the G functions of hep-ph/0201149.
Interpolator< double, Energy2 >::Ptr _Fsigma
The interpolator for the current.
double _a1massolam2
The physical mass divided by the mass parameter in the form-factor.
Energy2 _lambda2
The mass parameter for the form-factor.