herwig is hosted by Hepforge, IPPP Durham
Herwig  7.1.5
MEee2gZ2ll.h
1 // -*- C++ -*-
2 //
3 // MEee2gZ2ll.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2017 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_MEee2gZ2ll_H
10 #define HERWIG_MEee2gZ2ll_H
11 //
12 // This is the declaration of the MEee2gZ2ll class.
13 //
14 
15 #include "Herwig/MatrixElement/HwMEBase.h"
16 #include "Herwig/Models/StandardModel/StandardModel.h"
17 #include "ThePEG/PDT/EnumParticles.h"
18 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
19 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
20 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
21 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
22 
23 namespace Herwig {
24 
25 using namespace ThePEG;
26 
35 class MEee2gZ2ll: public HwMEBase {
36 
37 public:
38 
42  MEee2gZ2ll() : allowed_(0), pTmin_(GeV),
43  preFactor_(6.) {
44  massOption(vector<unsigned int>(2,1));
45  }
46 
54  virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
55 
59  virtual bool hasMECorrection() {return false;}
60 
64  virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
67 
68 public:
69 
76  virtual unsigned int orderInAlphaS() const;
77 
82  virtual unsigned int orderInAlphaEW() const;
83 
91  virtual double me2() const;
92 
96  virtual Energy2 scale() const;
97 
101  virtual void getDiagrams() const;
102 
111  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
112 
121  colourGeometries(tcDiagPtr diag) const;
122 
126  virtual void constructVertex(tSubProPtr);
128 
129 
130 public:
131 
138  void persistentOutput(PersistentOStream & os) const;
139 
145  void persistentInput(PersistentIStream & is, int version);
147 
154  static void Init();
155 
156 protected:
157 
164  virtual IBPtr clone() const {return new_ptr(*this);}
165 
170  virtual IBPtr fullclone() const {return new_ptr(*this);}
172 
173 protected:
174 
182  virtual void doinit();
183 
193  virtual void rebind(const TranslationMap & trans)
194  ;
195 
201  virtual IVector getReferences();
203 
204 protected:
205 
211  double loME(const vector<cPDPtr> & partons,
212  const vector<Lorentz5Momentum> & momenta,
213  bool first) const;
214 
225  ProductionMatrixElement HelicityME(vector<SpinorWaveFunction> & fin,
226  vector<SpinorBarWaveFunction> & ain,
227  vector<SpinorBarWaveFunction> & fout,
228  vector<SpinorWaveFunction> & aout,
229  double & me,
230  double & cont,
231  double & BW ) const;
232 
244  double meRatio(vector<cPDPtr> partons,
245  vector<Lorentz5Momentum> momenta,
246  unsigned int iemittor,
247  bool subtract=false) const;
248 
255  InvEnergy2 realME(const vector<cPDPtr> & partons,
256  const vector<Lorentz5Momentum> & momenta) const;
257 
261  Energy generateHard(RealEmissionProcessPtr tree,
262  vector<Lorentz5Momentum> & emission,
263  unsigned int & iemit, unsigned int & ispect,
264  bool applyVeto);
265 
266 
267 protected:
268 
272  AbstractFFVVertexPtr FFZVertex() const {return FFZVertex_;}
273 
277  AbstractFFVVertexPtr FFPVertex() const {return FFPVertex_;}
278 
282  PDPtr Z0() const {return Z0_;}
283 
287  PDPtr gamma() const {return gamma_;}
288 
289 private:
290 
295  MEee2gZ2ll & operator=(const MEee2gZ2ll &) = delete;
296 
297 private:
298 
306  AbstractFFVVertexPtr FFZVertex_;
307 
311  AbstractFFVVertexPtr FFPVertex_;
313 
317  PDPtr Z0_;
318 
322  PDPtr gamma_;
323 
327  int allowed_;
331  double d_kt1_;
335  ShowerAlphaPtr alphaQED_;
336 
344  Energy pTmin_;
345 
349  double preFactor_;
350 
354  vector<cPDPtr> partons_;
355 
359  vector<Lorentz5Momentum> loMomenta_;
361 
362 };
363 
364 }
365 
366 #include "ThePEG/Utilities/ClassTraits.h"
367 
368 namespace ThePEG {
369 
374 template <>
375 struct BaseClassTrait<Herwig::MEee2gZ2ll,1> {
377  typedef Herwig::HwMEBase NthBase;
378 };
379 
382 template <>
383 struct ClassTraits<Herwig::MEee2gZ2ll>
384  : public ClassTraitsBase<Herwig::MEee2gZ2ll> {
386  static string className() { return "Herwig::MEee2gZ2ll"; }
394  static string library() { return "HwMELepton.so"; }
395 };
396 
399 }
400 
401 #endif /* HERWIG_MEee2gZ2ll_H */
ShowerInteraction
Handy header file to be included in all Shower classes.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
MEee2gZ2ll()
The default constructor.
Definition: MEee2gZ2ll.h:42
The MEee2gZ2ll class provides the matrix element for .
Definition: MEee2gZ2ll.h:35
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: MEee2gZ2ll.h:170
The storage of the helicity amplitude expression for the matrix element of a hard process...
virtual bool hasMECorrection()
Has an old fashioned ME correction.
Definition: MEee2gZ2ll.h:59
ThePEG::Ptr< SubProcess >::transient_pointer tSubProPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
virtual POWHEGType hasPOWHEGCorrection()
Members for hard corrections to the emission of QCD radiation.
Definition: MEee2gZ2ll.h:54
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwMEBase.h:89
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: MEee2gZ2ll.h:164
vector< DiagPtr > DiagramVector
-*- C++ -*-
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:37
vector< IBPtr > IVector