|
|
|||
File indexing completed on 2026-08-06 09:24:08
0001 // -*- C++ -*- 0002 // 0003 // MEPP2Higgs.h is a part of Herwig - A multi-purpose Monte Carlo event generator 0004 // Copyright (C) 2002-2019 The Herwig Collaboration 0005 // 0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details. 0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 0008 // 0009 #ifndef HERWIG_MEPP2Higgs_H 0010 #define HERWIG_MEPP2Higgs_H 0011 // 0012 // This is the declaration of the MEPP2Higgs class. 0013 // 0014 0015 #include "Herwig/MatrixElement/HwMEBase.h" 0016 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" 0017 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" 0018 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" 0019 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" 0020 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" 0021 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" 0022 #include "Herwig/PDT/GenericMassGenerator.h" 0023 #include "Herwig/MatrixElement/ProductionMatrixElement.h" 0024 #include "Herwig/Shower/ShowerAlpha.h" 0025 0026 namespace Herwig { 0027 using namespace ThePEG; 0028 using namespace ThePEG::Helicity; 0029 0030 /** 0031 * The MEPP2Higgs class implements the matrix element for the process 0032 * pp->Higgs with different Higgs shape prescriptions (see details in hep-ph/9505211) 0033 * and the NLL corrected Higgs width (see details in the FORTRAN HERWIG manual). 0034 * 0035 * @see \ref MEPP2HiggsInterfaces "The interfaces" 0036 * defined for MEPP2Higgs. 0037 */ 0038 class MEPP2Higgs: public HwMEBase { 0039 0040 public: 0041 0042 /** 0043 * The default constructor. 0044 */ 0045 MEPP2Higgs(); 0046 0047 /** 0048 * Return the matrix element for the kinematical configuation 0049 * previously provided by the last call to setKinematics(). Uses 0050 * me(). 0051 */ 0052 virtual CrossSection dSigHatDR() const; 0053 0054 /** 0055 * Set the typed and momenta of the incoming and outgoing partons to 0056 * be used in subsequent calls to me() and colourGeometries() 0057 * according to the associated XComb object. 0058 */ 0059 virtual void setKinematics() { 0060 HwMEBase::setKinematics(); 0061 mh2_ = sHat(); 0062 } 0063 0064 public: 0065 0066 /** @name Member functions for the generation of hard QCD radiation */ 0067 //@{ 0068 /** 0069 * Has a POWHEG style correction 0070 */ 0071 virtual POWHEGType hasPOWHEGCorrection() {return ISR;} 0072 0073 /** 0074 * Has an old fashioned ME correction 0075 */ 0076 virtual bool hasMECorrection() {return true;} 0077 0078 /** 0079 * Initialize the ME correction 0080 */ 0081 virtual void initializeMECorrection(RealEmissionProcessPtr, double &, 0082 double & ); 0083 0084 /** 0085 * Apply the hard matrix element correction to a given hard process or decay 0086 */ 0087 virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr); 0088 0089 /** 0090 * Apply the soft matrix element correction 0091 * @param parent The initial particle in the current branching 0092 * @param progenitor The progenitor particle of the jet 0093 * @param fs Whether the emission is initial or final-state 0094 * @param highestpT The highest pT so far in the shower 0095 * @param ids ids of the particles produced in the branching 0096 * @param z The momentum fraction of the branching 0097 * @param scale the evolution scale of the branching 0098 * @param pT The transverse momentum of the branching 0099 * @return If true the emission should be vetoed 0100 */ 0101 virtual bool softMatrixElementVeto(PPtr parent, 0102 PPtr progenitor, 0103 const bool & fs, 0104 const Energy & highestpT, 0105 const vector<tcPDPtr> & ids, 0106 const double & z, 0107 const Energy & scale, 0108 const Energy & pT); 0109 0110 /** 0111 * Apply the POWHEG style correction 0112 */ 0113 virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, 0114 ShowerInteraction); 0115 //@} 0116 0117 public: 0118 0119 /** @name Virtual functions required by the MEBase class. */ 0120 //@{ 0121 /** 0122 * Return the order in \f$\alpha_S\f$ in which this matrix 0123 * element is given. 0124 */ 0125 virtual unsigned int orderInAlphaS() const; 0126 0127 /** 0128 * Return the order in \f$\alpha_{EW}\f$ in which this matrix 0129 * element is given. 0130 */ 0131 virtual unsigned int orderInAlphaEW() const; 0132 0133 /** 0134 * The matrix element for the kinematical configuration 0135 * previously provided by the last call to setKinematics(), suitably 0136 * scaled by sHat() to give a dimension-less number. 0137 * @return the matrix element scaled with sHat() to give a 0138 * dimensionless number. 0139 */ 0140 virtual double me2() const; 0141 0142 /** 0143 * Generate internal degrees of freedom given nDim() uniform 0144 * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space 0145 * generator, the dSigHatDR should be a smooth function of these 0146 * numbers, although this is not strictly necessary. 0147 * @param r a pointer to the first of nDim() consecutive random numbers. 0148 * @return true if the generation succeeded, otherwise false. 0149 */ 0150 virtual bool generateKinematics(const double * r); 0151 0152 /** 0153 * Return the scale associated with the last set phase space point. 0154 */ 0155 virtual Energy2 scale() const; 0156 0157 /** 0158 * The number of internal degrees of freedom used in the matrix 0159 * element. 0160 */ 0161 virtual int nDim() const; 0162 0163 /** 0164 * Add all possible diagrams with the add() function. 0165 */ 0166 virtual void getDiagrams() const; 0167 0168 /** 0169 * Get diagram selector. With the information previously supplied with the 0170 * setKinematics method, a derived class may optionally 0171 * override this method to weight the given diagrams with their 0172 * (although certainly not physical) relative probabilities. 0173 * @param dv the diagrams to be weighted. 0174 * @return a Selector relating the given diagrams to their weights. 0175 */ 0176 virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; 0177 0178 /** 0179 * Return a Selector with possible colour geometries for the selected 0180 * diagram weighted by their relative probabilities. 0181 * @param diag the diagram chosen. 0182 * @return the possible colour geometries weighted by their 0183 * relative probabilities. 0184 */ 0185 virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; 0186 0187 /** 0188 * Construct the vertex of spin correlations. 0189 */ 0190 virtual void constructVertex(tSubProPtr); 0191 //@} 0192 0193 public: 0194 0195 /** @name Functions used by the persistent I/O system. */ 0196 //@{ 0197 /** 0198 * Function used to write out object persistently. 0199 * @param os the persistent output stream written to. 0200 */ 0201 void persistentOutput(PersistentOStream & os) const; 0202 0203 /** 0204 * Function used to read in object persistently. 0205 * @param is the persistent input stream read from. 0206 * @param version the version number of the object when written. 0207 */ 0208 void persistentInput(PersistentIStream & is, int version); 0209 //@} 0210 0211 /** 0212 * The standard Init function used to initialize the interfaces. 0213 * Called exactly once for each class by the class description system 0214 * before the main function starts or 0215 * when this class is dynamically loaded. 0216 */ 0217 static void Init(); 0218 0219 protected: 0220 0221 /** @name Clone Methods. */ 0222 //@{ 0223 /** 0224 * Make a simple clone of this object. 0225 * @return a pointer to the new object. 0226 */ 0227 virtual IBPtr clone() const { return new_ptr(*this); } 0228 0229 /** Make a clone of this object, possibly modifying the cloned object 0230 * to make it sane. 0231 * @return a pointer to the new object. 0232 */ 0233 virtual IBPtr fullclone() const { return new_ptr(*this); } 0234 //@} 0235 0236 protected: 0237 0238 /** @name Standard Interfaced functions. */ 0239 //@{ 0240 /** 0241 * Initialize this object after the setup phase before saving an 0242 * EventGenerator to disk. 0243 * @throws InitException if object could not be initialized properly. 0244 */ 0245 virtual void doinit(); 0246 0247 /** 0248 * Finalize this object. Called in the run phase just after a 0249 * run has ended. Used eg. to write out statistics. 0250 */ 0251 virtual void dofinish(); 0252 //@} 0253 0254 protected: 0255 0256 /** 0257 * Members to calculate the real emission matrix elements 0258 */ 0259 //@{ 0260 /** 0261 * The leading-order matrix element for \f$gg\to H\f$ 0262 */ 0263 Energy4 loME() const; 0264 0265 /** 0266 * The matrix element for \f$gg\to H g\f$ 0267 */ 0268 Energy2 ggME(Energy2 s, Energy2 t, Energy2 u); 0269 0270 /** 0271 * The matrix element for \f$qg\to H q\f$ 0272 */ 0273 Energy2 qgME(Energy2 s, Energy2 t, Energy2 u); 0274 0275 /** 0276 * The matrix element for \f$qbarg\to H qbar\f$ 0277 */ 0278 Energy2 qbargME(Energy2 s, Energy2 t, Energy2 u); 0279 //@} 0280 0281 /** 0282 * Members to calculate the functions for the loop diagrams 0283 */ 0284 //@{ 0285 /** 0286 * The \f$B(s)\f$ function of NBP339 (1990) 38-66 0287 * @param s The scale 0288 * @param mf2 The fermion mass squared. 0289 */ 0290 Complex B(Energy2 s,Energy2 mf2) const; 0291 0292 /** 0293 * The \f$C(s)\f$ function of NBP339 (1990) 38-66 0294 * @param s The scale 0295 * @param mf2 The fermion mass squared. 0296 */ 0297 complex<InvEnergy2> C(Energy2 s,Energy2 mf2) const; 0298 0299 /** 0300 * The \f$C(s)\f$ function of NBP339 (1990) 38-66 0301 * @param s The \f$s\f$ invariant 0302 * @param t The \f$t\f$ invariant 0303 * @param u The \f$u\f$ invariant 0304 * @param mf2 The fermion mass squared 0305 */ 0306 complex<InvEnergy4> D(Energy2 s,Energy2 t, Energy2 u,Energy2 mf2) const; 0307 0308 /** 0309 * The integral \f$\int\frac{dy}{y-y_0}\log(a-i\epsilon-b y(1-y))\f$ 0310 * from NBP339 (1990) 38-66. 0311 * @param a The parameter \f$a\f$. 0312 * @param b The parameter \f$b\f$. 0313 * @param y0 The parameter \f$y_0\f$. 0314 */ 0315 Complex dIntegral(Energy2 a, Energy2 b, double y0) const; 0316 0317 /** 0318 * The \f$M_{+++}\f$ matrix element of NBP339 (1990) 38-66. 0319 * @param s The \f$s\f$ invariant 0320 * @param t The \f$t\f$ invariant 0321 * @param u The \f$u\f$ invariant 0322 * @param mf2 The fermion mass squared. 0323 * @param i Which of the stored values to use for \f$D(u,t)\f$. 0324 * @param j Which of the stored values to use for \f$D(u,s)\f$. 0325 * @param k Which of the stored values to use for \f$D(s,t)\f$. 0326 * @param i1 Which of the stored values to use for \f$C_1(s)\f$. 0327 * @param j1 Which of the stored values to use for \f$C_1(t)\f$. 0328 * @param k1 Which of the stored values to use for \f$C_1(u)\f$. 0329 */ 0330 complex<Energy> me1(Energy2 s,Energy2 t,Energy2 u, Energy2 mf2, 0331 unsigned int i,unsigned int j, unsigned int k, 0332 unsigned int i1,unsigned int j1, unsigned int k1) const; 0333 0334 /** 0335 * The \f$M_{++-}\f$ matrix element of NBP339 (1990) 38-66. 0336 * @param s The \f$s\f$ invariant 0337 * @param t The \f$t\f$ invariant 0338 * @param u The \f$u\f$ invariant 0339 * @param mf2 The fermion mass squared. 0340 */ 0341 complex<Energy> me2(Energy2 s,Energy2 t,Energy2 u, Energy2 mf2) const; 0342 0343 /** 0344 * The \f$F(x)\f$ function for the leading-order result 0345 */ 0346 Complex F(double x) const; 0347 //@} 0348 0349 /** 0350 * Method to extract the PDF weight for quark/antiquark 0351 * initiated processes and select the quark flavour 0352 */ 0353 tPDPtr quarkFlavour(tcPDFPtr pdf, Energy2 scale, double x, tcBeamPtr beam, 0354 double & pdfweight, bool anti); 0355 0356 /** 0357 * Return the momenta and type of hard matrix element correction 0358 * @param gluons The original incoming particles. 0359 * @param beams The BeamParticleData objects 0360 * @param higgs The original outgoing higgs 0361 * @param iemit Whether the first (0) or second (1) particle emitted 0362 * the radiation 0363 * @param itype The type of radiated particle (0 is gluon, 1 is quark 0364 * and 2 is antiquark) 0365 * @param pnew The momenta of the new particles 0366 * @param xnew The new values of the momentuym fractions 0367 * @param out The ParticleData object for the outgoing parton 0368 * @return Whether or not the matrix element correction needs to be applied 0369 */ 0370 bool applyHard(ParticleVector gluons, 0371 vector<tcBeamPtr> beams, 0372 PPtr higgs,unsigned int & iemit, 0373 unsigned int & itype,vector<Lorentz5Momentum> & pnew, 0374 pair<double,double> & xnew, 0375 tPDPtr & out); 0376 0377 /** 0378 * generates the hardest emission (yj,p) 0379 * @param pnew The momenta of the new particles 0380 * @param emissiontype The type of emission, as for getResult 0381 * @return Whether not an emission was generated 0382 */ 0383 bool getEvent(vector<Lorentz5Momentum> & pnew,int & emissiontype); 0384 0385 /** 0386 * Returns the matrix element for a given type of process, 0387 * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$ 0388 * @param emis_type the type of emission, 0389 * (0 is \f$gg\to h^0g\f$, 1 is \f$qg\to h^0q\f$ and 2 is \f$g\bar{q}\to h^0\bar{q}\f$) 0390 * @param pt The transverse momentum of the jet 0391 * @param yj The rapidity of the jet 0392 * @param outParton the outgoing parton 0393 */ 0394 double getResult(int emis_type, Energy pt, double yj,tcPDPtr & outParton); 0395 0396 private: 0397 0398 /** 0399 * The assignment operator is private and must never be called. 0400 * In fact, it should not even be implemented. 0401 */ 0402 MEPP2Higgs & operator=(const MEPP2Higgs &) = delete; 0403 //@} 0404 0405 /** 0406 * Members to return the matrix elements for the different subprocesses 0407 */ 0408 //@{ 0409 /** 0410 * Calculates the matrix element for the process g,g->h (via quark loops) 0411 * @param g1 a vector of wave functions of the first incoming gluon 0412 * @param g2 a vector of wave functions of the second incoming gluon 0413 * @param calc Whether or not to calculate the matrix element for spin correlations 0414 * @return the amlitude value. 0415 */ 0416 double ggME(vector<VectorWaveFunction> g1, 0417 vector<VectorWaveFunction> g2, 0418 ScalarWaveFunction &, 0419 bool calc) const; 0420 0421 /** 0422 * Calculates the matrix element for the process q,qbar->h 0423 * @param fin a vector of quark spinors 0424 * @param ain a vector of anti-quark spinors 0425 * @param calc Whether or not to calculate the matrix element for spin correlations 0426 * @return the amlitude value. 0427 */ 0428 double qqME(vector<SpinorWaveFunction> & fin, 0429 vector<SpinorBarWaveFunction> & ain, 0430 ScalarWaveFunction &, 0431 bool calc) const; 0432 //@} 0433 0434 private: 0435 0436 /** 0437 * Selects a dynamic (sHat) or fixed factorization scale 0438 */ 0439 unsigned int scaleopt_; 0440 0441 /** 0442 * The value associated to the fixed factorization scale option 0443 */ 0444 Energy mu_F_; 0445 0446 /** 0447 * Defines the Higgs resonance shape 0448 */ 0449 unsigned int shapeOption_; 0450 0451 /** 0452 * The processes to be included (GG->H and/or qq->H) 0453 */ 0454 unsigned int processOption_; 0455 0456 /** 0457 * Minimum flavour of incoming quarks 0458 */ 0459 int minFlavour_; 0460 0461 /** 0462 * Maximum flavour of incoming quarks 0463 */ 0464 int maxFlavour_; 0465 0466 /** 0467 * Matrix element for spin correlations 0468 */ 0469 ProductionMatrixElement me_; 0470 0471 /** 0472 * Pointer to the H-> 2 gluon vertex (used in gg->H) 0473 */ 0474 AbstractVVSVertexPtr HGGVertex_; 0475 0476 /** 0477 * Pointer to the fermion-fermion Higgs vertex (used in qq->H) 0478 */ 0479 AbstractFFSVertexPtr HFFVertex_; 0480 0481 /** 0482 * The mass generator for the Higgs 0483 */ 0484 GenericMassGeneratorPtr hmass_; 0485 0486 /** 0487 * On-shell mass for the higgs 0488 */ 0489 Energy mh_; 0490 0491 /** 0492 * On-shell width for the higgs 0493 */ 0494 Energy wh_; 0495 0496 /** 0497 * Stuff for the ME correction 0498 */ 0499 //@{ 0500 /** 0501 * Parameters for the evaluation of the loops for the 0502 * matrix elements 0503 */ 0504 //@{ 0505 /** 0506 * Minimum flavour of quarks to include in the loops 0507 */ 0508 unsigned int minLoop_; 0509 0510 /** 0511 * Maximum flavour of quarks to include in the loops 0512 */ 0513 unsigned int maxLoop_; 0514 0515 /** 0516 * Option for treatment of the fermion loops 0517 */ 0518 unsigned int massOption_; 0519 0520 /** 0521 * Option for dynamic scale choice in alpha_S (0=mT,>0=pT) 0522 */ 0523 unsigned int mu_R_opt_; 0524 0525 /** 0526 * Option for dynamic scale choice in PDFs (0=mT,>0=pT) 0527 */ 0528 unsigned int mu_F_opt_; 0529 //@} 0530 0531 //@} 0532 0533 /** 0534 * Small complex number to regularize some integrals 0535 */ 0536 static const complex<Energy2> epsi_; 0537 0538 /** 0539 * Storage of the loop functions 0540 */ 0541 //@{ 0542 /** 0543 * B functions 0544 */ 0545 mutable Complex bi_[5]; 0546 0547 /** 0548 * C functions 0549 */ 0550 mutable complex<InvEnergy2> ci_[8]; 0551 0552 /** 0553 * D functions 0554 */ 0555 mutable complex<InvEnergy4> di_[4]; 0556 //@} 0557 0558 /** 0559 * Pointer to the object calculating the strong coupling 0560 */ 0561 ShowerAlphaPtr alpha_; 0562 0563 /** 0564 * Mass squared of Higgs 0565 */ 0566 Energy2 mh2_; 0567 0568 /** 0569 * Relative weight of the \f$qg\f$ to the \f$gg\f$ channel 0570 */ 0571 double channelwgtA_; 0572 0573 /** 0574 * Relative weight for the \f$\bar{q}g\f$ to the \f$gg\f$ channel 0575 */ 0576 double channelwgtB_; 0577 0578 /** 0579 * Weights for the channels as a vector 0580 */ 0581 vector<double> channelWeights_; 0582 0583 /** 0584 * Power for the \f$\frac{{\rm d}\hat{s}}{\hat{s}^n}\f$ importance sampling 0585 * of the \f$gg\f$ component 0586 */ 0587 double ggPow_; 0588 0589 /** 0590 * Power for the \f$\frac{{\rm d}\hat{s}}{\hat{s}^n}\f$ importance sampling 0591 * of the \f$qg\f$ and \f$\bar{q}g\f$ components 0592 */ 0593 double qgPow_; 0594 0595 /** 0596 * The enhancement factor for initial-state radiation 0597 */ 0598 double enhance_; 0599 0600 /** 0601 * Number of weights greater than 1 0602 */ 0603 unsigned int nover_; 0604 0605 /** 0606 * Number of attempts 0607 */ 0608 unsigned int ntry_; 0609 0610 /** 0611 * Number which suceed 0612 */ 0613 unsigned int ngen_; 0614 0615 /** 0616 * Maximum weight 0617 */ 0618 double maxwgt_; 0619 //@} 0620 0621 /** 0622 * Constants for the sampling. The distribution is assumed to have the 0623 * form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ 0624 */ 0625 //@{ 0626 /** 0627 * The power, \f$n\f$, for the sampling 0628 */ 0629 double power_; 0630 0631 /** 0632 * The prefactor, \f$c\f$ for the \f$gg\f$ channel 0633 */ 0634 double pregg_; 0635 0636 /** 0637 * The prefactor, \f$c\f$ for the \f$qg\f$ channel 0638 */ 0639 double preqg_; 0640 0641 /** 0642 * The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel 0643 */ 0644 double pregqbar_; 0645 0646 /** 0647 * The prefactors as a vector for easy use 0648 */ 0649 vector<double> prefactor_; 0650 //@} 0651 0652 /** 0653 * The transverse momentum of the jet 0654 */ 0655 Energy minpT_; 0656 0657 /** 0658 * Properties of the incoming particles 0659 */ 0660 //@{ 0661 /** 0662 * Pointers to the BeamParticleData objects 0663 */ 0664 vector<tcBeamPtr> beams_; 0665 0666 /** 0667 * Pointers to the ParticleDataObjects for the partons 0668 */ 0669 vector<tcPDPtr> partons_; 0670 //@} 0671 0672 /** 0673 * Properties of the boson and jets 0674 */ 0675 //@{ 0676 /** 0677 * The rapidity of the Higgs boson 0678 */ 0679 double yh_; 0680 0681 /** 0682 * The mass of the Higgs boson 0683 */ 0684 Energy mass_; 0685 0686 /** 0687 * the rapidity of the jet 0688 */ 0689 double yj_; 0690 0691 /** 0692 * The transverse momentum of the jet 0693 */ 0694 Energy pt_; 0695 0696 /** 0697 * The outgoing parton 0698 */ 0699 tcPDPtr out_; 0700 //@} 0701 0702 /** 0703 * Whether of not to construct the vertex for spin correlations 0704 */ 0705 bool spinCorrelations_; 0706 0707 }; 0708 0709 } 0710 0711 #endif /* HERWIG_MEPP2Higgs_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|