herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
SMWDecayer.h
1// -*- C++ -*-
2//
3// SMWDecayer.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_SMWDecayer_H
10#define HERWIG_SMWDecayer_H
11//
12// This is the declaration of the SMWDecayer class.
13//
14#include "Herwig/Decay/PerturbativeDecayer.h"
15#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
16#include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
17#include "Herwig/Decay/PhaseSpaceMode.h"
18
19namespace Herwig {
20using namespace ThePEG;
21using namespace ThePEG::Helicity;
22
33
34public:
35
40
41public:
42
51 virtual bool hasMECorrection() {return true;}
52
56 virtual void initializeMECorrection(RealEmissionProcessPtr , double & ,
57 double & );
58
71 virtual bool softMatrixElementVeto(PPtr parent,
72 PPtr progenitor,
73 const bool & fs,
74 const Energy & highestpT,
75 const vector<tcPDPtr> & ids,
76 const double & z,
77 const Energy & scale,
78 const Energy & pT);
79
83 virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
84
85public:
86
93 virtual int modeNumber(bool & cc, tcPDPtr parent,
94 const tPDVector & children) const;
95
102 virtual ParticleVector decay(const Particle & parent,const tPDVector & children) const;
103
113 double me2(const int ichan,const Particle & part,
114 const tPDVector & outgoing,
115 const vector<Lorentz5Momentum> & momenta,
116 MEOption meopt) const;
117
121 virtual void constructSpinInfo(const Particle & part,
123
129 virtual void dataBaseOutput(ofstream & os,bool header) const;
130
131public:
132
140
146 void persistentInput(PersistentIStream & is, int version);
148
152 static void Init();
153
154protected:
155
162 virtual IBPtr clone() const {return new_ptr(*this);}
163
168 virtual IBPtr fullclone() const {return new_ptr(*this);}
170
171protected:
172
180 virtual void doinit();
181
186 virtual void doinitrun();
188
189protected:
190
194 void setRho(double);
195
200
205
213 double getZfromX(double, double);
214
218 double getKfromX(double, double);
220
228 void getXXbar(double kt, double z, double & x, double & xbar);
229
239 double qWeight(double x, double xbar);
240
246 double qbarWeight(double x, double xbar);
247
253 double qWeightX(Energy qtilde, double z);
254
260 double qbarWeightX(Energy qtilde, double z);
262
266 double u(double);
267
275 double MEV(double, double);
276
280 double MEA(double, double);
281
287 double PS(double x1, double x2);
289
290protected:
291
295 double calculateRealEmission(double x1, double x2,
297 vector<Lorentz5Momentum> momenta,
298 double phi, double muj, double muk,
299 int iemit, bool subtract) const;
300
304 double meRatio(tcPDVector partons,
305 vector<Lorentz5Momentum> momenta,
306 unsigned int iemitter,bool subtract) const;
307
311 virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2,
312 const ParticleVector & decay3, MEOption meopt,
313 ShowerInteraction inter);
314
318 double loME(const vector<tcPDPtr> & partons,
319 const vector<Lorentz5Momentum> & momenta) const;
320
324 InvEnergy2 realME(const vector<tcPDPtr> & partons,
325 const vector<Lorentz5Momentum> & momenta,
326 ShowerInteraction inter) const;
327
328private:
329
333 SMWDecayer & operator=(const SMWDecayer &) = delete;
334
335 private:
336
337
341 AbstractFFVVertexPtr FFWVertex_;
342
346 AbstractFFVVertexPtr FFGVertex_;
347
351 AbstractFFVVertexPtr FFPVertex_;
352
356 AbstractVVVVertexPtr WWWVertex_;
357
365 vector<double> quarkWeight_;
366
370 vector<double> leptonWeight_;
372
377
381 mutable vector<VectorWaveFunction> vectors_;
382
386 mutable vector<SpinorWaveFunction> wave_;
387
391 mutable vector<SpinorBarWaveFunction> wavebar_;
392
393private:
394
398 Energy d_Q_;
399
403 Energy d_m_;
404
408 double d_rho_;
409
413 double d_v_;
414
418 double d_kt1_;
419
423 double d_kt2_;
424
428 static const double EPS_;
429
430private:
431
435 double CF_;
436
440 mutable Energy mW_;
441
442
446 mutable double aS_;
447
451 mutable Energy2 scale_;
452
461
465 vector<tcPDPtr> partons_;
466
470 vector<Lorentz5Momentum> quark_;
471
475 Lorentz5Momentum gauge_;
476
481
485 Energy2 mw2_;
487
491 bool NLO_;
492};
493
494}
495
496
497#endif /* HERWIG_SMWDecayer_H */
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 SMWDecayer is designed to perform the decay of the W boson to the Standard Model fermions,...
Definition: SMWDecayer.h:32
InvEnergy2 realME(const vector< tcPDPtr > &partons, const vector< Lorentz5Momentum > &momenta, ShowerInteraction inter) const
Calculate the NLO real emission piece of ME.
AbstractFFVVertexPtr FFPVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMWDecayer.h:351
double qbarWeightX(Energy qtilde, double z)
Soft antiquark weight calculated from .
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
double qbarWeight(double x, double xbar)
Soft antiquark weight calculated from .
double MEV(double, double)
Vector and axial vector parts of the matrix element.
bool NLO_
Whether ro return the LO or NLO result.
Definition: SMWDecayer.h:491
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...
SMWDecayer()
Default constructor.
vector< SpinorWaveFunction > wave_
Spinors for the decay.
Definition: SMWDecayer.h:386
vector< double > quarkWeight_
maximum weights for the different integrations
Definition: SMWDecayer.h:365
virtual bool hasMECorrection()
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: SMWDecayer.h:51
static const double EPS_
Cut-off parameter.
Definition: SMWDecayer.h:428
vector< double > leptonWeight_
Weights for the W to leptons decays.
Definition: SMWDecayer.h:370
Energy2 mw2_
W mass squared.
Definition: SMWDecayer.h:485
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: SMWDecayer.h:168
double getZfromX(double, double)
Translate the variables from to .
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: SMWDecayer.h:162
Lorentz5Momentum gauge_
The momentum of the radiated gauge boson.
Definition: SMWDecayer.h:475
virtual void doinitrun()
Initialize this object.
void setRho(double)
Set the parameter.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual void dataBaseOutput(ofstream &os, bool header) const
Output the setup information for the particle database.
double MEA(double, double)
Axial vector part of the matrix element.
double aS_
The strong coupling.
Definition: SMWDecayer.h:446
vector< Lorentz5Momentum > quark_
The fermion momenta.
Definition: SMWDecayer.h:470
PPtr wboson_
The W boson.
Definition: SMWDecayer.h:480
virtual double matrixElementRatio(const Particle &inpart, const ParticleVector &decay2, const ParticleVector &decay3, MEOption meopt, ShowerInteraction inter)
Calculate matrix element ratio R/B.
vector< VectorWaveFunction > vectors_
Polarization vectors for the decay.
Definition: SMWDecayer.h:381
double getKfromX(double, double)
Calculate .
Energy mW_
The W mass.
Definition: SMWDecayer.h:440
double qWeight(double x, double xbar)
Soft weight.
double d_kt1_
The initial kappa-tilde values for radiation from the quark.
Definition: SMWDecayer.h:418
virtual void constructSpinInfo(const Particle &part, ParticleVector outgoing) const
Construct the SpinInfos for the particles produced in the decay.
double d_kt2_
The initial kappa-tilde values for radiation from the antiquark.
Definition: SMWDecayer.h:423
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.
Energy d_m_
Quark mass.
Definition: SMWDecayer.h:403
double u(double)
????
vector< SpinorBarWaveFunction > wavebar_
Barred spinors for the decay.
Definition: SMWDecayer.h:391
double calculateRealEmission(double x1, double x2, tcPDVector outgoing, vector< Lorentz5Momentum > momenta, double phi, double muj, double muk, int iemit, bool subtract) const
Real emission term, for use in generating the hardest emission.
static void Init()
Standard Init function used to initialize the interfaces.
double qWeightX(Energy qtilde, double z)
Soft quark weight calculated from .
double meRatio(tcPDVector partons, vector< Lorentz5Momentum > momenta, unsigned int iemitter, bool subtract) const
Calculate the ratio between NLO & LO ME.
Energy2 scale_
The scale.
Definition: SMWDecayer.h:451
virtual bool softMatrixElementVeto(PPtr parent, PPtr progenitor, const bool &fs, const Energy &highestpT, const vector< tcPDPtr > &ids, const double &z, const Energy &scale, const Energy &pT)
Apply the soft matrix element correction.
Energy d_Q_
CM energy.
Definition: SMWDecayer.h:398
double CF_
The colour factor.
Definition: SMWDecayer.h:435
double loME(const vector< tcPDPtr > &partons, const vector< Lorentz5Momentum > &momenta) const
Calculate the LO ME.
vector< tcPDPtr > partons_
The ParticleData objects for the fermions.
Definition: SMWDecayer.h:465
AbstractFFVVertexPtr FFWVertex_
Pointer to the fermion-antifermion W vertex.
Definition: SMWDecayer.h:341
void getXXbar(double kt, double z, double &x, double &xbar)
Calculate from .
void setKtildeSymm()
Set the parameters symmetrically.
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
Definition: SMWDecayer.h:83
RhoDMatrix rho_
Spin density matrix for the decay.
Definition: SMWDecayer.h:376
AbstractVVVVertexPtr WWWVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMWDecayer.h:356
double PS(double x1, double x2)
The matrix element, given , .
virtual void initializeMECorrection(RealEmissionProcessPtr, double &, double &)
Initialize the ME correction.
AbstractFFVVertexPtr FFGVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMWDecayer.h:346
virtual void doinit()
Initialize this object after the setup phase before saving and EventGenerator to disk.
double d_rho_
The rho parameter.
Definition: SMWDecayer.h:408
tcPDPtr gluon_
Stuff for the POWHEG correction.
Definition: SMWDecayer.h:460
SMWDecayer & operator=(const SMWDecayer &)=delete
Private and non-existent assignment operator.
virtual int modeNumber(bool &cc, tcPDPtr parent, const tPDVector &children) const
Which of the possible decays is required.
void setKtilde2()
Set second , given the first.
double d_v_
The v parameter.
Definition: SMWDecayer.h:413
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