herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
StandardModel.h
1 // -*- C++ -*-
2 //
3 // StandardModel.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_StandardModel_H
10 #define HERWIG_StandardModel_H
11 //
12 // This is the declaration of the StandardModel class.
13 
14 #include "ThePEG/StandardModel/StandardModelBase.h"
15 #include "Herwig/Models/StandardModel/RunningMassBase.h"
16 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
17 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
18 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
19 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
20 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
21 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
22 #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
23 #include "ThePEG/Helicity/Vertex/AbstractSSSSVertex.h"
24 #include "Herwig/Models/General/ModelGenerator.fh"
25 #include "StandardModel.fh"
26 
27 namespace Herwig {
28 using namespace ThePEG;
29 using namespace ThePEG::Helicity;
30 
40 
45 
49  typedef Ptr<Herwig::RunningMassBase>::pointer runPtr;
50 
54  typedef Ptr<Herwig::RunningMassBase>::transient_pointer trunPtr;
56 
57 public:
58 
64  StandardModel();
65 
70 
74  virtual ~StandardModel();
76 
77 public:
78 
85  void persistentOutput(PersistentOStream & os) const;
86 
92  void persistentInput(PersistentIStream & is, int version);
94 
98  static void Init();
99 
100 protected:
104  virtual bool registerDefaultVertices() const { return true; }
105 
106 public:
107 
115  double lnu() const {
116  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()+anu());
117  }
118 
122  double le() const {
123  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()+ae());
124  }
125 
129  double lu() const {
130  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()+au());
131  }
132 
136  double ld() const {
137  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()+ad());
138  }
139 
143  double rnu() const {
144  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()-anu());
145  }
146 
150  double re() const {
151  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()-ae());
152  }
153 
157  double ru() const {
158  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()-au());
159  }
160 
164  double rd() const {
165  return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()-ad());
166  }
168 
176  virtual tAbstractFFVVertexPtr vertexFFZ() const {
177  return FFZVertex_;
178  }
179 
183  virtual tAbstractFFVVertexPtr vertexFFP() const {
184  return FFPVertex_;
185  }
186 
190  virtual tAbstractFFVVertexPtr vertexFFG() const {
191  return FFGVertex_;
192  }
193 
197  virtual tAbstractFFVVertexPtr vertexFFW() const {
198  return FFWVertex_;
199  }
200 
204  virtual tAbstractFFSVertexPtr vertexFFH() const {
205  return FFHVertex_;
206  }
207 
211  virtual tAbstractVVVVertexPtr vertexGGG() const {
212  return GGGVertex_;
213  }
214 
218  virtual tAbstractVVVVertexPtr vertexWWW() const {
219  return WWWVertex_;
220  }
221 
225  virtual tAbstractVVSVertexPtr vertexWWH() const {
226  return WWHVertex_;
227  }
228 
232  virtual tAbstractVVVVVertexPtr vertexWWWW() const {
233  return WWWWVertex_;
234  }
235 
239  virtual tAbstractVVVVVertexPtr vertexGGGG() const {
240  return GGGGVertex_;
241  }
242 
246  virtual tAbstractVVSVertexPtr vertexHGG() const {
247  return HGGVertex_;
248  }
249 
253  virtual tAbstractVVSVertexPtr vertexHPP() const {
254  return HPPVertex_;
255  }
256 
260  virtual tAbstractSSSVertexPtr vertexHHH() const {
261  return HHHVertex_;
262  }
263 
267  virtual tAbstractVVSSVertexPtr vertexWWHH() const {
268  return WWHHVertex_;
269  }
270 
274  unsigned int numberOfVertices() const {
275  return vertexList_.size() + extraVertices_.size();
276  }
277 
281  tVertexBasePtr vertex(size_t ix) const {
282  const size_t S = vertexList_.size();
283  if ( ix < S )
284  return vertexList_[ix];
285  else
286  return extraVertices_[ix - S];
287  }
289 
295  Energy mass(Energy2 scale,tcPDPtr part) const {
296  return runningMass_->value(scale,part);
297  }
298 
302  trunPtr massPtr() const {
303  return runningMass_;
304  }
305 
309  const map<string,pair<unsigned int,int> > & couplings() const {
310  return couplings_;
311  }
312 
313 protected:
314 
321  virtual IBPtr clone() const;
322 
327  virtual IBPtr fullclone() const;
329 
330 protected:
331 
337  virtual void doinit();
339 
340 protected:
341 
345  void addVertex(VertexBasePtr in) {
346  if ( in )
347  vertexList_.push_back(in);
348  }
349 
354  void resetMass(long id, Energy mass,tPDPtr particle=tPDPtr());
355 
356 protected:
357 
361  void setCouplings(string name,pair<unsigned int,int> vals) {
362  couplings_[name] = vals;
363  }
364 
365 private:
366 
370  StandardModel & operator=(const StandardModel &) = delete;
371 
372 private:
373 
382  AbstractFFVVertexPtr FFZVertex_;
383 
387  AbstractFFVVertexPtr FFPVertex_;
388 
392  AbstractFFVVertexPtr FFGVertex_;
393 
397  AbstractFFVVertexPtr FFWVertex_;
398 
402  AbstractFFSVertexPtr FFHVertex_;
403 
407  AbstractVVSVertexPtr WWHVertex_;
408 
412  AbstractVVVVertexPtr GGGVertex_;
413 
417  AbstractVVVVertexPtr WWWVertex_;
418 
422  AbstractVVVVVertexPtr GGGGVertex_;
423 
427  AbstractVVVVVertexPtr WWWWVertex_;
428 
432  AbstractVVSVertexPtr HGGVertex_;
433 
437  AbstractVVSVertexPtr HPPVertex_;
438 
442  AbstractSSSVertexPtr HHHVertex_;
443 
447  AbstractVVSSVertexPtr WWHHVertex_;
448 
452  vector<VertexBasePtr> vertexList_;
453 
457  vector<VertexBasePtr> extraVertices_;
459 
463  runPtr runningMass_;
464 
468  ModelGeneratorPtr modelGenerator_;
469 
473  map<string,pair<unsigned int,int> > couplings_;
474 };
475 
476 }
477 
478 #endif /* HERWIG_StandardModel_H */
double lu() const
The left-handed coupling of an up type quark.
map< string, pair< unsigned int, int > > couplings_
Couplings in the model.
virtual tAbstractFFVVertexPtr vertexFFZ() const
Pointers to the objects handling the vertices.
virtual tAbstractVVSVertexPtr vertexHGG() const
Pointer to the quartic gluon vertex.
virtual tAbstractVVVVVertexPtr vertexWWWW() const
Pointer to the quartic electroweak gauge boson vertex.
double sqrt(int x)
virtual tAbstractVVSVertexPtr vertexHPP() const
Pointer to the quartic gluon vertex.
void addVertex(VertexBasePtr in)
Add a vertex to the list.
AbstractFFSVertexPtr FFHVertex_
Pointer to the fermion-fermion-Higgs vertex.
ThePEG::Ptr< ParticleData >::transient_pointer tPDPtr
tVertexBasePtr vertex(size_t ix) const
Access to a vertex from the list.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
AbstractVVSSVertexPtr WWHHVertex_
Pointer to WWHH vertex.
virtual tAbstractVVVVertexPtr vertexWWW() const
Pointer to the triple electroweak gauge boson vertex.
This is the Herwig StandardModel class which inherits from ThePEG Standard Model class and implements...
Definition: StandardModel.h:39
virtual bool registerDefaultVertices() const
Should the default vertices be considered for generic diagrams.
unsigned int numberOfVertices() const
Total number of vertices.
virtual tAbstractFFVVertexPtr vertexFFP() const
Pointer to the fermion-fermion-photon vertex.
AbstractFFVVertexPtr FFWVertex_
Pointer to the fermion-fermion-W vertex.
runPtr runningMass_
The running mass.
trunPtr massPtr() const
Return a pointer to the object handling the running mass.
AbstractSSSVertexPtr HHHVertex_
Pointer to triple Higgs vertex.
AbstractFFVVertexPtr FFZVertex_
Pointers to the vertices for Standard Model helicity amplitude calculations.
AbstractVVSVertexPtr WWHVertex_
Pointer to the two electroweak gauge boson Higgs vertex.
AbstractFFVVertexPtr FFGVertex_
Pointer to the fermion-fermion-gluon vertex.
AbstractVVVVertexPtr WWWVertex_
Pointer to the triple electroweak gauge boson vertex.
double rnu() const
The right-handed coupling of a neutrino.
double rd() const
The right-handed coupling of a down type quark.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
double lnu() const
The left and right couplings of the Z^0 including sin and cos theta_W.
AbstractVVVVertexPtr GGGVertex_
Pointer to the triple gluon vertex.
void setCouplings(string name, pair< unsigned int, int > vals)
Set the couplings in the model.
const map< string, pair< unsigned int, int > > & couplings() const
Set the couplings in the model.
virtual tAbstractVVVVVertexPtr vertexGGGG() const
Pointer to the quartic gluon vertex.
double ld() const
The left-handed coupling of a down type quark.
AbstractVVSVertexPtr HGGVertex_
Pointer to higgs-gluon-gluon vertex.
Ptr< Herwig::RunningMassBase >::pointer runPtr
Some typedefs for the pointers.
Definition: StandardModel.h:49
Energy mass(Energy2 scale, tcPDPtr part) const
Return the running mass for a given scale and particle type.
virtual tAbstractVVSSVertexPtr vertexWWHH() const
Pointer to the WWHH vertex.
AbstractVVSVertexPtr HPPVertex_
Pointer to higgs-gamma-gamma vertex.
-*- C++ -*-
virtual tAbstractSSSVertexPtr vertexHHH() const
Pointer to the triple Higgs vertex.
vector< VertexBasePtr > vertexList_
Full list of vertices as a vector to allow searching.
virtual tAbstractFFSVertexPtr vertexFFH() const
Pointer to the fermion-fermion-Higgs vertex.
AbstractVVVVVertexPtr WWWWVertex_
Pointer to the quartic electroweak gauge boson vertex.
double re() const
The right-handed coupling of a charged lepton.
AbstractFFVVertexPtr FFPVertex_
Pointer to the fermion-fermion-photon vertex.
ModelGeneratorPtr modelGenerator_
Pointer to ModelGenerator Class.
Ptr< Herwig::RunningMassBase >::transient_pointer trunPtr
Transient pointer to the RunningMassBase object.
Definition: StandardModel.h:54
virtual tAbstractFFVVertexPtr vertexFFW() const
Pointer to the fermion-fermion-W vertex.
double le() const
The left-handed coupling of a charged lepton.
virtual tAbstractVVVVertexPtr vertexGGG() const
Pointer to the triple gluon vertex.
virtual tAbstractFFVVertexPtr vertexFFG() const
Pointer to the fermion-fermion-gluon vertex.
double ru() const
The right-handed coupling of an up type quark.
vector< VertexBasePtr > extraVertices_
Additional vertices to be considered in automatic ME construction.
AbstractVVVVVertexPtr GGGGVertex_
Pointer to the quartic gluon vertex.
virtual tAbstractVVSVertexPtr vertexWWH() const
Pointer to the two electroweak gauge boson Higgs vertex.