|
|
|||
File indexing completed on 2026-08-06 09:24:16
0001 // -*- C++ -*- 0002 // 0003 // MEqq2gZ2ffPowheg.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_MEqq2gZ2ffPowheg_H 0010 #define HERWIG_MEqq2gZ2ffPowheg_H 0011 // 0012 // This is the declaration of the MEqq2gZ2ffPowheg class. 0013 // 0014 0015 #include "Herwig/MatrixElement/Hadron/MEqq2gZ2ff.h" 0016 #include "ThePEG/PDF/BeamParticleData.h" 0017 0018 namespace Herwig { 0019 using namespace ThePEG; 0020 0021 /** 0022 * The MEqq2gZ2ffPowheg class implements the products of Standard Model 0023 * fermion antifermion pairs via the \f$Z^0\f$ resonance including 0024 * photon interference terms. 0025 * 0026 * @see \ref MEqq2gZ2ffPowhegInterfaces "The interfaces" 0027 * defined for MEqq2gZ2ffPowheg. 0028 */ 0029 class MEqq2gZ2ffPowheg: public MEqq2gZ2ff { 0030 0031 public: 0032 0033 /** 0034 * The default constructor. 0035 */ 0036 MEqq2gZ2ffPowheg(); 0037 0038 /** @name Virtual functions required by the MEBase class. */ 0039 //@{ 0040 /** 0041 * Return the scale associated with the last set phase space point. 0042 */ 0043 virtual Energy2 scale() const; 0044 0045 /** 0046 * The number of internal degreed of freedom used in the matrix 0047 * element. 0048 */ 0049 virtual int nDim() const; 0050 0051 /** 0052 * Generate internal degrees of freedom given 'nDim()' uniform 0053 * random numbers in the interval ]0,1[. To help the phase space 0054 * generator, the 'dSigHatDR()' should be a smooth function of these 0055 * numbers, although this is not strictly necessary. Return 0056 * false if the chosen points failed the kinematical cuts. 0057 */ 0058 virtual bool generateKinematics(const double * r); 0059 0060 /** 0061 * Return the matrix element for the kinematical configuation 0062 * previously provided by the last call to setKinematics(). Uses 0063 * me(). 0064 */ 0065 virtual CrossSection dSigHatDR() const; 0066 //@} 0067 0068 0069 public: 0070 0071 /** @name Functions used by the persistent I/O system. */ 0072 //@{ 0073 /** 0074 * Function used to write out object persistently. 0075 * @param os the persistent output stream written to. 0076 */ 0077 void persistentOutput(PersistentOStream & os) const; 0078 0079 /** 0080 * Function used to read in object persistently. 0081 * @param is the persistent input stream read from. 0082 * @param version the version number of the object when written. 0083 */ 0084 void persistentInput(PersistentIStream & is, int version); 0085 //@} 0086 0087 /** 0088 * The standard Init function used to initialize the interfaces. 0089 * Called exactly once for each class by the class description system 0090 * before the main function starts or 0091 * when this class is dynamically loaded. 0092 */ 0093 static void Init(); 0094 0095 protected: 0096 0097 /** 0098 * Calculate the correction weight with which leading-order 0099 * configurations are re-weighted. 0100 */ 0101 double NLOweight() const; 0102 0103 /** 0104 * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. 0105 */ 0106 double x(double xt, double v) const; 0107 /** 0108 * Calculate the momentum fraction of the first parton. 0109 */ 0110 double x_a(double x, double v) const; 0111 /** 0112 * Calculate the momentum fraction of the second parton. 0113 */ 0114 double x_b(double x, double v) const; 0115 /** 0116 * Calculate the minimum of \f$x\f$. 0117 */ 0118 double xbar(double v) const; 0119 /** 0120 * Calculate the ratio of the radiative luminosity funcion to the 0121 * Born luminosity function for the \f$qg\f$ initiated channel. 0122 */ 0123 double Ltilde_qg(double x, double v) const; 0124 /** 0125 * Calculate the ratio of the radiative luminosity funcion to the 0126 * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. 0127 */ 0128 double Ltilde_gq(double x, double v) const; 0129 /** 0130 * Calculate the ratio of the radiative luminosity funcion to the 0131 * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. 0132 */ 0133 double Ltilde_qq(double x, double v) const; 0134 /** 0135 * Calculate the soft-virtual contribution to the NLO weight. 0136 */ 0137 double Vtilde_qq() const; 0138 /** 0139 * Function for calculation of the \f$qg\f$ and \f$g\bar{q}\f$ initiated real 0140 * contributions. 0141 */ 0142 double Ccalbar_qg(double x) const; 0143 /** 0144 * Function for calculation of the \f$qg\f$ 0145 * initiated real contribution. 0146 */ 0147 double Fcal_qg(double x, double v) const; 0148 /** 0149 * Function for calculation of the \f$g\bar{q}\f$ initiated real 0150 * contribution. 0151 */ 0152 double Fcal_gq(double x, double v) const; 0153 /** 0154 * Function for calculation of the \f$q\bar{q}\f$ initiated real 0155 * contribution. 0156 */ 0157 double Fcal_qq(double x, double v) const; 0158 /** 0159 * Function for calculation of the \f$qg\f$ initiated real 0160 * contribution. 0161 */ 0162 double Ftilde_qg(double xt, double v) const; 0163 /** 0164 * Function for calculation of the \f$g\bar{q}\f$ initiated real 0165 * contribution. 0166 */ 0167 double Ftilde_gq(double xt, double v) const; 0168 /** 0169 * Function for calculation of the \f$q\bar{q}\f$ initiated real 0170 * contribution. 0171 */ 0172 double Ftilde_qq(double xt, double v) const; 0173 /** 0174 * Function for calculation of the \f$qg\f$ initiated real 0175 * contribution. 0176 */ 0177 double Ctilde_qg(double x, double v) const; 0178 /** 0179 * Function for calculation of the \f$g\bar{q}\f$ initiated real 0180 * contribution. 0181 */ 0182 double Ctilde_gq(double x, double v) const; 0183 /** 0184 * Function for calculation of the \f$q\bar{q}\f$ initiated real 0185 * contribution. 0186 */ 0187 double Ctilde_qq(double x, double v) const; 0188 0189 protected: 0190 0191 /** @name Clone Methods. */ 0192 //@{ 0193 /** 0194 * Make a simple clone of this object. 0195 * @return a pointer to the new object. 0196 */ 0197 virtual IBPtr clone() const { return new_ptr(*this); } 0198 0199 /** Make a clone of this object, possibly modifying the cloned object 0200 * to make it sane. 0201 * @return a pointer to the new object. 0202 */ 0203 virtual IBPtr fullclone() const { return new_ptr(*this); } 0204 //@} 0205 0206 protected: 0207 0208 /** @name Standard Interfaced functions. */ 0209 //@{ 0210 /** 0211 * Initialize this object after the setup phase before saving an 0212 * EventGenerator to disk. 0213 * @throws InitException if object could not be initialized properly. 0214 */ 0215 virtual void doinit(); 0216 //@} 0217 0218 private: 0219 0220 /** 0221 * The assignment operator is private and must never be called. 0222 * In fact, it should not even be implemented. 0223 */ 0224 MEqq2gZ2ffPowheg & operator=(const MEqq2gZ2ffPowheg &) = delete; 0225 0226 private: 0227 0228 /** 0229 * The momentum fraction of the first parton in the Born process 0230 */ 0231 mutable double _xb_a; 0232 0233 /** 0234 * The momentum fraction of the second parton in the Born process 0235 */ 0236 mutable double _xb_b; 0237 0238 /** 0239 * The ParticleData object for the first parton in the Born process 0240 */ 0241 mutable tcPDPtr _parton_a; 0242 0243 /** 0244 * The ParticleData object for the second parton in the Born process 0245 */ 0246 mutable tcPDPtr _parton_b; 0247 0248 /** 0249 * The BeamParticleData object for the first hadron 0250 */ 0251 mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A; 0252 0253 /** 0254 * The BeamParticleData object for the second hadron 0255 */ 0256 mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B; 0257 0258 /** 0259 * the ParticleData object for the gluon 0260 */ 0261 tcPDPtr _gluon; 0262 0263 /** 0264 * The \f$T_R\f$ colour factor 0265 */ 0266 const double TR_; 0267 0268 /** 0269 * The \f$C_F\f$ colour factor 0270 */ 0271 const double CF_; 0272 0273 /** 0274 * The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation 0275 */ 0276 mutable double _alphaS2Pi; 0277 0278 /** 0279 * The mass squared of the lepton pair 0280 */ 0281 mutable Energy2 _mll2; 0282 0283 /** 0284 * The renormalization/factorization scale 0285 */ 0286 mutable Energy2 _mu2; 0287 0288 /** 0289 * Parameters for the NLO weight 0290 */ 0291 //@{ 0292 /** 0293 * Whether to generate the positive, negative or leading order contribution 0294 */ 0295 unsigned int _contrib; 0296 0297 /** 0298 * Whether to use a fixed or a running QCD coupling for the NLO weight 0299 */ 0300 unsigned int _nlo_alphaS_opt; 0301 0302 /** 0303 * The value of alphaS to use for the nlo weight if _nloalphaSopt=1 0304 */ 0305 double _fixed_alphaS; 0306 0307 /** 0308 * The magnitude of the correction term to reduce the negative contribution 0309 */ 0310 double _a; 0311 0312 /** 0313 * The power of the correction term to reduce the negative contribution 0314 */ 0315 double _p; 0316 0317 /** 0318 * Cut-off for the correction function 0319 */ 0320 double _eps; 0321 //@} 0322 0323 /** 0324 * Choice of the scale 0325 */ 0326 //@{ 0327 /** 0328 * Type of scale 0329 */ 0330 unsigned int _scaleopt; 0331 0332 /** 0333 * Fixed scale if used 0334 */ 0335 Energy _fixedScale; 0336 0337 /** 0338 * Prefactor if variable scale used 0339 */ 0340 double _scaleFact; 0341 //@} 0342 0343 /** 0344 * Radiation variables 0345 */ 0346 //@{ 0347 /** 0348 * The \f$\tilde{x}\f$ variable 0349 */ 0350 double _xt; 0351 0352 /** 0353 * The \f$v\f$ angular variable 0354 */ 0355 double _v; 0356 //@} 0357 0358 /** 0359 * Values of the PDF's before radiation 0360 */ 0361 //@{ 0362 /** 0363 * For the quark 0364 */ 0365 mutable double _oldq; 0366 0367 /** 0368 * For the antiquark 0369 */ 0370 mutable double _oldqbar; 0371 //@} 0372 }; 0373 0374 } 0375 0376 #endif /* HERWIG_MEqq2gZ2ffPowheg_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|