herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
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
24namespace Herwig {
25using 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
33extern "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
53class MEHiggsPairJet: public HwMEBase {
54
55public:
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
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
142protected:
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
180
184 PDPtr higgs() const { return _higgs; }
185
189 void higgs(PDPtr in) {_higgs =in;}
190
191
192public:
193
201
207 void persistentInput(PersistentIStream & is, int version);
209
216 static void Init();
217
218
219
220protected:
221
228 virtual IBPtr clone() const;
229
234 virtual IBPtr fullclone() const;
236
237protected:
238
244private:
250
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
319private:
320
325
326
330 GenericMassGeneratorPtr _hmass;
331
336
337
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
483namespace ThePEG {
484
489template <>
490struct BaseClassTrait<Herwig::MEHiggsPairJet,1> {
493
494};
495
498template <>
499struct 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 */
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
The MEHiggsPairJet class implements the matrix elements for HiggsPairian scattering process.
Energy2 _scale
Storage of the scale to avoid the need to recalculate.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual double me2() const
The matrix element for the kinematical configuration previously provided by the last call to setKinem...
Energy2 _mbt2
Storage of the triangon/boxon mass to avoid the need to recalculate.
virtual CrossSection dSigHatDR() const
Return the matrix element squared differential in the variables given by the last call to generateKin...
virtual void setKinematics()
Set the typed and momenta of the incoming and outgoing partons to be used in subsequent calls to me()...
double _hhHcoupling
multiplier for the hhH triple-coupling
int _id1
process identifiers
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
virtual IBPtr clone() const
Make a simple clone of this object.
int _maxflavour
Allowed flavours for the incoming quarks.
MEHiggsPairJet & operator=(const MEHiggsPairJet &)=delete
The assignment operator is private and must never be called.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
virtual Energy2 scale() const
Return the scale associated with the last set phase space point.
static ClassDescription< MEHiggsPairJet > initMEHiggsPairJet
The static object used to initialize the description of this class.
static void Init()
The standard Init function used to initialize the interfaces.
unsigned int _process
Processes to include.
virtual IVector getReferences()
Return a vector of all pointers to Interfaced objects used in this object.
virtual bool generateKinematics(const double *r)
Generate internal degrees of freedom.
virtual Selector< const ColourLines * > colourGeometries(tcDiagPtr diag) const
Return a Selector with possible colour geometries for the selected diagram weighted by their relative...
Energy _mh
On-shell mass for the higgs.
virtual Selector< DiagramIndex > diagrams(const DiagramVector &dv) const
Get diagram selector.
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
double _selfcoupling
multiplier for the SM triple-coupling
virtual int nDim() const
The number of internal degrees of freedom used in the matrix element.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual void doinitrun()
Initialize this object before the run phase.
tcSMPtr _theModel
Pointer to the model.
MEHiggsPairJet()
The default constructor.
Energy _wh
On-shell width for the higgs.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
PDPtr _higgs
The higgs boson.
virtual void getDiagrams() const
Add all possible diagrams with the add() function.
PDPtr higgs() const
Access to the higgs data.
virtual void rebind(const TranslationMap &trans)
Rebind pointer to other Interfaced objects.
void higgs(PDPtr in)
Set the higgs data.
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
vector< DiagPtr > DiagramVector
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::Ptr< StandardModelBase >::transient_const_pointer tcSMPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
vector< IBPtr > IVector
static string className()
static string library()