herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
MEHiggsPairJet.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_MEHiggsPairJet_H
10 #define HERWIG_MEHiggsPairJet_H
11 //
12 // This is the declaration of the MEHiggsPairJet 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 
33 extern "C" {
34  void ol_setparameter_int(const char* param, int val);
35  void ol_setparameter_double(const char* param, double val);
36  void ol_setparameter_string(const char* param, char* val);
37  int ol_register_process(const char* process, int amptype);
38  int ol_n_external(int id);
39  void ol_phase_space_point(int id, double sqrt_s, double* pp);
40  void ol_start();
41  void ol_finish();
42  void ol_evaluate_tree(int id, double* pp, double* m2_tree);
43  void ol_evaluate_loop(int id, double* pp, double* m2_tree, double* m2_loop, double* acc);
44  void ol_evaluate_loop2(int id, double* pp, double* m2_loop2, double* acc);
45 }
46 
47 
48 
53 class MEHiggsPairJet: public HwMEBase {
54 
55 public:
56 
61 
68  virtual unsigned int orderInAlphaS() const { return 0; }
69 
74  virtual unsigned int orderInAlphaEW() const { return 0; }
75 
79  virtual Energy2 scale() const;
80 
84  virtual void getDiagrams() const;
85 
90  virtual bool generateKinematics(const double * r);
91 
92 
97  virtual CrossSection dSigHatDR() const;
98 
99 
100 
101 
110  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
111 
120  colourGeometries(tcDiagPtr diag) const;
121 
129  virtual double me2() const;
131 
132 
133  virtual void setKinematics();
134 
139  virtual int nDim() const;
140 
141 
142 protected:
143 
151  virtual void doinit();
152 
157  virtual void doinitrun();
158 
159  /* OpenLoops initialization */
160  virtual void InitOpenLoops();
161 
171  virtual void rebind(const TranslationMap & trans);
172 
178  virtual IVector getReferences();
180 
184  PDPtr higgs() const { return _higgs; }
185 
189  void higgs(PDPtr in) {_higgs =in;}
190 
191 
192 public:
193 
200  void persistentOutput(PersistentOStream & os) const;
201 
207  void persistentInput(PersistentIStream & is, int version);
209 
216  static void Init();
217 
218 
219 
220 protected:
221 
228  virtual IBPtr clone() const;
229 
234  virtual IBPtr fullclone() const;
236 
237 protected:
238 
244 private:
250 
255  MEHiggsPairJet & operator=(const MEHiggsPairJet &) = delete;
256 
260  int _id1, _id1tri, _id1box, _id1int;
261  int _id2, _id2tri, _id2box, _id2int;
262  int _id3, _id3tri, _id3box, _id3int;
263  int _id4, _id4tri, _id4box, _id4int;
264 
265 
270 
271  /*
272  * The top mass
273  */
274  Energy _topmass;
275 
276  /*
277  * The bottom mass
278  */
279  Energy _bottommass;
280 
281  /*
282  * The Z boson mass
283  */
284  Energy _zmass;
285 
286 
287  /*
288  * Higgs boson mass(es)
289  */
290  Energy _m1, _m2;
291 
292 
293  /*
294  * Heavy H mass
295  */
296  Energy _heavyHmass;
297 
298 
299  /*
300  * Heavy H width
301  */
302  Energy _heavyHwidth;
303 
307  Energy2 _mbt2;
308 
312  Energy2 _scale;
313 
318 
319 private:
320 
325 
326 
330  GenericMassGeneratorPtr _hmass;
331 
336 
337 
341  double _hhHcoupling;
342 
343 
347  unsigned int _process;
348 
352  Energy _mh;
353 
354 
358  Energy _wh;
359 
360  /*
361  * Fix alphaS
362  */
363  unsigned int _fixedalphaS;
364 
365  /*
366  * Value of AlphaS if fixed using option 2 above
367  */
368  double _alphasfixedvalue;
369 
370  /*
371  * Fix scale for the whole process.
372  */
373  unsigned int _fixedscale;
374 
375  /*
376  * Scale to use for alpha_S if fixed
377  */
378  Energy _alphascale;
379 
380 
381  /*
382  * Choose between the OpenLoops and HPAIR implementations
383  */
384  unsigned int _implementation;
385 
386  /*
387  * include the widths
388  */
389  unsigned int _includeWidths;
390 
391  /*
392  * include the b quark loops
393  */
394  unsigned int _includeBquark;
395 
396 
397  /*
398  * Base scale to use if chosen to be fixed
399  */
400  Energy _basescale;
401 
402  /*
403  * Which subprocesses to include in the pp > HHj process
404  */
405  unsigned int _subprocessjet;
406 
407  /*
408  * AlphaS reweighting
409  */
410  unsigned int _alphasreweight;
411 
412  /*
413  * scale multiplier
414  */
415  double _scalemultiplier;
416 
417  /*
418  * Masses of fermions
419  */
420  double Mass_E;
421  double getMass_E() const { return Mass_E; }
422  double Mass_M;
423  double getMass_M() const { return Mass_M; }
424  double Mass_L;
425  double getMass_L() const { return Mass_L; }
426 
427  double Mass_T;
428  double getMass_T() const { return Mass_T; }
429  double Mass_U;
430  double getMass_U() const { return Mass_U; }
431  double Mass_C;
432  double getMass_C() const { return Mass_C; }
433  double Mass_D;
434  double getMass_D() const { return Mass_D; }
435  double Mass_S;
436  double getMass_S() const { return Mass_S; }
437  double Mass_B;
438  double getMass_B() const { return Mass_B; }
439 
440  /*
441  * Masses of bosons
442  */
443  double Mass_Z;
444  double getMass_Z() const { return Mass_Z; }
445  double Mass_W;
446  double getMass_W() const { return Mass_W; }
447  double Mass_H;
448  double getMass_H() const { return Mass_H; }
449 
450  /*
451  * Widths of particles
452  */
453  double Width_C;
454  double getWidth_C() const { return Width_C; }
455  double Width_B;
456  double getWidth_B() const { return Width_B; }
457  double Width_T;
458  double getWidth_T() const { return Width_T; }
459  double Width_W;
460  double getWidth_W() const { return Width_W; }
461  double Width_Z;
462  double getWidth_Z() const { return Width_Z; }
463  double Width_H;
464  double getWidth_H() const { return Width_H; }
465 
466 
467  /*
468  * QCD and QED couplings
469  */
470  double Coupl_Alpha_QED;
471  double Coupl_Alpha_QCD;
472 
473  /* OpenLoops initialization */
474  // virtual void InitOpenLoops() const;
475 
476 };
477 
478 
479 }
480 
481 #include "ThePEG/Utilities/ClassTraits.h"
482 
483 namespace ThePEG {
484 
489 template <>
490 struct BaseClassTrait<Herwig::MEHiggsPairJet,1> {
492  typedef Herwig::HwMEBase NthBase;
493 
494 };
495 
498 template <>
499 struct ClassTraits<Herwig::MEHiggsPairJet>
500  : public ClassTraitsBase<Herwig::MEHiggsPairJet> {
502  static string className() { return "Herwig::MEHiggsPairJet"; }
510  static string library() { return "HiggsPair.so"; }
511 };
512 
515 }
516 
517 
518 #endif /* HERWIG_MEHiggsPairJet_H */
void higgs(PDPtr in)
Set the higgs data.
PDPtr higgs() const
Access to the higgs data.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::Ptr< StandardModelBase >::transient_const_pointer tcSMPtr
int _id1
process identifiers
static ClassDescription< MEHiggsPairJet > initMEHiggsPairJet
The static object used to initialize the description of this class.
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
ThePEG::Ptr< ParticleData >::pointer PDPtr
Energy2 _mbt2
Storage of the triangon/boxon mass to avoid the need to recalculate.
double _selfcoupling
multiplier for the SM triple-coupling
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Energy _mh
On-shell mass for the higgs.
vector< DiagPtr > DiagramVector
unsigned int _process
Processes to include.
-*- C++ -*-
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
Energy _wh
On-shell width for the higgs.
Energy2 _scale
Storage of the scale to avoid the need to recalculate.
tcSMPtr _theModel
Pointer to the model.
The MEHiggsPairJet class implements the matrix elements for HiggsPairian scattering process...
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
PDPtr _higgs
The higgs boson.
vector< IBPtr > IVector
int _maxflavour
Allowed flavours for the incoming quarks.
double _hhHcoupling
multiplier for the hhH triple-coupling