herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
MEHiggsPairOL.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_MEHiggsPairOL_H
10 #define HERWIG_MEHiggsPairOL_H
11 //
12 // This is the declaration of the MEHiggsPairOL class.
13 //
14 // The implementation of this process is based upon hep-ph/0112161 by G.F. Giudice, R. Rattazzi, J.D. Wells.
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 #include "HiggsPair.h"
22 
23 
24 namespace Herwig {
25 using namespace ThePEG;
26 
27 
28 /*
29  * Interface to external FORTRAN hpair functions (T.Plehn, M.Spira & P.Zerwas, arXiv:hep-ph/9603205)
30  * original Program found at http://people.web.psi.ch/spira/hpair/
31  */
32 extern "C" {
33  complex<double> eta_(complex<double>* C1, complex<double>* C2);
34  complex<double> d04_(double* P1, double* P2, double* P3, double* P4, double* P12,double* P23, double* M1, double* M2, double* M3, double* M4);
35  complex<double> c03_(double* P1,double* P2,double* P3,double* M1,double* M2,double* M3);
36  complex<double> cspen_(double* Z);
37  complex<double> sqe_(double* A, double* B, double* C);
38  complex<double> etas_(complex<double>*Y,complex<double>* R,complex<double>*RS);
39  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);
40 }
41 
42 extern "C" {
43  void ol_setparameter_int(const char* param, int val);
44  void ol_setparameter_double(const char* param, double val);
45  void ol_setparameter_string(const char* param, char* val);
46  int ol_register_process(const char* process, int amptype);
47  int ol_n_external(int id);
48  void ol_phase_space_point(int id, double sqrt_s, double* pp);
49  void ol_start();
50  void ol_finish();
51  void ol_evaluate_tree(int id, double* pp, double* m2_tree);
52  void ol_evaluate_loop(int id, double* pp, double* m2_tree, double* m2_loop, double* acc);
53  void ol_evaluate_loop2(int id, double* pp, double* m2_loop2, double* acc);
54 }
55 
56 extern "C" {
57  extern struct{
58  complex<double> A1;
59  complex<double> A2;
60  complex<double> H1;
61  complex<double> H2;
62  complex<double> Z1;
63  complex<double> Z2;
64  complex<double> AA1;
65  complex<double> AA2;
66  complex<double> HH1;
67  complex<double> HH2;
68  complex<double> AH1;
69  complex<double> AH2;
70  } form_;
71 }
72 
77 class MEHiggsPairOL: public HwMEBase {
78 
79 
80 public:
81 
85  MEHiggsPairOL();
86 
93  virtual unsigned int orderInAlphaS() const { return 0; }
94 
99  virtual unsigned int orderInAlphaEW() const { return 0; }
100 
104  virtual Energy2 scale() const;
105 
109  virtual void getDiagrams() const;
110 
115  virtual bool generateKinematics(const double * r);
116 
117 
122  virtual CrossSection dSigHatDR() const;
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 
182  virtual void doinitrun();
183 
184 
194  virtual void rebind(const TranslationMap & trans);
195 
201  virtual IVector getReferences();
203 
207  PDPtr higgs() const { return _higgs; }
208 
212  void higgs(PDPtr in) {_higgs =in;}
213 
214 
215 public:
216 
223  void persistentOutput(PersistentOStream & os) const;
224 
230  void persistentInput(PersistentIStream & is, int version);
232 
239  static void Init();
240 
241 
242 
243 protected:
244 
251  virtual IBPtr clone() const;
252 
257  virtual IBPtr fullclone() const;
259 
260 protected:
261 
267 private:
273 
278  MEHiggsPairOL & operator=(const MEHiggsPairOL &) = delete;
279 
280 
284  int _id, _idtri, _idbox, _idint;
285 
290 
291  /*
292  * The top mass
293  */
294  Energy _topmass;
295 
296  /*
297  * The bottom mass
298  */
299  Energy _bottommass;
300 
301  /*
302  * The Z boson mass
303  */
304  Energy _zmass;
305 
306 
307  /*
308  * Higgs boson mass(es)
309  */
310  Energy _m1, _m2;
311 
312  /*
313  * Heavy H mass
314  */
315  Energy _heavyHmass;
316 
317 
318  /*
319  * Heavy H width
320  */
321  Energy _heavyHwidth;
322 
323 
324 
325 
326 private:
331 
335  GenericMassGeneratorPtr _hmass;
336 
341 
342 
346  unsigned int _process;
347 
351  Energy _mh;
352 
353 
357  Energy _wh;
358 
359  /*
360  * Fix alphaS
361  */
362  unsigned int _fixedalphaS;
363 
364  /*
365  * Value of AlphaS if fixed using option 2 above
366  */
367  double _alphasfixedvalue;
368 
369  /*
370  * Fix scale of whole process
371  */
372  unsigned int _fixedscale;
373 
374  /*
375  * Scale to use for alpha_S if fixed
376  */
377  Energy _alphascale;
378 
379  /*
380  * Choose between the OpenLoops and HPAIR implementations
381  */
382  unsigned int _implementation;
383 
384  /*
385  * include the widths
386  */
387  unsigned int _includeWidths;
388 
389  /*
390  * include the b quark loops
391  */
392  unsigned int _includeBquark;
393 
394 
395  /*
396  * Base scale to use if chosen to be fixed
397  */
398  Energy _basescale;
399 
400  /*
401  * scale multiplier
402  */
403  double _scalemultiplier;
404 
405 
406  /*
407  * Masses of fermions
408  */
409  double Mass_E;
410  double Mass_M;
411  double Mass_L;
412  double Mass_T;
413  double Mass_U;
414  double Mass_C;
415  double Mass_D;
416  double Mass_S;
417  double Mass_B;
418  double Mass_Z;
419  double Mass_W;
420  double Mass_H;
421  double Width_C;
422  double Width_B;
423  double Width_T;
424  double Width_W;
425  double Width_Z;
426  double Width_H;
427 
428 
429  double getMass_E() const { return Mass_E; }
430  double getMass_M() const { return Mass_M; }
431  double getMass_L() const { return Mass_L; }
432 
433  double getMass_T() const { return Mass_T; }
434  double getMass_U() const { return Mass_U; }
435  double getMass_C() const { return Mass_C; }
436  double getMass_D() const { return Mass_D; }
437  double getMass_S() const { return Mass_S; }
438  double getMass_B() const { return Mass_B; }
439 
440  /*
441  * Masses of bosons
442  */
443  double getMass_Z() const { return Mass_Z; }
444  double getMass_W() const { return Mass_W; }
445  double getMass_H() const { return Mass_H; }
446 
447  /*
448  * Widths of particles
449  */
450  double getWidth_C() const { return Width_C; }
451  double getWidth_B() const { return Width_B; }
452  double getWidth_T() const { return Width_T; }
453  double getWidth_W() const { return Width_W; }
454  double getWidth_Z() const { return Width_Z; }
455  double getWidth_H() const { return Width_H; }
456 
457 
458  /*
459  * QCD and QED couplings
460  */
461  double Coupl_Alpha_QED;
462  double Coupl_Alpha_QCD;
463 
464 
465  /* Scalar integral initialization from hpair.f (T.Plehn, M.Spira & P.Zerwas, arXiv:hep-ph/9603205)
466  Program found at http://people.web.psi.ch/spira/hpair/ */
467 
468  virtual vector<Complex> iniscal(double AMQ, double S, double T,double U, double M1, double M2) const;
469 
470  /* Matrix element calculation from hpair */
471 
472  virtual double MATRIX(double S, double T,double U, double M1, double M2) const;
473 
474 
475  /* OpenLoops initialization */
476  virtual void InitOpenLoops();
477 
478 };
479 
480 }
481 
482 #include "ThePEG/Utilities/ClassTraits.h"
483 
484 namespace ThePEG {
485 
490 template <>
491 struct BaseClassTrait<Herwig::MEHiggsPairOL,1> {
493  typedef Herwig::HwMEBase NthBase;
494 
495 };
496 
499 template <>
500 struct ClassTraits<Herwig::MEHiggsPairOL>
501  : public ClassTraitsBase<Herwig::MEHiggsPairOL> {
503  static string className() { return "Herwig::MEHiggsPairOL"; }
511  static string library() { return "HiggsPair.so"; }
512 };
513 
516 }
517 
518 
519 #endif /* HERWIG_MEHiggsPairOL_H */
Energy _wh
On-shell width for the higgs.
The MEHiggsPairOL class implements the matrix elements for HiggsPairian scattering process...
Definition: MEHiggsPairOL.h:77
tcSMPtr _theModel
Pointer to the model.
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPairOL.h:93
static ClassDescription< MEHiggsPairOL > initMEHiggsPairOL
The static object used to initialize the description of this class.
PDPtr _higgs
The higgs boson.
int _id
process identifiers
unsigned int _process
Processes to include.
ThePEG::Ptr< StandardModelBase >::transient_const_pointer tcSMPtr
Energy _mh
On-shell mass for the higgs.
void higgs(PDPtr in)
Set the higgs data.
ThePEG::Ptr< ParticleData >::pointer PDPtr
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPairOL.h:99
vector< DiagPtr > DiagramVector
-*- C++ -*-
PDPtr higgs() const
Access to the higgs data.
double _selfcoupling
multiplier for the SM triple-coupling
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
vector< IBPtr > IVector