herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
SMZDecayer.h
1// -*- C++ -*-
2//
3// SMZDecayer.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_SMZDecayer_H
10#define HERWIG_SMZDecayer_H
11//
12// This is the declaration of the SMZDecayer class.
13//
14#include "Herwig/Decay/PerturbativeDecayer.h"
15#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
16#include "Herwig/Decay/PhaseSpaceMode.h"
17
18namespace Herwig {
19using namespace ThePEG;
20using namespace ThePEG::Helicity;
21
32
33public:
34
39
48 virtual bool hasMECorrection() {return true;}
49
53 virtual void initializeMECorrection(RealEmissionProcessPtr , double & ,
54 double & );
55
68 virtual bool softMatrixElementVeto(PPtr parent,
69 PPtr progenitor,
70 const bool & fs,
71 const Energy & highestpT,
72 const tcPDVector & ids,
73 const double & z,
74 const Energy & scale,
75 const Energy & pT);
76
80 virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
82
83public:
84
91 virtual int modeNumber(bool & cc, tcPDPtr parent,
92 const tPDVector & children) const;
93
100 virtual ParticleVector decay(const Particle & parent,const tPDVector & children) const;
101
111 double me2(const int ichan,const Particle & part,
112 const tPDVector & outgoing,
113 const vector<Lorentz5Momentum> & momenta,
114 MEOption meopt) const;
115
119 virtual void constructSpinInfo(const Particle & part,
121
127 virtual void dataBaseOutput(ofstream & os,bool header) const;
128
140 virtual double oneLoopVirtualME(unsigned int imode,
141 const Particle & part,
142 const ParticleVector & products);
143
157 virtual InvEnergy2 realEmissionME(unsigned int imode,
158 const Particle & part,
159 ParticleVector & products,
160 unsigned int iemitter,
161 double ctheta, double stheta,
162 const LorentzRotation & rot1,
163 const LorentzRotation & rot2);
165
166public:
167
175
181 void persistentInput(PersistentIStream & is, int version);
183
187 static void Init();
188
189protected:
190
197 virtual IBPtr clone() const {return new_ptr(*this);}
198
203 virtual IBPtr fullclone() const {return new_ptr(*this);}
205
206protected:
207
215 virtual void doinit();
216
221 virtual void doinitrun();
223
224protected:
225
229 void setRho(double);
230
235
240
248 double getZfromX(double, double);
249
253 double getKfromX(double, double);
255
263 void getXXbar(double kt, double z, double & x, double & xbar);
264
274 double qWeight(double x, double xbar);
275
281 double qbarWeight(double x, double xbar);
282
288 double qWeightX(Energy qtilde, double z);
289
295 double qbarWeightX(Energy qtilde, double z);
297
300 double u(double);
301
309 double MEV(double, double);
310
314 double MEA(double, double);
315
321 double PS(double x1, double x2);
323
324protected:
325
329 double calculateRealEmission(double x1, double x2,
331 vector<Lorentz5Momentum> momenta,
332 double phi,
333 bool subtract,
334 int emitter) const;
335
339 double calculateRealEmission(double x1, double x2,
340 vector<PPtr> hardProcess,
341 double phi,
342 bool subtract) const;
343
347 bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT) const;
348
352 InvEnergy calculateJacobian(double x1, double x2, Energy pT) const;
353
357 double meRatio(tcPDVector partons,
358 vector<Lorentz5Momentum> momenta,
359 unsigned int iemitter,bool subtract) const;
360
364 virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2,
365 const ParticleVector & decay3, MEOption meopt,
366 ShowerInteraction inter);
367
371 double loME(const tcPDVector & partons,
372 const vector<Lorentz5Momentum> & momenta) const;
373
377 InvEnergy2 realME(const tcPDVector & partons,
378 const vector<Lorentz5Momentum> & momenta,
379 ShowerInteraction inter) const;
380
384 bool getEvent(vector<PPtr> hardProcess);
385
386private:
387
391 SMZDecayer & operator=(const SMZDecayer &) = delete;
392
393private:
394
395
396
400 FFVVertexPtr FFZVertex_;
401
405 AbstractFFVVertexPtr FFPVertex_;
406
410 AbstractFFVVertexPtr FFGVertex_;
411
419 vector<double> quarkWeight_;
420
424 vector<double> leptonWeight_;
426
431
435 mutable vector<VectorWaveFunction> _vectors;
436
440 mutable vector<SpinorWaveFunction> _wave;
441
445 mutable vector<SpinorBarWaveFunction> _wavebar;
446
447private:
448
452 Energy d_Q_;
453
457 Energy d_m_;
458
462 double d_rho_;
463
467 double d_v_;
468
472 double d_kt1_;
473
477 double d_kt2_;
478
482 static const double EPS_;
483
484private:
485
489 double CF_;
490
494 mutable Energy mZ_;
495
499 mutable double mu_;
500
504 mutable double mu2_;
505
509 mutable double aS_;
510
514 mutable Energy2 scale_;
515
524
529
533 vector<Lorentz5Momentum> quark_;
534
538 Lorentz5Momentum gauge_;
539
544
548 Energy2 mz2_;
550
554 bool NLO_;
555};
556
557}
558
559
560#endif /* HERWIG_SMZDecayer_H */
int imode() const
The mode being used for this decay.
MEOption
Enum for the matrix element option.
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwDecayerBase.h:76
The PerturbativeDecayer class is the base class for perturbative decays in Herwig and implements the ...
const Energy & pT() const
Access to the kinematics for inheriting classes.
The SMZDecayer is designed to perform the decay of the Z boson to the Standard Model fermions.
Definition: SMZDecayer.h:31
double qbarWeightX(Energy qtilde, double z)
Soft antiquark weight calculated from .
PPtr zboson_
The Z boson.
Definition: SMZDecayer.h:543
double MEA(double, double)
Axial vector part of the matrix element.
static const double EPS_
Cut-off parameter.
Definition: SMZDecayer.h:482
double PS(double x1, double x2)
The matrix element, given , .
double mu2_
The square of the reduced mass.
Definition: SMZDecayer.h:504
SMZDecayer & operator=(const SMZDecayer &)=delete
Private and non-existent assignment operator.
Energy d_Q_
CM energy.
Definition: SMZDecayer.h:452
virtual double matrixElementRatio(const Particle &inpart, const ParticleVector &decay2, const ParticleVector &decay3, MEOption meopt, ShowerInteraction inter)
Calculate matrix element ratio R/B.
double qbarWeight(double x, double xbar)
Soft antiquark weight calculated from .
virtual bool softMatrixElementVeto(PPtr parent, PPtr progenitor, const bool &fs, const Energy &highestpT, const tcPDVector &ids, const double &z, const Energy &scale, const Energy &pT)
Apply the soft matrix element correction.
double getKfromX(double, double)
Calculate .
virtual int modeNumber(bool &cc, tcPDPtr parent, const tPDVector &children) const
Which of the possible decays is required.
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.
vector< double > leptonWeight_
Weights for the Z to leptons decays.
Definition: SMZDecayer.h:424
double mu_
The reduced mass.
Definition: SMZDecayer.h:499
RhoDMatrix _rho
Spin density matrix for the decay.
Definition: SMZDecayer.h:430
vector< SpinorBarWaveFunction > _wavebar
Barred spinors for the decay.
Definition: SMZDecayer.h:445
Energy mZ_
The Z mass.
Definition: SMZDecayer.h:494
virtual double oneLoopVirtualME(unsigned int imode, const Particle &part, const ParticleVector &products)
Members for the generation of QED radiation in the decays.
double qWeight(double x, double xbar)
Soft weight.
double CF_
The colour factor.
Definition: SMZDecayer.h:489
FFVVertexPtr FFZVertex_
Pointer to the fermion-antifermion Z vertex.
Definition: SMZDecayer.h:400
double aS_
The strong coupling.
Definition: SMZDecayer.h:509
void setKtilde2()
Set second , given the first.
virtual void dataBaseOutput(ofstream &os, bool header) const
Output the setup information for the particle database.
tcPDPtr gluon_
Stuff for the POWHEG correction.
Definition: SMZDecayer.h:523
vector< VectorWaveFunction > _vectors
Polarization vectors for the decay.
Definition: SMZDecayer.h:435
Energy2 mz2_
Higgs mass squared.
Definition: SMZDecayer.h:548
double MEV(double, double)
Vector and axial vector parts of the matrix element.
double d_v_
The v parameter.
Definition: SMZDecayer.h:467
AbstractFFVVertexPtr FFPVertex_
Pointer to the photon vertex.
Definition: SMZDecayer.h:405
double u(double)
????
double qWeightX(Energy qtilde, double z)
Soft quark weight calculated from .
SMZDecayer()
Default constructor.
void setRho(double)
Set the parameter.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
double d_kt2_
The initial kappa-tilde values for radiation from the antiquark.
Definition: SMZDecayer.h:477
double d_rho_
The rho parameter.
Definition: SMZDecayer.h:462
double meRatio(tcPDVector partons, vector< Lorentz5Momentum > momenta, unsigned int iemitter, bool subtract) const
Calculate the ratio between NLO & LO ME.
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: SMZDecayer.h:197
static void Init()
Standard Init function used to initialize the interfaces.
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
Definition: SMZDecayer.h:80
virtual bool hasMECorrection()
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: SMZDecayer.h:48
Energy d_m_
Quark mass.
Definition: SMZDecayer.h:457
double calculateRealEmission(double x1, double x2, vector< PPtr > hardProcess, double phi, bool subtract) const
Real emission term, for use in generating the hardest emission.
double calculateRealEmission(double x1, double x2, tcPDVector outgoing, vector< Lorentz5Momentum > momenta, double phi, bool subtract, int emitter) const
Real emission term, for use in generating the hardest emission.
vector< SpinorWaveFunction > _wave
Spinors for the decay.
Definition: SMZDecayer.h:440
virtual void doinitrun()
Initialize this object.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: SMZDecayer.h:203
virtual void constructSpinInfo(const Particle &part, ParticleVector outgoing) const
Construct the SpinInfos for the particles produced in the decay.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual ParticleVector decay(const Particle &parent, const tPDVector &children) const
For a given decay mode and a given particle instance, perform the decay and return the decay products...
Energy2 scale_
The scale.
Definition: SMZDecayer.h:514
vector< double > quarkWeight_
maximum weights for the different integrations
Definition: SMZDecayer.h:419
virtual void doinit()
Initialize this object after the setup phase before saving and EventGenerator to disk.
InvEnergy calculateJacobian(double x1, double x2, Energy pT) const
Calculate the Jacobian.
InvEnergy2 realME(const tcPDVector &partons, const vector< Lorentz5Momentum > &momenta, ShowerInteraction inter) const
Calculate the NLO real emission piece of ME.
vector< Lorentz5Momentum > quark_
The fermion momenta.
Definition: SMZDecayer.h:533
AbstractFFVVertexPtr FFGVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMZDecayer.h:410
bool NLO_
Whether or not to give an LO or NLO normalisation.
Definition: SMZDecayer.h:554
bool getEvent(vector< PPtr > hardProcess)
Generate a real emission event.
virtual InvEnergy2 realEmissionME(unsigned int imode, const Particle &part, ParticleVector &products, unsigned int iemitter, double ctheta, double stheta, const LorentzRotation &rot1, const LorentzRotation &rot2)
The real emission matrix element.
double getZfromX(double, double)
Translate the variables from to .
tcPDVector partons_
The ParticleData objects for the fermions.
Definition: SMZDecayer.h:528
void getXXbar(double kt, double z, double &x, double &xbar)
Calculate from .
Lorentz5Momentum gauge_
The momentum of the radiated gauge boson.
Definition: SMZDecayer.h:538
double loME(const tcPDVector &partons, const vector< Lorentz5Momentum > &momenta) const
Calculate the LO ME.
void setKtildeSymm()
Set the parameters symmetrically.
virtual void initializeMECorrection(RealEmissionProcessPtr, double &, double &)
Initialize the ME correction.
bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT) const
Check the sign of the momentum in the -direction is correct.
double d_kt1_
The initial kappa-tilde values for radiation from the quark.
Definition: SMZDecayer.h:472
ShowerInteraction
Handy header file to be included in all Shower classes.
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< tPDPtr > tPDVector
ThePEG::Ptr< Particle >::pointer PPtr
vector< PPtr > ParticleVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
vector< tcPDPtr > tcPDVector