herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
a1ThreePionCLEODecayer.h
1 // -*- C++ -*-
2 //
3 // a1ThreePionCLEODecayer.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_a1ThreePionCLEODecayer_H
10 #define HERWIG_a1ThreePionCLEODecayer_H
11 //
12 // This is the declaration of the a1ThreePionCLEODecayer class.
13 //
14 #include "Herwig/Decay/DecayIntegrator.h"
15 #include "Herwig/Decay/DecayPhaseSpaceMode.h"
16 #include "Herwig/Utilities/Kinematics.h"
17 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
18 
19 namespace Herwig {
20 using namespace ThePEG;
21 
147 
148 public:
149 
154 
161  virtual int modeNumber(bool & cc, tcPDPtr parent,
162  const tPDVector & children) const;
163 
172  double me2(const int ichan,const Particle & part,
173  const ParticleVector & decay, MEOption meopt) const;
174 
180  virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
181 
195  virtual double threeBodyMatrixElement(const int imode , const Energy2 q2,
196  const Energy2 s3, const Energy2 s2,
197  const Energy2 s1, const Energy m1,
198  const Energy m2, const Energy m3) const;
199 
205  virtual void dataBaseOutput(ofstream & os,bool header) const;
206 
207 public:
208 
215  void persistentOutput(PersistentOStream & os) const;
216 
222  void persistentInput(PersistentIStream & is, int version);
224 
228  static void Init();
229 
230 protected:
231 
238  virtual IBPtr clone() const { return new_ptr(*this);}
239 
244  virtual IBPtr fullclone() const { return new_ptr(*this);}
246 
247 protected:
248 
256  virtual void doinit();
257 
261  virtual void doinitrun();
263 
264 private:
265 
269  a1ThreePionCLEODecayer & operator=(const a1ThreePionCLEODecayer &) = delete;
270 
271 private:
272 
280  Complex rhoBreitWigner(int ires, Energy2 q2,int icharge) const {
281  Energy q=sqrt(q2);
282  Complex ii(0.,1.);
283  double ratio = icharge==0 ?
284  Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_prhocc[ires] :
285  Kinematics::pstarTwoBodyDecay(q,_mpic,_mpi0)/_prhoc0[ires];
286  Energy gamrun=_rhowidth[ires]*pow(ratio,3)*_rhomass[ires]/q;
287  return sqr(_rhomass[ires])
288  /(sqr(_rhomass[ires])-q2-ii*_rhomass[ires]*gamrun);
289  }
290 
297  Complex sigmaBreitWigner(Energy2 q2,int icharge) const {
298  Energy q=sqrt(q2);
299  Complex ii(0.,1.);
300  double ratio = icharge==0 ?
301  Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_psigmacc :
302  Kinematics::pstarTwoBodyDecay(q,_mpi0,_mpi0)/_psigma00;
303  Energy gamrun=_sigmawidth*ratio*_sigmamass/q;
304  return sqr(_sigmamass)/(sqr(_sigmamass)-q2-ii*_sigmamass*gamrun);
305  }
306 
313  Complex f0BreitWigner(Energy2 q2,int icharge) const {
314  Energy q=sqrt(q2);
315  Complex ii(0.,1.);
316  double ratio = icharge==0 ?
317  Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_pf0cc :
318  Kinematics::pstarTwoBodyDecay(q,_mpi0,_mpi0)/_pf000;
319  Energy gamrun=_f0width*ratio*_f0mass/q;
320  return sqr(_f0mass)/(sqr(_f0mass)-q2-ii*_f0mass*gamrun);
321  }
322 
329  Complex f2BreitWigner(Energy2 q2,int icharge) const {
330  Energy q=sqrt(q2);
331  Complex ii(0.,1.);
332  double ratio = icharge==0 ?
333  Kinematics::pstarTwoBodyDecay(q,_mpic,_mpic)/_pf2cc :
334  Kinematics::pstarTwoBodyDecay(q,_mpi0,_mpi0)/_pf200;
335  Energy gamrun=_f2width*pow(ratio,5)*_f2mass/q;
336  return sqr(_f2mass)/(sqr(_f2mass)-q2-ii*_f2mass*gamrun);
337  }
338 
352  void formFactors(int iopt,int ichan,Energy2 q2,Energy2 s1,Energy2 s2,
353  Energy2 s3,
354  complex<InvEnergy> & F1,
355  complex<InvEnergy> & F2,
356  complex<InvEnergy> & F3) const;
357 
358 private:
359 
363  vector<Energy> _rhomass;
364 
368  vector<Energy> _rhowidth;
369 
373  vector<Energy> _prhocc;
374 
378  vector<Energy> _prhoc0;
379 
383  Energy _f2mass;
384 
388  Energy _f2width;
389 
393  Energy _pf2cc;
394 
398  Energy _pf200;
399 
403  Energy _f0mass;
404 
408  Energy _f0width;
409 
413  Energy _pf0cc;
414 
418  Energy _pf000;
419 
423  Energy _sigmamass;
424 
428  Energy _sigmawidth;
429 
433  Energy _psigmacc;
434 
438  Energy _psigma00;
439 
443  Energy _mpi0;
444 
448  Energy _mpic;
449 
453  InvEnergy _coupling;
454 
459  vector<double> _rhomagP;
460 
465  vector<double> _rhophaseP;
466 
471  vector<Complex> _rhocoupP;
472 
477  vector<InvEnergy2> _rhomagD;
478 
483  vector<double>_rhophaseD;
484 
489  vector<complex<InvEnergy2> > _rhocoupD;
490 
495  InvEnergy2 _f2mag;
496 
501  double _f2phase;
502 
507  complex<InvEnergy2> _f2coup;
508 
513  double _f0mag;
514 
519  double _f0phase;
520 
526 
531  double _sigmamag;
532 
537  double _sigmaphase;
538 
544 
549 
553  mutable vector<double> _zerowgts;
554 
558  mutable vector<double> _onewgts;
559 
563  mutable vector<double> _twowgts;
564 
568  mutable vector<double> _threewgts;
569 
573  mutable double _zeromax;
574 
578  mutable double _onemax;
579 
583  mutable double _twomax;
584 
588  mutable double _threemax;
589 
593  mutable RhoDMatrix _rho;
594 
598  mutable vector<Helicity::LorentzPolarizationVector> _vectors;
599 };
600 
601 }
602 
603 
604 #endif /* HERWIG_a1ThreePionCLEODecayer_H */
Energy _pf2cc
Momentum for the decay of the to two charged pions.
Energy _mpic
Mass of the charged pion.
double sqrt(int x)
std::complex< double > Complex
vector< Energy > _prhoc0
Momentum of the particles produced in neutral rho decay.
Energy _pf000
Momentum for the decay of the to two neutral pions.
InvEnergy2 _f2mag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
double _onemax
Maximum weight for the one charged pion channel.
constexpr double pow(double x, ExponentT p)
double _f2phase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
vector< Energy > _prhocc
Momentum of the particles produced in charged rho decay.
Complex f0BreitWigner(Energy2 q2, int icharge) const
Breit wigner for the , .
Complex f2BreitWigner(Energy2 q2, int icharge) const
Breit wigner for the , .
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< Helicity::LorentzPolarizationVector > _vectors
Polarization vectors.
constexpr auto sqr(const T &x) -> decltype(x *x)
double _sigmamag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
virtual IBPtr clone() const
Make a simple clone of this object.
Energy _sigmamass
Mass of the meson.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
vector< double > _rhomagP
Magnitude of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
double _sigmaphase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
Energy _pf0cc
Momentum for the decay of the to two charged pions.
vector< double > _threewgts
Weights for the channels for the three charged pion channel.
vector< double > _rhophaseD
Phase of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
double _threemax
Maximum weight for the three charged pion channel.
Energy _psigmacc
Momentum for the decay of the to two charged pions.
vector< double > _zerowgts
Weights for the channels for the zero charged pion channel.
Complex rhoBreitWigner(int ires, Energy2 q2, int icharge) const
Breit wigner for the , .
MEOption
Enum for the matrix element option.
complex< InvEnergy2 > _f2coup
Coupling of the resonance, , ( in the CLEO paper.)
vector< Complex > _rhocoupP
-wave couplings of the rho resonance, , ( in the CLEO paper.)
Energy _sigmawidth
Width of the meson.
vector< InvEnergy2 > _rhomagD
Magnitude of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
vector< tPDPtr > tPDVector
Complex sigmaBreitWigner(Energy2 q2, int icharge) const
Breit wigner for the , .
vector< Energy > _rhomass
Masses of the rho resonaces.
RhoDMatrix _rho
Spin density matrix.
Main class for Decayers implementing multi-channel phase space integration.
Energy _psigma00
Momentum for the decay of the to two neutral pions.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
InvEnergy _coupling
overall coupling for the decay
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< complex< InvEnergy2 > > _rhocoupD
-wave couplings of the rho resonance, , ( in the CLEO paper.)
Energy _mpi0
Mass of the neutral pion.
Complex _f0coup
Coupling of the resonance, , ( in the CLEO paper.)
double _twomax
Maximum weight for the two charged pion channel.
vector< double > _twowgts
Weights for the channels for the two charged pion channel.
double _f0mag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
-*- C++ -*-
vector< double > _onewgts
Weights for the channels for the one charged pion channel.
vector< Energy > _rhowidth
Widths of the rho resonaces.
Energy _pf200
Momentum for the decay of the to two neutral pions.
vector< double > _rhophaseP
Phase of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
bool _localparameters
Use local values of the mass parameters.
double _zeromax
Maximum weight for the zero charged pion channel.
The a1ThreePionCLEODecayer class is designed to implement the decay of the to three pions using the ...
Complex _sigmacoup
Coupling of the resonance, , ( in the CLEO paper.)
vector< PPtr > ParticleVector
double _f0phase
Phase of the coupling of the resonance, , ( in the CLEO paper.)