herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
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
23namespace Herwig {
24using 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 */
31extern "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
41extern "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
63class MEHiggsPair: public HwMEBase {
64
65public:
66
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
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
167protected:
168
176 virtual void doinit();
177
187 virtual void rebind(const TranslationMap & trans);
188
196
200 PDPtr higgs() const { return _higgs; }
201
205 void higgs(PDPtr in) {_higgs =in;}
206
207
208public:
209
217
223 void persistentInput(PersistentIStream & is, int version);
225
232 static void Init();
233
234
235
236protected:
237
244 virtual IBPtr clone() const;
245
250 virtual IBPtr fullclone() const;
252
253protected:
254
260private:
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
338private:
339
343 GenericMassGeneratorPtr _hmass;
344
349
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
472namespace ThePEG {
473
478template <>
479struct BaseClassTrait<Herwig::MEHiggsPair,1> {
482
483};
484
487template <>
488struct ClassTraits<Herwig::MEHiggsPair>
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 */
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
The MEHiggsPair class implements the matrix elements for HiggsPairian scattering process.
Definition: MEHiggsPair.h:63
virtual CrossSection dSigHatDR() const
Return the matrix element squared differential in the variables given by the last call to generateKin...
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
double _hhHcoupling
multiplier for the hhH triple-coupling
Definition: MEHiggsPair.h:353
virtual bool generateKinematics(const double *r)
Generate internal degrees of freedom.
virtual IBPtr clone() const
Make a simple clone of this object.
static void Init()
The standard Init function used to initialize the interfaces.
double scalemultiplier() const
Return multiplier for scale.
Definition: MEHiggsPair.h:122
virtual int nDim() const
The number of internal degrees of freedom used in the matrix element.
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPair.h:84
virtual void getDiagrams() const
Add all possible diagrams with the add() function.
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPair.h:78
virtual void rebind(const TranslationMap &trans)
Rebind pointer to other Interfaced objects.
unsigned int _process
Processes to include.
Definition: MEHiggsPair.h:358
PDPtr _higgs
The higgs boson.
Definition: MEHiggsPair.h:277
void higgs(PDPtr in)
Set the higgs data.
Definition: MEHiggsPair.h:205
MEHiggsPair & operator=(const MEHiggsPair &)=delete
The assignment operator is private and must never be called.
Energy _mh
On-shell mass for the higgs.
Definition: MEHiggsPair.h:395
virtual Selector< const ColourLines * > colourGeometries(tcDiagPtr diag) const
Return a Selector with possible colour geometries for the selected diagram weighted by their relative...
virtual double me2() const
The matrix element for the kinematical configuration previously provided by the last call to setKinem...
virtual Energy2 scale() const
Return the scale associated with the last set phase space point.
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
Definition: MEHiggsPair.h:343
virtual void setKinematics()
Set the typed and momenta of the incoming and outgoing partons to be used in subsequent calls to me()...
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
static ClassDescription< MEHiggsPair > initMEHiggsPair
The static object used to initialize the description of this class.
Definition: MEHiggsPair.h:265
double _selfcoupling
multiplier for the SM triple-coupling
Definition: MEHiggsPair.h:348
Energy _mW
On-shell mass for the W.
Definition: MEHiggsPair.h:406
MEHiggsPair()
The default constructor.
virtual Selector< DiagramIndex > diagrams(const DiagramVector &dv) const
Get diagram selector.
PDPtr higgs() const
Access to the higgs data.
Definition: MEHiggsPair.h:200
Energy _wh
On-shell width for the higgs.
Definition: MEHiggsPair.h:401
virtual IVector getReferences()
Return a vector of all pointers to Interfaced objects used in this object.
vector< DiagPtr > DiagramVector
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
vector< IBPtr > IVector
static string className()
static string library()