herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
MEPP2GammaGammaPowheg.h
1// -*- C++ -*-
2#ifndef HERWIG_MEPP2GammaGammaPowheg_H
3#define HERWIG_MEPP2GammaGammaPowheg_H
4//
5// This is the declaration of the MEPP2GammaGammaPowheg class.
6//
7
8#include "Herwig/MatrixElement/HwMEBase.h"
9#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
10#include "Herwig/MatrixElement/ProductionMatrixElement.h"
11#include "Herwig/Shower/ShowerAlpha.h"
12
13namespace Herwig {
14
15using namespace ThePEG;
16
24
25 enum DipoleType { IIQCD1=2, IIQCD2=4,
26 IFQED1=5, FIQED1=6, IFQED2=7, FIQED2=8 };
27
28 enum RadiationType {Subtraction,Hard,Shower};
29
30public:
31
39
45 virtual POWHEGType hasPOWHEGCorrection() {return ISR;}
46
50 virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
53
54public:
55
62 virtual unsigned int orderInAlphaS() const;
63
68 virtual unsigned int orderInAlphaEW() const;
69
77 virtual double me2() const;
78
82 virtual Energy2 scale() const;
83
88 virtual int nDim() const;
89
98 virtual bool generateKinematics(const double * r);
99
104 virtual CrossSection dSigHatDR() const;
105
109 virtual void getDiagrams() const;
110
120
129 colourGeometries(tcDiagPtr diag) const;
131
132public:
133
141
147 void persistentInput(PersistentIStream & is, int version);
149
156 static void Init();
157
158protected:
159
163 virtual double NLOWeight() const;
164
168 double loGammaGammaME(const cPDVector & particles,
169 const vector<Lorentz5Momentum> & momenta,
170 bool first=false) const;
171
175 double loGammaqME(const cPDVector & particles,
176 const vector<Lorentz5Momentum> & momenta,
177 bool first=false) const;
178
182 double loGammaqbarME(const cPDVector & particles,
183 const vector<Lorentz5Momentum> & momenta,
184 bool first=false) const;
185
189 double loGammagME(const cPDVector & particles,
190 const vector<Lorentz5Momentum> & momenta,
191 bool first=false) const;
192
196 InvEnergy2 realGammaGammagME(const cPDVector & particles,
197 const vector<Lorentz5Momentum> & momenta,
198 DipoleType dipole, RadiationType rad,
199 bool first=false) const;
200
204 InvEnergy2 realGammaGammaqME(const cPDVector & particles,
205 const vector<Lorentz5Momentum> & momenta,
206 DipoleType dipole, RadiationType rad,
207 bool first=false) const;
208
212 InvEnergy2 realGammaGammaqbarME(const cPDVector & particles,
213 const vector<Lorentz5Momentum> & momenta,
214 DipoleType dipole, RadiationType rad,
215 bool first=false) const;
216
220 double subtractedVirtual() const;
221
225 double subtractedReal(pair<double,double> x, double z,
226 double zJac, double oldqPDF, double newqPDF,
227 double newgPDF,bool order) const;
228
236 double collinearQuark(double x, Energy2 mu2, double jac, double z,
237 double oldPDF, double newPDF) const;
238
242 double collinearGluon(Energy2 mu2, double jac, double z,
243 double oldPDF, double newPDF) const;
245
252 double realME(const cPDVector & particles,
253 const vector<Lorentz5Momentum> & momenta) const;
254
258 RealEmissionProcessPtr hardQCDEmission(RealEmissionProcessPtr,
260 pair<double,double>);
261
265 RealEmissionProcessPtr hardQEDEmission(RealEmissionProcessPtr,
267 pair<double,double>);
268
272 pair<double,double> supressionFunction(Energy pT,Energy scale) const {
274 Energy2 scale2 = sqr(scale), pT2 = sqr(pT);
275 switch( supressionFunction_ ) {
276 case 0:
277 return make_pair(1.,0.);
278 case 1:
279 if(pT < scale ) return make_pair(1.,0.);
280 else return make_pair(0.,1.);
281 case 2:
282 return make_pair(scale2/(pT2+scale2),pT2/(pT2+scale2));
283 default:
284 assert(false);
285 return make_pair(0.,0.);
286 }
287 }
288
289
290protected:
291
298 virtual IBPtr clone() const;
299
304 virtual IBPtr fullclone() const;
306protected:
307
315 virtual void doinit();
317
318private:
319
325
326private:
327
335 AbstractFFVVertexPtr FFPvertex_;
336
340 AbstractFFVVertexPtr FFGvertex_;
342
350 mutable double zTilde_;
351
355 mutable double vTilde_;
356
360 mutable double phi_;
362
366 unsigned int contrib_;
367
371 double power_;
372
377
381 unsigned int process_;
382
386 unsigned int threeBodyProcess_;
387
392
396 mutable double CFfact_;
397
401 mutable double TRfact_;
402
406 mutable double alphaS_;
407
412
416 mutable double alphaEM_;
417
421 mutable double loME_;
422
427
431 mutable DipoleType dipole_;
432
441
445 unsigned int supressionScale_;
446
450 Energy lambda_;
452
453
463
471 vector<tcBeamPtr> beams_;
472
476 vector<tcPDPtr> partons_;
478
492
496 double preQCDqg_;
497
502
503 double preQEDqqbarq_;
504 double preQEDqqbarqbar_;
505 double preQEDqgq_;
506 double preQEDgqbarqbar_;
507
511 vector<double> prefactor_;
513
517 Energy minpT_;
518
522 ShowerAlphaPtr alphaQCD_;
523
527 ShowerAlphaPtr alphaQED_;
528
532 unsigned int scaleChoice_;
533
538
539};
540
541}
542
543#endif /* HERWIG_MEPP2GammaGammaPowheg_H */
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwMEBase.h:87
Here is the documentation of the MEPP2GammaGammaPowheg class.
AbstractFFVVertexPtr FFGvertex_
FFGVertex.
bool fixedAlphaS_
Use a fixed value of .
Energy minpT_
The transverse momentum of the jet.
virtual Selector< DiagramIndex > diagrams(const DiagramVector &dv) const
Get diagram selector.
vector< double > prefactor_
The prefactors as a vector for easy use.
MEPP2GammaGammaPowheg & operator=(const MEPP2GammaGammaPowheg &)=delete
The assignment operator is private and must never be called.
ShowerAlphaPtr alphaQCD_
Pointer to the object calculating the strong coupling.
double TRfact_
Factor for dependent pieces.
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
double loGammaGammaME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, bool first=false) const
Leading-order matrix element for .
double power_
Power for sampling .
double loGammaqbarME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, bool first=false) const
Leading-order matrix element for .
virtual double NLOWeight() const
Calculate of the full next-to-leading order weight.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
double realME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta) const
The real matrix element divided by , to be implemented in the inheriting classes.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual void getDiagrams() const
Add all possible diagrams with the add() function.
virtual Energy2 scale() const
Return the scale associated with the last set phase space point.
ShowerAlphaPtr alphaQED_
Pointer to the object calculating the EM.
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
double loME_
Leading-order matrix element.
unsigned int contrib_
Whether to generate the positive, negative or leading order contribution.
vector< tcBeamPtr > beams_
Properties of the incoming particles.
double alphaEM_
Electromagnetic coupling.
static void Init()
The standard Init function used to initialize the interfaces.
Energy lambda_
Scalar for the supression function.
unsigned int supressionFunction_
Supression Function.
virtual Selector< const ColourLines * > colourGeometries(tcDiagPtr diag) const
Return a Selector with possible colour geometries for the selected diagram weighted by their relative...
unsigned int threeBodyProcess_
Processes.
double CFfact_
Factor for dependent pieces.
MEPP2GammaGammaPowheg()
The default constructor.
double loGammagME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, bool first=false) const
Leading-order matrix element for .
double preQCDqg_
The prefactor, for the channel.
double zTilde_
Kinematic variables for the real radiation.
virtual int nDim() const
The number of internal degrees of freedom used in the matrix element.
RealEmissionProcessPtr hardQCDEmission(RealEmissionProcessPtr, ParticleVector, pair< double, double >)
Generate hard QCD emission.
ProductionMatrixElement me_
The matrix element.
double loGammaqME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, bool first=false) const
Leading-order matrix element for .
virtual bool generateKinematics(const double *r)
Generate internal degrees of freedom given nDim() uniform random numbers in the interval .
virtual double me2() const
The matrix element for the kinematical configuration previously provided by the last call to setKinem...
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction)
Apply the POWHEG style correction.
double collinearQuark(double x, Energy2 mu2, double jac, double z, double oldPDF, double newPDF) const
Calculate of the collinear counterterms.
double preQCDqqbarq_
Constants for the sampling.
virtual IBPtr clone() const
Make a simple clone of this object.
double preQCDqqbarqbar_
The prefactor, for the channel.
InvEnergy2 realGammaGammagME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, DipoleType dipole, RadiationType rad, bool first=false) const
Real emission matrix element for .
unsigned int scaleChoice_
Scale choice.
int maxflavour_
Allowed flavours of the incoming quarks.
virtual CrossSection dSigHatDR() const
Return the matrix element squared differential in the variables given by the last call to generateKin...
DipoleType dipole_
the selected dipole
pair< double, double > supressionFunction(Energy pT, Energy scale) const
The supression function.
AbstractFFVVertexPtr FFPvertex_
Vertices.
unsigned int supressionScale_
Choice for the scale in the supression function.
InvEnergy2 realGammaGammaqbarME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, DipoleType dipole, RadiationType rad, bool first=false) const
Real emission matrix element for .
tcPDPtr gluon_
Pointer to the gluon ParticleData object.
double subtractedVirtual() const
The dipole subtractedvirtual contribution.
double subtractedReal(pair< double, double > x, double z, double zJac, double oldqPDF, double newqPDF, double newgPDF, bool order) const
Subtracted real contribution.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
bool quarkplus_
Hard emission stuff.
RealEmissionProcessPtr hardQEDEmission(RealEmissionProcessPtr, ParticleVector, pair< double, double >)
Generate hard QED emission.
double collinearGluon(Energy2 mu2, double jac, double z, double oldPDF, double newPDF) const
Gluon collinear counter term.
InvEnergy2 realGammaGammaqME(const cPDVector &particles, const vector< Lorentz5Momentum > &momenta, DipoleType dipole, RadiationType rad, bool first=false) const
Real emission matrix element for .
double preQCDgqbar_
The prefactor, for the channel.
vector< tcPDPtr > partons_
Pointers to the ParticleDataObjects for the partons.
The storage of the helicity amplitude expression for the matrix element of a hard process.
vector< DiagPtr > DiagramVector
ShowerInteraction
Handy header file to be included in all Shower classes.
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< PPtr > ParticleVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
vector< cPDPtr > cPDVector