herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
MEQCD2to2.h
1 // -*- C++ -*-
2 //
3 // MEQCD2to2.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_MEQCD2to2_H
10 #define HERWIG_MEQCD2to2_H
11 //
12 // This is the declaration of the MEQCD2to2 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/Vertex/AbstractVVVVVertex.h"
20 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
21 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
22 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
23 
24 namespace Herwig {
25 using namespace ThePEG;
26 using namespace ThePEG::Helicity;
27 
35 class MEQCD2to2: public HwMEBase {
36 
37 public:
38 
42  MEQCD2to2();
43 
50  virtual unsigned int orderInAlphaS() const;
51 
56  virtual unsigned int orderInAlphaEW() const;
57 
65  virtual double me2() const;
66 
70  virtual Energy2 scale() const;
71 
75  virtual void getDiagrams() const;
76 
85  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
86 
95  colourGeometries(tcDiagPtr diag) const;
96 
100  virtual void constructVertex(tSubProPtr);
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 gg2ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
144  vector<VectorWaveFunction> &g3,vector<VectorWaveFunction> &g4,
145  unsigned int flow) const;
146 
155  double gg2qqbarME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
156  vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
157  unsigned int flow) const;
158 
167  double qqbar2ggME(vector<SpinorWaveFunction> & q,vector<SpinorBarWaveFunction> & qbar,
168  vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
169  unsigned int flow) const;
170 
179  double qg2qgME(vector<SpinorWaveFunction> & qin,vector<VectorWaveFunction> &g2,
180  vector<SpinorBarWaveFunction> & qout,vector<VectorWaveFunction> &g4,
181  unsigned int flow) const;
182 
191  double qbarg2qbargME(vector<SpinorBarWaveFunction> & qin,
192  vector<VectorWaveFunction> &g2,
193  vector<SpinorWaveFunction> & qout,vector<VectorWaveFunction> &g4,
194  unsigned int flow) const;
195 
204  double qq2qqME(vector<SpinorWaveFunction> & q1, vector<SpinorWaveFunction> & q2,
205  vector<SpinorBarWaveFunction> & q3, vector<SpinorBarWaveFunction> & q4,
206  unsigned int flow) const;
207 
216  double qbarqbar2qbarqbarME(vector<SpinorBarWaveFunction> & q1,
217  vector<SpinorBarWaveFunction> & q2,
218  vector<SpinorWaveFunction> & q3,
219  vector<SpinorWaveFunction> & q4,
220  unsigned int flow) const;
221 
230  double qqbar2qqbarME(vector<SpinorWaveFunction> & q1,
231  vector<SpinorBarWaveFunction> & q2,
232  vector<SpinorBarWaveFunction> & q3,
233  vector<SpinorWaveFunction> & q4,
234  unsigned int flow) const;
236 
237 protected:
238 
245  virtual IBPtr clone() const { return new_ptr(*this); }
246 
251  virtual IBPtr fullclone() const { return new_ptr(*this); }
253 
254 protected:
255 
263  virtual void doinit();
264 
274  virtual void rebind(const TranslationMap & trans)
275  ;
276 
282  virtual IVector getReferences();
284 
285 
286 private:
287 
292  MEQCD2to2 & operator=(const MEQCD2to2 &) = delete;
293 
294 private:
295 
303  AbstractVVVVVertexPtr _ggggvertex;
304 
308  AbstractVVVVertexPtr _gggvertex;
309 
313  AbstractFFVVertexPtr _qqgvertex;
315 
319  unsigned int _maxflavour;
320 
324  unsigned int _process;
325 
329  mutable unsigned int _flow;
330 
334  mutable unsigned int _diagram;
335 
340 
349 
353  vector<PDPtr> _quark;
354 
358  vector<PDPtr> _antiquark;
360 };
361 
362 }
363 
364 #endif /* HERWIG_MEQCD2to2_H */
unsigned int _maxflavour
Maximum numbere of quark flavours to include.
Definition: MEQCD2to2.h:319
ProductionMatrixElement _me
Matrix element.
Definition: MEQCD2to2.h:339
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: MEQCD2to2.h:245
vector< PDPtr > _quark
the quarks
Definition: MEQCD2to2.h:353
PDPtr _gluon
ParticleData objects of the partons.
Definition: MEQCD2to2.h:348
The MEQCD2to2 class provides the matrix elements for QCD scattering processes in hadron-hadron colli...
Definition: MEQCD2to2.h:35
AbstractVVVVVertexPtr _ggggvertex
Vertices needed to compute the diagrams.
Definition: MEQCD2to2.h:303
The storage of the helicity amplitude expression for the matrix element of a hard process...
unsigned int _diagram
Diagram.
Definition: MEQCD2to2.h:334
vector< PDPtr > _antiquark
the antiquarks
Definition: MEQCD2to2.h:358
ThePEG::Ptr< SubProcess >::transient_pointer tSubProPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: MEQCD2to2.h:251
unsigned int _flow
Colour flow.
Definition: MEQCD2to2.h:329
vector< DiagPtr > DiagramVector
-*- C++ -*-
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
vector< IBPtr > IVector
unsigned int _process
Processes to include.
Definition: MEQCD2to2.h:324
AbstractVVVVertexPtr _gggvertex
vertex
Definition: MEQCD2to2.h:308
AbstractFFVVertexPtr _qqgvertex
vertex
Definition: MEQCD2to2.h:313