herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
ThreePionCLEOCurrent.h
1 // -*- C++ -*-
2 //
3 // ThreePionCLEOCurrent.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 THEPEG_ThreePionCLEOCurrent_H
10 #define THEPEG_ThreePionCLEOCurrent_H
11 //
12 // This is the declaration of the ThreePionCLEOCurrent class.
13 //
14 #include "ThreeMesonCurrentBase.h"
15 #include "Herwig/Utilities/Interpolator.h"
16 #include "Herwig/Utilities/Kinematics.h"
17 #include "ThePEG/StandardModel/StandardModelBase.h"
18 
19 namespace Herwig {
20 using namespace ThePEG;
21 
100 
105  friend class ThreePionCLEOa1MatrixElement;
106 
107 public:
108 
113 
120  void persistentOutput(PersistentOStream & os) const;
121 
127  void persistentInput(PersistentIStream & is, int version);
129 
133  static void Init();
134 
135 public:
136 
139 
154  virtual bool createMode(int icharge,unsigned int imode,DecayPhaseSpaceModePtr mode,
155  unsigned int iloc,unsigned int ires,
156  DecayPhaseSpaceChannelPtr phase,Energy upp);
158 
165  virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
166 
179  double threeBodyMatrixElement(const int iopt, const Energy2 q2,
180  const Energy2 s3, const Energy2 s2,
181  const Energy2 s1, const Energy m1,
182  const Energy m2, const Energy m3) const;
183 
184 protected:
185 
190  virtual bool acceptMode(int) const;
191 
202  virtual FormFactors calculateFormFactors(const int ichan,const int imode,Energy2 q2,
203  Energy2 s1,Energy2 s2,Energy2 s3) const;
204 
218  void CLEOFormFactor(int imode,int ichan,Energy2 q2,Energy2 s1, Energy2 s2,
219  Energy2 s3,Complex & F1, Complex & F2, Complex & F3) const;
220 
221 protected:
222 
229  virtual IBPtr clone() const {return new_ptr(*this);}
230 
235  virtual IBPtr fullclone() const {return new_ptr(*this);}
237 
238 protected:
239 
247  virtual void doinit();
248 
252  virtual void doinitrun();
253 
257  virtual void doupdate();
259 
260 private:
261 
265  ThreePionCLEOCurrent & operator=(const ThreePionCLEOCurrent &) = delete;
266 
267 private:
268 
274  Energy a1width(Energy2 q2) const;
275 
280  void inita1Width(int iopt);
281 
287  Complex a1BreitWigner(Energy2 q2) const {
288  Complex ii(0.,1.);
289  Energy2 m2=_a1mass*_a1mass; Energy q=sqrt(q2);
290  Complex output=m2/(m2-q2-ii*q*a1width(q2));
291  return output;
292  }
293 
301  Complex rhoBreitWigner(int ires, Energy2 q2,int icharge) const {
302  Energy q=sqrt(q2);
303  double ratio; Complex ii(0.,1.);
304  if(icharge==0) ratio=Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_prhocc[ires];
305  else ratio=Kinematics::pstarTwoBodyDecay(q,_mpic,_mpi0)/_prhoc0[ires];
306  ratio*= ratio*ratio;
307  Energy gamrun=_rhowidth[ires]*ratio*_rhomass[ires]/q;
308  return _rhomass[ires]*_rhomass[ires]/(_rhomass[ires]*_rhomass[ires]
309  -q2-ii*_rhomass[ires]*gamrun);
310  }
311 
319  Complex sigmaBreitWigner(Energy2 q2,int icharge) const {
320  Energy q=sqrt(q2);
321  double ratio; Complex ii(0.,1.);
322  if(icharge==0) ratio=Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_psigmacc;
323  else ratio=Kinematics::pstarTwoBodyDecay(q,_mpi0,_mpi0)/_psigma00;
324  Energy gamrun=_sigmawidth*ratio*_sigmamass/q;
325  return _sigmamass*_sigmamass/(_sigmamass*_sigmamass-q2-ii*_sigmamass*gamrun);
326  }
327 
335  Complex f0BreitWigner(Energy2 q2,int icharge) const {
336  Energy q=sqrt(q2);
337  double ratio; Complex ii(0.,1.);
338  if(icharge==0) ratio=Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_pf0cc;
339  else ratio=Kinematics::pstarTwoBodyDecay(q,_mpi0,_mpi0)/_pf000;
340  Energy gamrun=_f0width*ratio*_f0mass/q;
341  return _f0mass*_f0mass/(_f0mass*_f0mass-q2-ii*_f0mass*gamrun);
342  }
343 
351  Complex f2BreitWigner(Energy2 q2,int icharge) const {
352  Energy q=sqrt(q2);
353  double ratio; Complex ii(0.,1.);
354  if(icharge==0) ratio=Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_pf2cc;
355  else ratio=Kinematics::pstarTwoBodyDecay(q,_mpi0,_mpi0)/_pf200;
356  ratio*= ratio*ratio*ratio*ratio;
357  Energy gamrun=_f2width*ratio*_f2mass/q;
358  return _f2mass*_f2mass/(_f2mass*_f2mass-q2-ii*_f2mass*gamrun);
359  }
360 
361 private:
362 
366  vector<Energy> _rhomass;
367 
371  vector<Energy> _rhowidth;
372 
376  vector<Energy> _prhocc;
377 
381  vector<Energy> _prhoc0;
382 
386  Energy _f2mass;
387 
391  Energy _f2width;
392 
396  Energy _pf2cc;
397 
401  Energy _pf200;
402 
406  Energy _f0mass;
407 
411  Energy _f0width;
412 
416  Energy _pf0cc;
417 
421  Energy _pf000;
422 
426  Energy _sigmamass;
427 
431  Energy _sigmawidth;
432 
436  Energy _psigmacc;
437 
441  Energy _psigma00;
442 
446  Energy _mpi0;
447 
451  Energy _mpic;
452 
456  Energy _a1mass;
457 
461  Energy _a1width;
462 
466  Energy _mKstar;
467 
471  Energy _mK;
472 
476  double _gammk;
477 
481  Energy _fpi;
482 
486  InvEnergy _fact;
487 
492  vector<double> _rhomagP;
493 
498  vector<double> _rhophaseP;
499 
504  vector<Complex> _rhocoupP;
505 
510  vector<InvEnergy2> _rhomagD;
511 
516  vector<double>_rhophaseD;
517 
522  vector<complex<InvEnergy2> > _rhocoupD;
523 
528  InvEnergy2 _f2mag;
529 
534  double _f2phase;
535 
540  complex<InvEnergy2> _f2coup;
541 
546  double _f0mag;
547 
552  double _f0phase;
553 
559 
564  double _sigmamag;
565 
570  double _sigmaphase;
571 
577 
582 
586  vector<Energy> _a1runwidth;
587 
591  vector<Energy2> _a1runq2;
592 
593 
598 
603 
607  bool _a1opt;
608 
612  Energy _maxmass;
613 
617  Energy _maxcalc;
618 
619 };
620 
621 }
622 
623 #endif /* THEPEG_ThreePionCLEOCurrent_H */
double _sigmaphase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
virtual IBPtr clone() const
Make a simple clone of this object.
The ThreePionCLEOCurrent class implements the decay of the weak current to three pions using the curr...
Energy _mKstar
Mass of the resonace.
double sqrt(int x)
vector< Energy > _prhoc0
Momenta of the decay products for charged decay.
std::complex< double > Complex
Complex _f0coup
Coupling of the resonance, , ( in the CLEO paper.)
Energy _f0width
Width of the resonance.
vector< double > _rhophaseD
Phase of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
Energy _pf000
Momenta of the decay products for decay to neutral pions.
Energy _psigmacc
Momenta of the decay products for decay to charged pions.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
double _f0phase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
double _f0mag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
Complex f0BreitWigner(Energy2 q2, int icharge) const
Breit-Wigner for the .
Energy _f2mass
Mass of the resonance.
vector< InvEnergy2 > _rhomagD
Magnitude of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
vector< complex< InvEnergy2 > > _rhocoupD
-wave couplings of the rho resonance, , ( in the CLEO paper.)
bool _initializea1
Initialize the running width.
Complex f2BreitWigner(Energy2 q2, int icharge) const
Breit-Wigner for the .
Energy _maxcalc
The maximum mass when the running width was calculated.
Energy _f2width
Width of the resonance.
Energy _sigmawidth
Width of the resonance.
Interpolator< Energy, Energy2 >::Ptr _a1runinter
The interpolator for the running width calculation.
bool _a1opt
Option for the width.
bool _localparameters
use local values of the mass parameters
Energy _mpi0
Mass of the neutral pion.
Complex rhoBreitWigner(int ires, Energy2 q2, int icharge) const
The Breit-Wigner.
InvEnergy2 _f2mag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
Energy _fpi
pion decay constant
Energy _pf200
Momenta of the decay products for decay to neutral pions.
Complex _sigmacoup
Coupling of the resonance, , ( in the CLEO paper.)
Complex sigmaBreitWigner(Energy2 q2, int icharge) const
Breit-Wigner for the .
Energy _f0mass
Mass of the resonance.
vector< Energy > _a1runwidth
The width for the running width calculation.
vector< Complex > _rhocoupP
-wave couplings of the rho resonance, , ( in the CLEO paper.)
Energy _mpic
Mass of the charged pion.
complex< InvEnergy2 > _f2coup
Coupling of the resonance, , ( in the CLEO paper.)
vector< Energy > _prhocc
Momenta of the decay products for neutral decay.
vector< double > _rhophaseP
Phase of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
double _gammk
Coupling for the term in the running width.
double _f2phase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
vector< Energy2 > _a1runq2
The for the running width calculation.
Energy _pf2cc
Momenta of the decay products for decay to charged pions.
Energy pstarTwoBodyDecay(const Energy M, const Energy m1, const Energy m2)
For the two body decay M -> m1 + m2 it gives the module of the 3-momentum of the decay product in the...
Definition: Kinematics.h:93
vector< Energy > _rhomass
Masses of the resonances.
double _sigmamag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
Energy _sigmamass
Mass of the resonance.
InvEnergy _fact
The prefactor.
Energy _pf0cc
Momenta of the decay products for decay to charged pions.
vector< double > _rhomagP
Magnitude of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
-*- C++ -*-
Complex a1BreitWigner(Energy2 q2) const
Breit-Wigner
Energy _psigma00
Momenta of the decay products for decay to neutral pions.
Energy _maxmass
The maximum mass of the hadronic system.
Energy _mK
Mass of the resonace.
vector< Energy > _rhowidth
Widths of the resonances.
This is the base class for the three meson decays of the weak current.