herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
MEHiggsPair.h
1 // -*- C++ -*-
2 //
3 // MEHiggsPair.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2009-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_MEHiggsPair_H
10 #define HERWIG_MEHiggsPair_H
11 //
12 // This is the declaration of the MEHiggsPair class.
13 //
14 
15 
16 #include "Herwig/MatrixElement/HwMEBase.h"
17 #include "ThePEG/Repository/UseRandom.h"
18 #include "Herwig/PDT/GenericMassGenerator.h"
19 #include "Herwig/Utilities/Kinematics.h"
20 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
21 
22 
23 namespace Herwig {
24 using namespace ThePEG;
25 
26 
27 /*
28  * Interface to external FORTRAN hpair functions (T.Plehn, M.Spira & P.Zerwas, arXiv:hep-ph/9603205)
29  * original Program found at http://people.web.psi.ch/spira/hpair/
30  */
31 extern "C" {
32  complex<double> eta_(complex<double>* C1, complex<double>* C2);
33  complex<double> d04_(double* P1, double* P2, double* P3, double* P4, double* P12,double* P23, double* M1, double* M2, double* M3, double* M4);
34  complex<double> c03_(double* P1,double* P2,double* P3,double* M1,double* M2,double* M3);
35  complex<double> cspen_(double* Z);
36  complex<double> sqe_(double* A, double* B, double* C);
37  complex<double> etas_(complex<double>*Y,complex<double>* R,complex<double>*RS);
38  void formfac_(double* AMQ, double* S, double* T, double* U, double* M1, double* M2, complex<double>* C0AB,complex<double>* C0AC,complex<double>* C0AD,complex<double>* C0BC,complex<double>* C0BD,complex<double>* C0CD,complex<double>* D0ABC,complex<double>* D0BAC,complex<double>* D0ACB);
39 }
40 
41 extern "C" {
42  extern struct{
43  complex<double> A1;
44  complex<double> A2;
45  complex<double> H1;
46  complex<double> H2;
47  complex<double> Z1;
48  complex<double> Z2;
49  complex<double> AA1;
50  complex<double> AA2;
51  complex<double> HH1;
52  complex<double> HH2;
53  complex<double> AH1;
54  complex<double> AH2;
55  } form_;
56 }
57 
58 
63 class MEHiggsPair: public HwMEBase {
64 
65 public:
66 
70  MEHiggsPair();
71 
78  virtual unsigned int orderInAlphaS() const { return 0; }
79 
84  virtual unsigned int orderInAlphaEW() const { return 0; }
85 
89  virtual Energy2 scale() const;
90 
94  virtual void getDiagrams() const;
95 
100  virtual bool generateKinematics(const double * r);
101 
102 
107  virtual CrossSection dSigHatDR() const;
108 
109  /*
110  * Fix alphaS
111  */
112  unsigned int fixedalphaS() const { return _fixedalphaS; }
113 
114  /*
115  * Fixed alphaS value if AlphaS is chosen (option 2 above)
116  */
117  double alphasfixedvalue() const { return _alphasfixedvalue; }
118 
122  double scalemultiplier() const {return _scalemultiplier;}
123 
124 
125 
126 
135  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
136 
145  colourGeometries(tcDiagPtr diag) const;
146 
154  virtual double me2() const;
156 
157 
158  virtual void setKinematics();
159 
164  virtual int nDim() const;
165 
166 
167 protected:
168 
176  virtual void doinit();
177 
187  virtual void rebind(const TranslationMap & trans);
188 
194  virtual IVector getReferences();
196 
200  PDPtr higgs() const { return _higgs; }
201 
205  void higgs(PDPtr in) {_higgs =in;}
206 
207 
208 public:
209 
216  void persistentOutput(PersistentOStream & os) const;
217 
223  void persistentInput(PersistentIStream & is, int version);
225 
232  static void Init();
233 
234 
235 
236 protected:
237 
244  virtual IBPtr clone() const;
245 
250  virtual IBPtr fullclone() const;
252 
253 protected:
254 
260 private:
266 
271  MEHiggsPair & operator=(const MEHiggsPair &) = delete;
272 
273 
278 
279  /*
280  * The W mass
281  */
282  Energy _Wmass;
283 
284 
285  /*
286  * The top mass
287  */
288  Energy _topmass;
289 
290  /*
291  * The bottom mass
292  */
293  Energy _bottommass;
294 
295  /*
296  * The Z boson mass
297  */
298  Energy _zmass;
299 
300 
301  /*
302  * Higgs boson mass(es)
303  */
304  Energy _m1, _m2;
305 
306 
307  /*
308  * Heavy H mass
309  */
310  Energy _heavyHmass;
311 
312 
313  /*
314  * Heavy H width
315  */
316  Energy _heavyHwidth;
317 
318  /*
319  * top yukawa multiplier, Heavy
320  */
321  double _yH;
322 
323  /*
324  * top yukawa multiplier, light
325  */
326  double _yh;
327 
328  /*
329  * bottom yukawa multiplier, Heavy
330  */
331  double _ybH;
332 
333  /*
334  * bottom yukawa multiplier, light
335  */
336  double _ybh;
337 
338 private:
339 
343  GenericMassGeneratorPtr _hmass;
344 
349 
353  double _hhHcoupling;
354 
358  unsigned int _process;
359 
360  /*
361  * Fix alphaS
362  */
363  unsigned int _fixedalphaS;
364 
365  /*
366  * Scale to use for alpha_S if fixed
367  */
368  Energy _alphascale;
369 
370 
371  /*
372  * Value of AlphaS if fixed using option 2 above
373  */
374  double _alphasfixedvalue;
375 
376  /*
377  * Base scale to use if chosen to be fixed
378  */
379  Energy _basescale;
380 
381  /*
382  * scale multiplier
383  */
384  double _scalemultiplier;
385 
386  /*
387  * Fix scale of whole process
388  */
389  unsigned int _fixedscale;
390 
391 
395  Energy _mh;
396 
397 
401  Energy _wh;
402 
406  Energy _mW;
407 
408 
409 
410  /*
411  * _cH, effective theory coefficient
412  */
413  double _cH;
414 
415  /* _c6, effective theory coefficient
416  *
417  */
418  double _c6;
419 
420  /*
421  * _cg1, effective theory coefficient
422  */
423  double _cg1;
424 
425  /* _cg2, effective theory coefficient
426  *
427  */
428  double _cg2;
429 
430  /*
431  * _ct1, effective theory coefficient
432  */
433  double _ct1;
434 
435  /*
436  * _ct2, effective theory coefficient
437  */
438  double _ct2;
439 
440 
441  /* _ct2, effective theory coefficient
442  *
443  */
444  double _cb1;
445 
446  /* f_b2, effective theory coefficient
447  *
448  */
449  double _cb2;
450 
451  /* effective theory scale
452  *
453  */
454  Energy _EFTScale;
455 
456  /* Scalar integral initialization from hpair.f (T.Plehn, M.Spira & P.Zerwas, arXiv:hep-ph/9603205)
457  Program found at http://people.web.psi.ch/spira/hpair/ */
458 
459  virtual vector<Complex> iniscal(double AMQ, double S, double T,double U, double M1, double M2) const;
460 
461  /* Matrix element calculation from hpair */
462 
463  virtual double MATRIX(double S, double T,double U, double M1, double M2) const;
464 
465 
466 };
467 
468 }
469 
470 #include "ThePEG/Utilities/ClassTraits.h"
471 
472 namespace ThePEG {
473 
478 template <>
479 struct BaseClassTrait<Herwig::MEHiggsPair,1> {
481  typedef Herwig::HwMEBase NthBase;
482 
483 };
484 
487 template <>
489  : public ClassTraitsBase<Herwig::MEHiggsPair> {
491  static string className() { return "Herwig::MEHiggsPair"; }
499  static string library() { return "MEHiggsPair.so"; }
500 };
501 
504 }
505 
506 
507 #endif /* HERWIG_MEHiggsPair_H */
double _selfcoupling
multiplier for the SM triple-coupling
Definition: MEHiggsPair.h:348
Energy _wh
On-shell width for the higgs.
Definition: MEHiggsPair.h:401
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
Definition: MEHiggsPair.h:343
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
double _hhHcoupling
multiplier for the hhH triple-coupling
Definition: MEHiggsPair.h:353
PDPtr higgs() const
Access to the higgs data.
Definition: MEHiggsPair.h:200
PDPtr _higgs
The higgs boson.
Definition: MEHiggsPair.h:277
unsigned int _process
Processes to include.
Definition: MEHiggsPair.h:358
Energy _mh
On-shell mass for the higgs.
Definition: MEHiggsPair.h:395
ThePEG::Ptr< ParticleData >::pointer PDPtr
Energy _mW
On-shell mass for the W.
Definition: MEHiggsPair.h:406
vector< DiagPtr > DiagramVector
-*- C++ -*-
The MEHiggsPair class implements the matrix elements for HiggsPairian scattering process...
Definition: MEHiggsPair.h:63
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPair.h:84
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
vector< IBPtr > IVector
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPair.h:78
void higgs(PDPtr in)
Set the higgs data.
Definition: MEHiggsPair.h:205
static ClassDescription< MEHiggsPair > initMEHiggsPair
The static object used to initialize the description of this class.
Definition: MEHiggsPair.h:265
double scalemultiplier() const
Return multiplier for scale.
Definition: MEHiggsPair.h:122