herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
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 
13 namespace Herwig {
14 
15 using 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 
30 public:
31 
39 
45  virtual POWHEGType hasPOWHEGCorrection() {return ISR;}
46 
50  virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
53 
54 public:
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 
119  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
120 
129  colourGeometries(tcDiagPtr diag) const;
131 
132 public:
133 
140  void persistentOutput(PersistentOStream & os) const;
141 
147  void persistentInput(PersistentIStream & is, int version);
149 
156  static void Init();
157 
158 protected:
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 {
273  if(supressionScale_==0) scale = lambda_;
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 
290 protected:
291 
298  virtual IBPtr clone() const;
299 
304  virtual IBPtr fullclone() const;
306 protected:
307 
315  virtual void doinit();
317 
318 private:
319 
324  MEPP2GammaGammaPowheg & operator=(const MEPP2GammaGammaPowheg &) = delete;
325 
326 private:
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 
440  unsigned int supressionFunction_;
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 
501  double preQCDgqbar_;
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 */
bool quarkplus_
Hard emission stuff.
double alphaEM_
Electromagnetic coupling.
ShowerInteraction
Handy header file to be included in all Shower classes.
unsigned int contrib_
Whether to generate the positive, negative or leading order contribution.
double power_
Power for sampling .
ProductionMatrixElement me_
The matrix element.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
vector< double > prefactor_
The prefactors as a vector for easy use.
double zTilde_
Kinematic variables for the real radiation.
double TRfact_
Factor for dependent pieces.
vector< tcBeamPtr > beams_
Properties of the incoming particles.
AbstractFFVVertexPtr FFPvertex_
Vertices.
unsigned int scaleChoice_
Scale choice.
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
tcPDPtr gluon_
Pointer to the gluon ParticleData object.
The storage of the helicity amplitude expression for the matrix element of a hard process...
double preQCDqqbarq_
Constants for the sampling.
vector< tcPDPtr > partons_
Pointers to the ParticleDataObjects for the partons.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
pair< double, double > supressionFunction(Energy pT, Energy scale) const
The supression function.
double preQCDqqbarqbar_
The prefactor, for the channel.
AbstractFFVVertexPtr FFGvertex_
FFGVertex.
double preQCDgqbar_
The prefactor, for the channel.
ShowerAlphaPtr alphaQCD_
Pointer to the object calculating the strong coupling.
vector< cPDPtr > cPDVector
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwMEBase.h:87
Energy lambda_
Scalar for the supression function.
unsigned int supressionFunction_
Supression Function.
unsigned int threeBodyProcess_
Processes.
vector< DiagPtr > DiagramVector
int maxflavour_
Allowed flavours of the incoming quarks.
unsigned int process_
Processes.
-*- C++ -*-
ShowerAlphaPtr alphaQED_
Pointer to the object calculating the EM.
Energy minpT_
The transverse momentum of the jet.
Here is the documentation of the MEPP2GammaGammaPowheg class.
double loME_
Leading-order matrix element.
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
double preQCDqg_
The prefactor, for the channel.
unsigned int supressionScale_
Choice for the scale in the supression function.
vector< PPtr > ParticleVector
DipoleType dipole_
the selected dipole
double CFfact_
Factor for dependent pieces.
bool fixedAlphaS_
Use a fixed value of .