herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
MEPP2QQ.h
1 // -*- C++ -*-
2 //
3 // MEPP2QQ.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_MEPP2QQ_H
10 #define HERWIG_MEPP2QQ_H
11 //
12 // This is the declaration of the MEPP2QQ class.
13 //
14 
15 #include "Herwig/MatrixElement/HwMEBase.h"
16 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
17 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
18 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
19 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
20 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
21 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
22 
23 namespace Herwig {
24 using namespace ThePEG;
25 using namespace ThePEG::Helicity;
26 
34 class MEPP2QQ: public HwMEBase {
35 
36 public:
37 
41  MEPP2QQ();
42 
49  virtual unsigned int orderInAlphaS() const;
50 
55  virtual unsigned int orderInAlphaEW() const;
56 
64  virtual double me2() const;
65 
69  virtual Energy2 scale() const;
70 
74  virtual void getDiagrams() const;
75 
84  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
85 
94  colourGeometries(tcDiagPtr diag) const;
95 
99  virtual void constructVertex(tSubProPtr);
101 
102 
103 public:
104 
111  void persistentOutput(PersistentOStream & os) const;
112 
118  void persistentInput(PersistentIStream & is, int version);
120 
127  static void Init();
128 
129 protected:
130 
143  double gg2qqbarME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
144  vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
145  unsigned int flow) const;
146 
155  double qqbar2qqbarME(vector<SpinorWaveFunction> & q1,
156  vector<SpinorBarWaveFunction> & q2,
157  vector<SpinorBarWaveFunction> & q3,
158  vector<SpinorWaveFunction> & q4,
159  unsigned int flow) const;
160 
169  double qq2qqME(vector<SpinorWaveFunction> & q1, vector<SpinorWaveFunction> & q2,
170  vector<SpinorBarWaveFunction> & q3, vector<SpinorBarWaveFunction> & q4,
171  unsigned int flow) const;
172 
181  double qbarqbar2qbarqbarME(vector<SpinorBarWaveFunction> & q1,
182  vector<SpinorBarWaveFunction> & q2,
183  vector<SpinorWaveFunction> & q3,
184  vector<SpinorWaveFunction> & q4,
185  unsigned int flow) const;
186 
195  double qg2qgME(vector<SpinorWaveFunction> & qin,vector<VectorWaveFunction> &g2,
196  vector<SpinorBarWaveFunction> & qout,vector<VectorWaveFunction> &g4,
197  unsigned int flow) const;
198 
207  double qbarg2qbargME(vector<SpinorBarWaveFunction> & qin,
208  vector<VectorWaveFunction> &g2,
209  vector<SpinorWaveFunction> & qout,vector<VectorWaveFunction> &g4,
210  unsigned int flow) const;
212 
213 protected:
214 
221  virtual IBPtr clone() const { return new_ptr(*this); }
222 
227  virtual IBPtr fullclone() const { return new_ptr(*this); }
229 
230 protected:
231 
239  virtual void doinit();
240 
250  virtual void rebind(const TranslationMap & trans)
251  ;
252 
258  virtual IVector getReferences();
260 
261 private:
262 
267  MEPP2QQ & operator=(const MEPP2QQ &) = delete;
268 
269 private:
270 
278  AbstractVVVVertexPtr _gggvertex;
279 
283  AbstractFFVVertexPtr _qqgvertex;
285 
289  unsigned int _quarkflavour;
290 
294  unsigned int _process;
295 
300  unsigned int _bottomopt;
301 
305  unsigned int _topopt;
306 
310  unsigned int _maxflavour;
311 
315  mutable unsigned int _flow;
316 
320  mutable unsigned int _diagram;
321 
326 
335 
339  vector<PDPtr> _quark;
340 
344  vector<PDPtr> _antiquark;
346 
347 };
348 
349 }
350 
351 #endif /* HERWIG_MEPP2QQ_H */
The MEPP2QQ class implements the production of a heavy quark-antiquark pair via QCD.
Definition: MEPP2QQ.h:34
AbstractVVVVertexPtr _gggvertex
Vertices needed to compute the diagrams.
Definition: MEPP2QQ.h:278
unsigned int _bottomopt
Option for the treatment of bottom and lighter quark masses.
Definition: MEPP2QQ.h:300
AbstractFFVVertexPtr _qqgvertex
vertex
Definition: MEPP2QQ.h:283
unsigned int _process
Processes to include.
Definition: MEPP2QQ.h:294
unsigned int _quarkflavour
Quark Flavour.
Definition: MEPP2QQ.h:289
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
PDPtr _gluon
ParticleData objects of the partons.
Definition: MEPP2QQ.h:334
vector< PDPtr > _quark
the quarks
Definition: MEPP2QQ.h:339
The storage of the helicity amplitude expression for the matrix element of a hard process...
unsigned int _maxflavour
Maximum numbere of quark flavours to include.
Definition: MEPP2QQ.h:310
unsigned int _diagram
Diagram.
Definition: MEPP2QQ.h:320
ThePEG::Ptr< SubProcess >::transient_pointer tSubProPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
ProductionMatrixElement _me
Matrix element.
Definition: MEPP2QQ.h:325
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: MEPP2QQ.h:227
vector< PDPtr > _antiquark
the antiquarks
Definition: MEPP2QQ.h:344
vector< DiagPtr > DiagramVector
-*- C++ -*-
unsigned int _topopt
Option for the treatment of top quark masses.
Definition: MEPP2QQ.h:305
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: MEPP2QQ.h:221
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
vector< IBPtr > IVector
unsigned int _flow
Colour flow.
Definition: MEPP2QQ.h:315