herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
HiggsPair.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_HiggsPair_H
10 #define HERWIG_HiggsPair_H
11 //
12 // This is the declaration of the HiggsPair 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/Models/General/BSMModel.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 "ThePEG/Config/Pointers.h"
22 
23 namespace Herwig {
24 
25 class HiggsPair;
26 
27 }
28 
29 namespace ThePEG {
30 
31 ThePEG_DECLARE_POINTERS(Herwig::HiggsPair,HiggsPairPtr);
32 
33 }
34 
35 namespace Herwig {
36 using namespace ThePEG;
37 
38 
39 
40 
41 
46 class HiggsPair: public BSMModel {
47 
48 public:
49 
53  HiggsPair();
54 
55 
56 protected:
57 
65  virtual void doinit();
67 
68  virtual void doinitrun();
69 
70  virtual void InitOpenLoops();
71 
72 public:
73 
80  void persistentOutput(PersistentOStream & os) const;
81 
87  void persistentInput(PersistentIStream & is, int version);
89 
96  static void Init();
97 
98 
102  double selfcoupling() const {return _selfcoupling;}
103 
107  unsigned int process() const { return _process; }
108 
109 
110  /*
111  * Fix alphaS
112  */
113  unsigned int fixedalphaS() const { return _fixedalphaS; }
114 
115  /*
116  * Fixed alphaS value if AlphaS is chosen (option 2 above)
117  */
118  double alphasfixedvalue() const { return _alphasfixedvalue; }
119 
120  /*
121  * Fix scale for the whole process.
122  */
123  unsigned int fixedscale() const { return _fixedscale; }
124 
125  /*
126  * Return Scale to use for alpha_S if fixed
127  */
128  Energy alphascale() const { return _alphascale; }
129 
130  /*
131  * Return choice between the OpenLoops and HPAIR implementations
132  */
133  unsigned int implementation() const { return _implementation; }
134 
135  /*
136  * Return choice to include the widths
137  */
138  unsigned int includeWidths() const { return _includeWidths; }
139 
140  /*
141  * Return choice whether to include the b quark loops
142  */
143  unsigned int includeBquark() const { return _includeBquark; }
144 
145  /*
146  * Return number of allowed flavours for the incoming quarks
147  */
148  int maxflavour() const { return _maxflavour; }
149 
150  /*
151  * Return number of allowed flavours for the incoming quarks
152  */
153  Energy basescale() const { return _basescale; }
154 
155  /*
156  * Return the SubProcess to include in pp > HHj
157  */
158  unsigned int subprocessjet() const { return _subprocessjet; }
159 
160  /*
161  * enable
162  */
163 
164  unsigned int alphasreweight() const { return _alphasreweight; }
165 
169  double scalemultiplier() const {return _scalemultiplier;}
170 
174  int id1() const {return _id1;}
175  int id2() const {return _id2;}
176  int id3() const {return _id3;}
177  int id4() const {return _id4;}
178 
179  int id1tri() const {return _id1tri;}
180  int id2tri() const {return _id2tri;}
181  int id3tri() const {return _id3tri;}
182  int id4tri() const {return _id4tri;}
183 
184  int id1box() const {return _id1box;}
185  int id2box() const {return _id2box;}
186  int id3box() const {return _id3box;}
187  int id4box() const {return _id4box;}
188 
189  int id1int() const {return _id1int;}
190  int id2int() const {return _id2int;}
191  int id3int() const {return _id3int;}
192  int id4int() const {return _id4int;}
193 
194  int id() const {return _id;}
195  int idtri() const {return _idtri;}
196  int idbox() const {return _idbox;}
197  int idint() const {return _idint;}
198 
203 
204  /*
205  * The top mass
206  */
207  Energy _topmass;
208 
209  /*
210  * The bottom mass
211  */
212  Energy _bottommass;
213 
214  /*
215  * The Z boson mass
216  */
217  Energy _zmass;
218 
219 
220  /*
221  * Higgs boson mass(es)
222  */
223  Energy _m1, _m2;
224 
225  /*
226  * Heavy H mass
227  */
228  Energy _heavyHmass;
229 
230 
231  /*
232  * Heavy H width
233  */
234  Energy _heavyHwidth;
235 
236 
237 
238 
239 private:
244 
248  GenericMassGeneratorPtr _hmass;
249 
254 
255 
259  unsigned int _process;
260 
264  Energy _mh;
265 
266 
270  Energy _wh;
271 
272  /*
273  * Fix alphaS
274  */
275  unsigned int _fixedalphaS;
276 
277  /*
278  * Value of AlphaS if fixed using option 2 above
279  */
280  double _alphasfixedvalue;
281 
282  /*
283  * Fix scale of whole process
284  */
285  unsigned int _fixedscale;
286 
287  /*
288  * Scale to use for alpha_S if fixed
289  */
290  Energy _alphascale;
291 
292  /*
293  * Choose between the OpenLoops and HPAIR implementations
294  */
295  unsigned int _implementation;
296 
297  /*
298  * include the widths
299  */
300  unsigned int _includeWidths;
301 
302  /*
303  * include the b quark loops
304  */
305  unsigned int _includeBquark;
306 
307 
308  /*
309  * Base scale to use if chosen to be fixed
310  */
311  Energy _basescale;
312 
313  /*
314  * scale multiplier
315  */
316  double _scalemultiplier;
317 
318 
319  /*
320  * Masses of fermions
321  */
322  double Mass_E;
323  double Mass_M;
324  double Mass_L;
325  double Mass_T;
326  double Mass_U;
327  double Mass_C;
328  double Mass_D;
329  double Mass_S;
330  double Mass_B;
331  double Mass_Z;
332  double Mass_W;
333  double Mass_H;
334  double Width_C;
335  double Width_B;
336  double Width_T;
337  double Width_W;
338  double Width_Z;
339  double Width_H;
340 
341 
342  double getMass_E() const { return Mass_E; }
343  double getMass_M() const { return Mass_M; }
344  double getMass_L() const { return Mass_L; }
345 
346  double getMass_T() const { return Mass_T; }
347  double getMass_U() const { return Mass_U; }
348  double getMass_C() const { return Mass_C; }
349  double getMass_D() const { return Mass_D; }
350  double getMass_S() const { return Mass_S; }
351  double getMass_B() const { return Mass_B; }
352 
353  /*
354  * Masses of bosons
355  */
356  double getMass_Z() const { return Mass_Z; }
357  double getMass_W() const { return Mass_W; }
358  double getMass_H() const { return Mass_H; }
359 
360  /*
361  * Widths of particles
362  */
363  double getWidth_C() const { return Width_C; }
364  double getWidth_B() const { return Width_B; }
365  double getWidth_T() const { return Width_T; }
366  double getWidth_W() const { return Width_W; }
367  double getWidth_Z() const { return Width_Z; }
368  double getWidth_H() const { return Width_H; }
369 
373  PDPtr higgs() const { return _higgs; }
374 
375  /*
376  * QCD and QED couplings
377  */
378  double Coupl_Alpha_QED;
379  double Coupl_Alpha_QCD;
380 
381 
382 
383 protected:
384 
391  virtual IBPtr clone() const;
392 
397  virtual IBPtr fullclone() const;
399 
400 protected:
401 
407 private:
413 
418  HiggsPair & operator=(const HiggsPair &) = delete;
419 
423  /*
424  * hh + j
425  */
426  int _id1, _id1tri, _id1box, _id1int;
427  int _id2, _id2tri, _id2box, _id2int;
428  int _id3, _id3tri, _id3box, _id3int;
429  int _id4, _id4tri, _id4box, _id4int;
430  /*
431  * hh
432  */
433  int _id, _idtri, _idbox, _idint;
434 
435 
436 private:
437 
438  /*
439  * Which subprocesses to include for the pp -> HHj
440  */
441 
442  unsigned int _subprocessjet;
443 
444  /*
445  * alphaS reweighting
446  */
447  unsigned int _alphasreweight;
448 
449  /*
450  * max flavour
451  */
452  int _maxflavour;
453 
454 
455 };
456 
457 }
458 
459 #include "ThePEG/Utilities/ClassTraits.h"
460 
461 namespace ThePEG {
462 
467 template <>
468 struct BaseClassTrait<Herwig::HiggsPair,1> {
470  typedef Herwig::BSMModel NthBase;
471 
472 };
473 
476 template <>
477 struct ClassTraits<Herwig::HiggsPair>
478  : public ClassTraitsBase<Herwig::HiggsPair> {
480  static string className() { return "Herwig::HiggsPair"; }
488  static string library() { return "HiggsPair.so"; }
489 };
490 
493 }
494 
495 
496 #endif /* HERWIG_HiggsPair_H */
The HiggsPair class implements the matrix elements for HiggsPairian scattering process.
Definition: HiggsPair.h:46
PDPtr higgs() const
Access to the higgs data.
Definition: HiggsPair.h:373
int id1() const
Return OL Ids.
Definition: HiggsPair.h:174
Energy _wh
On-shell width for the higgs.
Definition: HiggsPair.h:270
Energy _mh
On-shell mass for the higgs.
Definition: HiggsPair.h:264
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::Ptr< StandardModelBase >::transient_const_pointer tcSMPtr
Here is the documentation of the BSMModel class.
Definition: BSMModel.h:21
int _id1
process identifiers
Definition: HiggsPair.h:426
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
Definition: HiggsPair.h:248
ThePEG::Ptr< ParticleData >::pointer PDPtr
static ClassDescription< HiggsPair > initHiggsPair
The static object used to initialize the description of this class.
Definition: HiggsPair.h:412
unsigned int process() const
Processes to include.
Definition: HiggsPair.h:107
tcSMPtr _theModel
Pointer to the model.
Definition: HiggsPair.h:243
PDPtr _higgs
The higgs boson.
Definition: HiggsPair.h:202
double scalemultiplier() const
Return multiplier for scale.
Definition: HiggsPair.h:169
-*- C++ -*-
unsigned int _process
Processes to include.
Definition: HiggsPair.h:259
double _selfcoupling
multiplier for the SM triple-coupling
Definition: HiggsPair.h:253
double selfcoupling() const
Return multiplier for the SM triple-coupling.
Definition: HiggsPair.h:102