herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
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/PhaseSpaceMode.h"
16#include "Herwig/Utilities/Kinematics.h"
17#include "ThePEG/Helicity/LorentzPolarizationVector.h"
18
19namespace Herwig {
20using namespace ThePEG;
21
147
148public:
149
154
161 virtual int modeNumber(bool & cc, tcPDPtr parent,
162 const tPDVector & children) const;
163
173 double me2(const int ichan,const Particle & part,
174 const tPDVector & outgoing,
175 const vector<Lorentz5Momentum> & momenta,
176 MEOption meopt) const;
177
181 virtual void constructSpinInfo(const Particle & part,
183
189 virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
190
204 virtual double threeBodyMatrixElement(const int imode , const Energy2 q2,
205 const Energy2 s3, const Energy2 s2,
206 const Energy2 s1, const Energy m1,
207 const Energy m2, const Energy m3) const;
208
214 virtual void dataBaseOutput(ofstream & os,bool header) const;
215
216public:
217
225
231 void persistentInput(PersistentIStream & is, int version);
233
237 static void Init();
238
239protected:
240
247 virtual IBPtr clone() const { return new_ptr(*this);}
248
253 virtual IBPtr fullclone() const { return new_ptr(*this);}
255
256protected:
257
265 virtual void doinit();
266
270 virtual void doinitrun();
272
273private:
274
279
280private:
281
289 Complex rhoBreitWigner(int ires, Energy2 q2,int icharge) const {
290 Energy q=sqrt(q2);
291 Complex ii(0.,1.);
292 double ratio = icharge==0 ?
295 Energy gamrun=_rhowidth[ires]*pow(ratio,3)*_rhomass[ires]/q;
296 return sqr(_rhomass[ires])
297 /(sqr(_rhomass[ires])-q2-ii*_rhomass[ires]*gamrun);
298 }
299
306 Complex sigmaBreitWigner(Energy2 q2,int icharge) const {
307 Energy q=sqrt(q2);
308 Complex ii(0.,1.);
309 double ratio = icharge==0 ?
312 Energy gamrun=_sigmawidth*ratio*_sigmamass/q;
313 return sqr(_sigmamass)/(sqr(_sigmamass)-q2-ii*_sigmamass*gamrun);
314 }
315
322 Complex f0BreitWigner(Energy2 q2,int icharge) const {
323 Energy q=sqrt(q2);
324 Complex ii(0.,1.);
325 double ratio = icharge==0 ?
328 Energy gamrun=_f0width*ratio*_f0mass/q;
329 return sqr(_f0mass)/(sqr(_f0mass)-q2-ii*_f0mass*gamrun);
330 }
331
338 Complex f2BreitWigner(Energy2 q2,int icharge) const {
339 Energy q=sqrt(q2);
340 Complex ii(0.,1.);
341 double ratio = icharge==0 ?
344 Energy gamrun=_f2width*pow(ratio,5)*_f2mass/q;
345 return sqr(_f2mass)/(sqr(_f2mass)-q2-ii*_f2mass*gamrun);
346 }
347
361 void formFactors(int iopt,int ichan,Energy2 q2,Energy2 s1,Energy2 s2,
362 Energy2 s3,
363 complex<InvEnergy> & F1,
364 complex<InvEnergy> & F2,
365 complex<InvEnergy> & F3) const;
366
367private:
368
372 vector<Energy> _rhomass;
373
377 vector<Energy> _rhowidth;
378
382 vector<Energy> _prhocc;
383
387 vector<Energy> _prhoc0;
388
392 Energy _f2mass;
393
397 Energy _f2width;
398
402 Energy _pf2cc;
403
407 Energy _pf200;
408
412 Energy _f0mass;
413
417 Energy _f0width;
418
422 Energy _pf0cc;
423
427 Energy _pf000;
428
433
438
442 Energy _psigmacc;
443
447 Energy _psigma00;
448
452 Energy _mpi0;
453
457 Energy _mpic;
458
462 InvEnergy _coupling;
463
468 vector<double> _rhomagP;
469
474 vector<double> _rhophaseP;
475
480 vector<Complex> _rhocoupP;
481
486 vector<InvEnergy2> _rhomagD;
487
492 vector<double>_rhophaseD;
493
498 vector<complex<InvEnergy2> > _rhocoupD;
499
504 InvEnergy2 _f2mag;
505
510 double _f2phase;
511
516 complex<InvEnergy2> _f2coup;
517
522 double _f0mag;
523
528 double _f0phase;
529
535
540 double _sigmamag;
541
547
553
558
562 mutable vector<double> _zerowgts;
563
567 mutable vector<double> _onewgts;
568
572 mutable vector<double> _twowgts;
573
577 mutable vector<double> _threewgts;
578
582 mutable double _zeromax;
583
587 mutable double _onemax;
588
592 mutable double _twomax;
593
597 mutable double _threemax;
598
603
607 mutable vector<Helicity::LorentzPolarizationVector> _vectors;
608};
609
610}
611
612
613#endif /* HERWIG_a1ThreePionCLEODecayer_H */
Main class for Decayers implementing multi-channel phase space integration.
int imode() const
The mode being used for this decay.
MEOption
Enum for the matrix element option.
The a1ThreePionCLEODecayer class is designed to implement the decay of the to three pions using the ...
virtual int modeNumber(bool &cc, tcPDPtr parent, const tPDVector &children) const
Which of the possible decays is required.
double _sigmaphase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
void formFactors(int iopt, int ichan, Energy2 q2, Energy2 s1, Energy2 s2, Energy2 s3, complex< InvEnergy > &F1, complex< InvEnergy > &F2, complex< InvEnergy > &F3) const
Calculate the form factors.
Complex sigmaBreitWigner(Energy2 q2, int icharge) const
Breit wigner for the , .
Energy _mpic
Mass of the charged pion.
virtual void dataBaseOutput(ofstream &os, bool header) const
Output the setup information for the particle database.
vector< Energy > _prhoc0
Momentum of the particles produced in neutral rho decay.
Energy _pf0cc
Momentum for the decay of the to two charged pions.
Energy _sigmamass
Mass of the meson.
InvEnergy2 _f2mag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode &dm) const
Method to return an object to calculate the 3 body partial width.
double _f2phase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
Energy _pf2cc
Momentum for the decay of the to two charged pions.
Energy _mpi0
Mass of the neutral pion.
double _onemax
Maximum weight for the one charged pion channel.
virtual IBPtr clone() const
Make a simple clone of this object.
double _f0phase
Phase of the coupling of the resonance, , ( in the CLEO paper.)
double _zeromax
Maximum weight for the zero charged pion channel.
virtual void doinitrun()
Initialize this object to the begining of the run phase.
vector< double > _onewgts
Weights for the channels for the one charged pion channel.
Complex _f0coup
Coupling of the resonance, , ( in the CLEO paper.)
virtual double threeBodyMatrixElement(const int imode, 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 be integrated for the three-body decays as a function of the invariant masses o...
double _sigmamag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
a1ThreePionCLEODecayer()
Default constructor.
InvEnergy _coupling
overall coupling for the decay
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
vector< Energy > _rhowidth
Widths of the rho resonaces.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
vector< InvEnergy2 > _rhomagD
Magnitude of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
Complex f0BreitWigner(Energy2 q2, int icharge) const
Breit wigner for the , .
Complex f2BreitWigner(Energy2 q2, int icharge) const
Breit wigner for the , .
double me2(const int ichan, const Particle &part, const tPDVector &outgoing, const vector< Lorentz5Momentum > &momenta, MEOption meopt) const
Return the matrix element squared for a given mode and phase-space channel.
RhoDMatrix _rho
Spin density matrix.
double _f0mag
Magntiude of the coupling of the resonance, , ( in the CLEO paper.)
vector< Complex > _rhocoupP
-wave couplings of the rho resonance, , ( in the CLEO paper.)
complex< InvEnergy2 > _f2coup
Coupling of the resonance, , ( in the CLEO paper.)
vector< double > _twowgts
Weights for the channels for the two charged pion channel.
vector< double > _rhophaseP
Phase of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
virtual void doinit()
Initialize this object after the setup phase before saving and EventGenerator to disk.
Complex rhoBreitWigner(int ires, Energy2 q2, int icharge) const
Breit wigner for the , .
Energy _sigmawidth
Width of the meson.
vector< double > _threewgts
Weights for the channels for the three charged pion channel.
vector< complex< InvEnergy2 > > _rhocoupD
-wave couplings of the rho resonance, , ( in the CLEO paper.)
static void Init()
Standard Init function used to initialize the interfaces.
vector< Energy > _prhocc
Momentum of the particles produced in charged rho decay.
vector< Helicity::LorentzPolarizationVector > _vectors
Polarization vectors.
vector< Energy > _rhomass
Masses of the rho resonaces.
Energy _pf200
Momentum for the decay of the to two neutral pions.
bool _localparameters
Use local values of the mass parameters.
double _twomax
Maximum weight for the two charged pion channel.
Energy _psigmacc
Momentum for the decay of the to two charged pions.
a1ThreePionCLEODecayer & operator=(const a1ThreePionCLEODecayer &)=delete
Private and non-existent assignment operator.
virtual void constructSpinInfo(const Particle &part, ParticleVector outgoing) const
Construct the SpinInfos for the particles produced in the decay.
vector< double > _rhophaseD
Phase of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
vector< double > _zerowgts
Weights for the channels for the zero charged pion channel.
Complex _sigmacoup
Coupling of the resonance, , ( in the CLEO paper.)
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Energy _pf000
Momentum for the decay of the to two neutral pions.
vector< double > _rhomagP
Magnitude of the -wave couplings of the rho resonance, , ( in the CLEO paper.)
Energy _psigma00
Momentum for the decay of the to two neutral pions.
double _threemax
Maximum weight for the three charged pion channel.
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
-*- C++ -*-
double sqrt(int x)
std::complex< double > Complex
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr double pow(double x, ExponentT p)
vector< tPDPtr > tPDVector
vector< PPtr > ParticleVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
constexpr auto sqr(const T &x) -> decltype(x *x)