|
|
|||
File indexing completed on 2026-08-06 09:24:15
0001 // -*- C++ -*- 0002 // 0003 // MEPP2HiggsPowheg.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_MEPP2HiggsPowheg_H 0010 #define HERWIG_MEPP2HiggsPowheg_H 0011 // 0012 // This is the declaration of the MEPP2HiggsPowheg class. 0013 // 0014 0015 #include "Herwig/MatrixElement/Hadron/MEPP2Higgs.h" 0016 #include "ThePEG/PDF/BeamParticleData.h" 0017 0018 namespace Herwig { 0019 using namespace ThePEG; 0020 using namespace ThePEG::Helicity; 0021 0022 /** 0023 * The MEPP2HiggsPowheg class implements the matrix element for the process 0024 * pp->Higgs with different Higgs shape prescriptions (see details in hep-ph/9505211) 0025 * and the NLL corrected Higgs width (see details in the FORTRAN HERWIG manual). 0026 * 0027 * @see \ref MEPP2HiggsPowhegInterfaces "The interfaces" 0028 * defined for MEPP2HiggsPowheg. 0029 */ 0030 class MEPP2HiggsPowheg: public MEPP2Higgs { 0031 0032 public: 0033 0034 /** 0035 * The default constructor. 0036 */ 0037 MEPP2HiggsPowheg(); 0038 0039 public: 0040 0041 /** @name Virtual functions required by the MEBase class. */ 0042 //@{ 0043 /** 0044 * The matrix element for the kinematical configuration 0045 * previously provided by the last call to setKinematics(), suitably 0046 * scaled by sHat() to give a dimension-less number. 0047 * @return the matrix element scaled with sHat() to give a 0048 * dimensionless number. 0049 */ 0050 virtual double me2() const; 0051 0052 /** 0053 * Generate internal degrees of freedom given nDim() uniform 0054 * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space 0055 * generator, the dSigHatDR should be a smooth function of these 0056 * numbers, although this is not strictly necessary. 0057 * @param r a pointer to the first of nDim() consecutive random numbers. 0058 * @return true if the generation succeeded, otherwise false. 0059 */ 0060 virtual bool generateKinematics(const double * r); 0061 0062 /** 0063 * Return the scale associated with the last set phase space point. 0064 */ 0065 virtual Energy2 scale() const; 0066 0067 /** 0068 * The number of internal degrees of freedom used in the matrix 0069 * element. 0070 */ 0071 virtual int nDim() const; 0072 //@} 0073 0074 public: 0075 0076 /** @name Functions used by the persistent I/O system. */ 0077 //@{ 0078 /** 0079 * Function used to write out object persistently. 0080 * @param os the persistent output stream written to. 0081 */ 0082 void persistentOutput(PersistentOStream & os) const; 0083 0084 /** 0085 * Function used to read in object persistently. 0086 * @param is the persistent input stream read from. 0087 * @param version the version number of the object when written. 0088 */ 0089 void persistentInput(PersistentIStream & is, int version); 0090 //@} 0091 0092 /** 0093 * The standard Init function used to initialize the interfaces. 0094 * Called exactly once for each class by the class description system 0095 * before the main function starts or 0096 * when this class is dynamically loaded. 0097 */ 0098 static void Init(); 0099 0100 /** 0101 * Function to set the born variables. 0102 */ 0103 void get_born_variables() const; 0104 0105 /** 0106 * Calculate the correction weight with which leading-order 0107 * configurations are re-weighted. 0108 */ 0109 double NLOweight() const; 0110 0111 /** 0112 * Invariant required for the evaluation of next-to-leading order 0113 * quantities (Frixione et al. NPB.383 WZ production at colliders). 0114 */ 0115 Energy2 s(double xt, double y) const { 0116 return p2_/x(xt,y); 0117 } 0118 0119 /** 0120 * Invariant required for the evaluation of next-to-leading order 0121 * quantities (Frixione et al. NPB.383 WZ production at colliders). 0122 */ 0123 Energy2 tk(double xt, double y) const { 0124 double x_xt_y(x(xt,y)); 0125 return -0.5*p2_/x_xt_y*(1.- x_xt_y)*(1.-y); 0126 } 0127 0128 /** 0129 * Invariant required for the evaluation of next-to-leading order 0130 * quantities (Frixione et al. NPB.383 WZ production at colliders). 0131 */ 0132 Energy2 uk(double xt, double y) const { 0133 double x_xt_y(x(xt,y)); 0134 return -0.5*p2_/x_xt_y*(1.- x_xt_y)*(1.+y); 0135 } 0136 0137 /** 0138 * Calculate the minimum of \f$x\f$. 0139 */ 0140 double xbar(double y) const; 0141 0142 /** 0143 * Calculate auxiliary function of \f$\bar{x}(y)\f$, \f$\bar{\eta}(y)\f$. 0144 */ 0145 double etabar(double y) const; 0146 0147 /** 0148 * Calculate the variable \f$x=p^{2}/s\f$ from the integration variables. 0149 */ 0150 double x(double xt, double y) const { 0151 double x0(xbar(y)); 0152 return x0+(1.-x0)*xt; 0153 } 0154 0155 /** 0156 * Calculate the momentum fraction of the plus parton. 0157 */ 0158 double xp(double x, double y) const; 0159 0160 /** 0161 * Calculate the momentum fraction of the minus parton. 0162 */ 0163 double xm(double x, double y) const; 0164 0165 /** 0166 * Calculate the ratio of the NLO luminosity to the LO 0167 * luminosity function for the \f$q\bar{q}\f$ initiated channel. 0168 */ 0169 double Lhat_ab(tcPDPtr a, tcPDPtr b, double x, double y) const; 0170 0171 /** 0172 * Calculate the universal soft-virtual contribution to the NLO weight. 0173 */ 0174 double Vtilde_universal() const; 0175 0176 /** 0177 * Function for calculation of the \f$gg\f$ initiated real 0178 * contribution. 0179 */ 0180 double Ctilde_Ltilde_gg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0181 0182 /** 0183 * Function for calculation of the \f$qg\f$ initiated real 0184 * contribution. 0185 */ 0186 double Ctilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0187 0188 /** 0189 * Function for calculation of the \f$gq\f$ initiated real 0190 * contribution. 0191 */ 0192 double Ctilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0193 0194 /** 0195 * The regular part of the virtual correction matrix element(s) 0196 */ 0197 double M_V_regular() const; 0198 0199 /** 0200 * The matrix element q + qbar -> n + g times tk*uk 0201 */ 0202 Energy2 t_u_M_R_qqbar(double xt, double y) const; 0203 0204 /** 0205 * The matrix element qbar + q -> n + g times tk*uk 0206 */ 0207 Energy2 t_u_M_R_qbarq(double xt, double y) const; 0208 0209 /** 0210 * The matrix element g + g -> n + g times tk*uk 0211 */ 0212 Energy2 t_u_M_R_gg(double xt, double y) const; 0213 0214 /** 0215 * The matrix element q + g -> n + q times tk*uk 0216 */ 0217 Energy2 t_u_M_R_qg(double xt, double y) const; 0218 0219 /** 0220 * The matrix element g + q -> n + q times tk*uk 0221 */ 0222 Energy2 t_u_M_R_gq(double xt, double y) const; 0223 0224 /** 0225 * Function for calculation of the \f$q\bar{q}\f$ initiated real 0226 * contribution. 0227 */ 0228 double Rtilde_Ltilde_qqbar_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0229 0230 /** 0231 * Function for calculation of the \f$\bar{q}q\f$ initiated real 0232 * contribution. 0233 */ 0234 double Rtilde_Ltilde_qbarq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0235 0236 /** 0237 * Function for calculation of the \f$qq\f$ 0238 * initiated real contribution. 0239 */ 0240 double Rtilde_Ltilde_gg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0241 0242 /** 0243 * Function for calculation of the \f$qg\f$ initiated real 0244 * contribution. 0245 */ 0246 double Rtilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0247 0248 /** 0249 * Function for calculation of the \f$gq\f$ initiated real 0250 * contribution. 0251 */ 0252 double Rtilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; 0253 0254 protected: 0255 0256 /** @name Clone Methods. */ 0257 //@{ 0258 /** 0259 * Make a simple clone of this object. 0260 * @return a pointer to the new object. 0261 */ 0262 virtual IBPtr clone() const { return new_ptr(*this); } 0263 0264 /** Make a clone of this object, possibly modifying the cloned object 0265 * to make it sane. 0266 * @return a pointer to the new object. 0267 */ 0268 virtual IBPtr fullclone() const { return new_ptr(*this); } 0269 //@} 0270 0271 private: 0272 0273 /** 0274 * The assignment operator is private and must never be called. 0275 * In fact, it should not even be implemented. 0276 */ 0277 MEPP2HiggsPowheg & operator=(const MEPP2HiggsPowheg &) = delete; 0278 0279 private: 0280 0281 /** 0282 * Parameters for the NLO weight 0283 */ 0284 //@{ 0285 /** 0286 * The colour factors 0287 */ 0288 const double CF_ , CA_ , TR_; 0289 0290 /** 0291 * Number of light flavours (in the beta function beta0_) 0292 */ 0293 const int nlf_; 0294 0295 /** 0296 * (Proportional to) The beta function 0297 */ 0298 const double beta0_; 0299 0300 /** 0301 * Whether to generate the positive, negative or leading order contribution 0302 */ 0303 unsigned int contrib_; 0304 0305 /** 0306 * Whether to use a fixed or a running QCD coupling for the NLO weight 0307 */ 0308 unsigned int nlo_alphaS_opt_; 0309 0310 /** 0311 * The value of alphaS to use for the nlo weight if nlo_alphaS_opt_=1 0312 */ 0313 double fixed_alphaS_; 0314 //@} 0315 0316 /** 0317 * Radiation variables 0318 */ 0319 //@{ 0320 /** 0321 * The \f$\tilde{x}\f$ variable 0322 */ 0323 double xt_; 0324 0325 /** 0326 * The \f$y\f$ angular variable 0327 */ 0328 double y_; 0329 //@} 0330 0331 /** 0332 * Values of the PDF's before radiation 0333 */ 0334 mutable double lo_lumi_; 0335 0336 /** 0337 * The value of the leading order gg->H matrix element 0338 */ 0339 mutable double lo_ggME_; 0340 0341 /** 0342 * The invariant mass of the lo final state. 0343 */ 0344 mutable Energy2 p2_ ; 0345 0346 /** 0347 * The invariant mass of the lo final state. 0348 */ 0349 mutable Energy2 s2_ ; 0350 0351 /** 0352 * The momentum fraction of the plus parton in the Born process 0353 */ 0354 mutable double xbp_; 0355 0356 /** 0357 * The momentum fraction of the minus parton in the Born process 0358 */ 0359 mutable double xbm_; 0360 0361 /** 0362 * The sqrt(1-xbp_) 0363 */ 0364 mutable double etabarp_; 0365 0366 /** 0367 * The sqrt(1-xbm_) 0368 */ 0369 mutable double etabarm_; 0370 0371 /** 0372 * The ParticleData object for the plus lo parton 0373 */ 0374 mutable tcPDPtr a_lo_; 0375 0376 /** 0377 * The ParticleData object for the minus lo parton 0378 */ 0379 mutable tcPDPtr b_lo_; 0380 0381 /** 0382 * The BeamParticleData object for the plus direction hadron 0383 */ 0384 mutable Ptr<BeamParticleData>::transient_const_pointer hadron_A_; 0385 0386 /** 0387 * The BeamParticleData object for the minus direction hadron 0388 */ 0389 mutable Ptr<BeamParticleData>::transient_const_pointer hadron_B_; 0390 0391 /** 0392 * The value of \f$\alpha_S\f$ used for the calculation 0393 */ 0394 mutable double alphaS_; 0395 0396 /** 0397 * Selects a dynamic (sHat) or fixed factorization scale 0398 */ 0399 unsigned int scaleopt_; 0400 0401 /** 0402 * The factorization scale 0403 */ 0404 Energy mu_F_; 0405 0406 /** 0407 * The renormalization scale 0408 */ 0409 Energy mu_UV_; 0410 0411 /** 0412 * Prefactor if variable scale used 0413 */ 0414 double scaleFact_; 0415 }; 0416 0417 } 0418 0419 #endif /* HERWIG_MEPP2HiggsPowheg_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|