herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
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
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 */
32extern "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
42extern "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
56extern "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
77class MEHiggsPairOL: public HwMEBase {
78
79
80public:
81
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
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
182 virtual void doinitrun();
183
184
194 virtual void rebind(const TranslationMap & trans);
195
203
207 PDPtr higgs() const { return _higgs; }
208
212 void higgs(PDPtr in) {_higgs =in;}
213
214
215public:
216
224
230 void persistentInput(PersistentIStream & is, int version);
232
239 static void Init();
240
241
242
243protected:
244
251 virtual IBPtr clone() const;
252
257 virtual IBPtr fullclone() const;
259
260protected:
261
267private:
273
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
326private:
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
484namespace ThePEG {
485
490template <>
491struct BaseClassTrait<Herwig::MEHiggsPairOL,1> {
494
495};
496
499template <>
500struct 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 */
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
The MEHiggsPairOL class implements the matrix elements for HiggsPairian scattering process.
Definition: MEHiggsPairOL.h:77
MEHiggsPairOL & operator=(const MEHiggsPairOL &)=delete
The assignment operator is private and must never be called.
virtual void doinitrun()
Initialize this object before the run phase.
Energy _mh
On-shell mass for the higgs.
virtual Selector< DiagramIndex > diagrams(const DiagramVector &dv) const
Get diagram selector.
virtual IBPtr clone() const
Make a simple clone of this object.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
tcSMPtr _theModel
Pointer to the model.
virtual void setKinematics()
Set the typed and momenta of the incoming and outgoing partons to be used in subsequent calls to me()...
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
double _selfcoupling
multiplier for the SM triple-coupling
MEHiggsPairOL()
The default constructor.
virtual Energy2 scale() const
Return the scale associated with the last set phase space point.
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPairOL.h:99
virtual CrossSection dSigHatDR() const
Return the matrix element squared differential in the variables given by the last call to generateKin...
virtual bool generateKinematics(const double *r)
Generate internal degrees of freedom.
int _id
process identifiers
virtual int nDim() const
The number of internal degrees of freedom used in the matrix element.
virtual void getDiagrams() const
Add all possible diagrams with the add() function.
void higgs(PDPtr in)
Set the higgs data.
Energy _wh
On-shell width for the higgs.
virtual double me2() const
The matrix element for the kinematical configuration previously provided by the last call to setKinem...
PDPtr _higgs
The higgs boson.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
virtual Selector< const ColourLines * > colourGeometries(tcDiagPtr diag) const
Return a Selector with possible colour geometries for the selected diagram weighted by their relative...
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Definition: MEHiggsPairOL.h:93
PDPtr higgs() const
Access to the higgs data.
unsigned int _process
Processes to include.
virtual IVector getReferences()
Return a vector of all pointers to Interfaced objects used in this object.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
GenericMassGeneratorPtr _hmass
The mass generator for the Higgs.
static ClassDescription< MEHiggsPairOL > initMEHiggsPairOL
The static object used to initialize the description of this class.
virtual void rebind(const TranslationMap &trans)
Rebind pointer to other Interfaced objects.
static void Init()
The standard Init function used to initialize the interfaces.
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()