|
|
|||
File indexing completed on 2026-08-06 09:24:13
0001 // -*- C++ -*- 0002 // 0003 // DipolePKOperator.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_DipolePKOperator_H 0010 #define HERWIG_DipolePKOperator_H 0011 // 0012 // This is the declaration of the DipolePKOperator class. 0013 // 0014 0015 #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h" 0016 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h" 0017 #include "ThePEG/PDF/PDF.h" 0018 0019 namespace Herwig { 0020 0021 using namespace ThePEG; 0022 0023 /** 0024 * \ingroup Matchbox 0025 * \author Simon Platzer, Christian Reuschle 0026 * 0027 * \brief DipolePKOperator implements the P+K 0028 * insertion operator. 0029 * 0030 */ 0031 class DipolePKOperator: public MatchboxInsertionOperator { 0032 0033 public: 0034 0035 /** @name Standard constructors and destructors. */ 0036 //@{ 0037 /** 0038 * The default constructor. 0039 */ 0040 DipolePKOperator(); 0041 0042 /** 0043 * The destructor. 0044 */ 0045 virtual ~DipolePKOperator(); 0046 //@} 0047 0048 public: 0049 0050 /** 0051 * Set the XComb object steering the Born matrix 0052 * element this class represents virtual corrections to. 0053 */ 0054 virtual void setXComb(tStdXCombPtr xc); 0055 0056 /** 0057 * Set parameters for new alpha parameter. 0058 */ 0059 virtual void setAlpha (double alpha)const; 0060 0061 /** 0062 * Return the number of additional random variables 0063 * needed to calculate this virtual correction. 0064 * We treat all integrations on equal footing. 0065 */ 0066 virtual int nDimAdditional() const { return 1; } 0067 0068 /** 0069 * Return a vector of PDG codes of the light flavours, 0070 * which are contained in the jet particle group. 0071 */ 0072 vector<int> NLightJetVec() const; 0073 0074 /** 0075 * Return a vector of PDG codes of the heavy flavours, 0076 * which are contained in the jet particle group. 0077 */ 0078 vector<int> NHeavyJetVec() const; 0079 0080 /** 0081 * Return a vector of PDG codes of the light flavours, 0082 * which are contained in the associated Born sub-process. 0083 */ 0084 vector<int> NLightBornVec() const; 0085 0086 /** 0087 * Return a vector of PDG codes of the heavy flavours, 0088 * which are contained in the associated Born sub-process. 0089 */ 0090 vector<int> NHeavyBornVec() const; 0091 0092 /** 0093 * Return a vector of PDG codes of the light flavours, 0094 * which are contained in the proton particle group. 0095 */ 0096 vector<int> NLightProtonVec() const; 0097 0098 /** 0099 * Evaluate the finite virtual correction for the 0100 * variables supplied through the Born XComb object 0101 * and possible additional random numbers. 0102 */ 0103 virtual double me2() const; 0104 0105 /** 0106 * Evaluate the finite virtual correction for the 0107 * variables supplied through the Born XComb object 0108 * and possible additional random numbers. 0109 */ 0110 virtual CrossSection dSigHatDR() const { 0111 return sqr(hbarc) * me2() * lastBorn()->lastXComb().jacobian() / (2.*lastSHat()); 0112 } 0113 0114 public: 0115 0116 /** 0117 * Return true, if contributions exist to 0118 * the given parton. 0119 */ 0120 bool apply(tcPDPtr) const; 0121 0122 /** 0123 * Return true, if this virtual correction 0124 * applies to the given process. 0125 */ 0126 virtual bool apply(const cPDVector&) const; 0127 0128 /** 0129 * The initial-final contribution 0130 */ 0131 double gammaSoft() const; 0132 0133 /** 0134 * [(1/(1-z))*ln((1-z)/z)]_+ 0135 */ 0136 double softLogByz(tcPDPtr p) const; 0137 0138 /** 0139 * [(1/(1-z))*ln((1-z))]_+ 0140 */ 0141 double softLog(tcPDPtr p) const; 0142 0143 /** 0144 * The Kbar^{qq} contribution 0145 */ 0146 double KBarqq() const; 0147 0148 /** 0149 * The Ktilde^{qq} contribution 0150 */ 0151 double KTildeqq() const; 0152 0153 /** 0154 * The P^{qq} contribution 0155 */ 0156 double Pqq() const; 0157 0158 /** 0159 * The Kbar^{qg} contribution 0160 */ 0161 double KBarqg() const; 0162 0163 /** 0164 * The Ktilde^{qg} contribution 0165 */ 0166 double KTildeqg() const; 0167 0168 /** 0169 * The P^{qg} contribution 0170 */ 0171 double Pqg() const; 0172 0173 /** 0174 * The Kbar^{gq} contribution 0175 */ 0176 double KBargq() const; 0177 0178 /** 0179 * The Ktilde^{gq} contribution 0180 */ 0181 double KTildegq() const; 0182 0183 /** 0184 * The P^{gq} contribution 0185 */ 0186 double Pgq() const; 0187 0188 /** 0189 * The Kbar^{gg} contribution 0190 */ 0191 double KBargg() const; 0192 0193 /** 0194 * The Ktilde^{gg} contribution 0195 */ 0196 double KTildegg() const; 0197 0198 /** 0199 * The P^{gg} contribution 0200 */ 0201 double Pgg() const; 0202 0203 /** 0204 * Get all contributions for the indicated incoming parton. 0205 */ 0206 double sumParton(int id) const; 0207 0208 public: 0209 0210 /** @name Functions used by the persistent I/O system. */ 0211 //@{ 0212 /** 0213 * Function used to write out object persistently. 0214 * @param os the persistent output stream written to. 0215 */ 0216 void persistentOutput(PersistentOStream & os) const; 0217 0218 /** 0219 * Function used to read in object persistently. 0220 * @param is the persistent input stream read from. 0221 * @param version the version number of the object when written. 0222 */ 0223 void persistentInput(PersistentIStream & is, int version); 0224 //@} 0225 0226 /** 0227 * The standard Init function used to initialize the interfaces. 0228 * Called exactly once for each class by the class description system 0229 * before the main function starts or 0230 * when this class is dynamically loaded. 0231 */ 0232 static void Init(); 0233 0234 protected: 0235 0236 /** @name Clone Methods. */ 0237 //@{ 0238 /** 0239 * Make a simple clone of this object. 0240 * @return a pointer to the new object. 0241 */ 0242 virtual IBPtr clone() const; 0243 0244 /** Make a clone of this object, possibly modifying the cloned object 0245 * to make it sane. 0246 * @return a pointer to the new object. 0247 */ 0248 virtual IBPtr fullclone() const; 0249 //@} 0250 0251 private: 0252 0253 /** 0254 * C_A 0255 */ 0256 double CA; 0257 0258 /** 0259 * C_F 0260 */ 0261 double CF; 0262 0263 /** 0264 * \gamma_q 0265 */ 0266 double gammaQuark; 0267 0268 /** 0269 * \gamma_g 0270 */ 0271 double gammaGluon; 0272 0273 /** 0274 * K_q 0275 */ 0276 mutable double KQuark; 0277 0278 /** 0279 * K_g 0280 */ 0281 mutable double KGluon; 0282 0283 /** 0284 * The scale to be used. 0285 */ 0286 mutable Energy2 scale; 0287 0288 /** 0289 * The PDF to be used. 0290 */ 0291 mutable tcPDFPtr pdf; 0292 0293 /** 0294 * The incoming parton type considered. 0295 */ 0296 mutable tcPDPtr particle; 0297 0298 /** 0299 * The x to be used. 0300 */ 0301 mutable double x; 0302 0303 /** 0304 * The convolution variable to be used. 0305 */ 0306 mutable double z; 0307 0308 /** 0309 * Cache PDFs evaluated at x and x/z 0310 */ 0311 mutable map<pair<tcPDFPtr,tcPDPtr>,pair<double,double> > pdfCache; 0312 0313 /** 0314 * The currently considered incoming parton. 0315 */ 0316 mutable tcPDPtr parton; 0317 0318 /** 0319 * Get a PDF value at x 0320 */ 0321 double PDFx(tcPDPtr) const; 0322 0323 /** 0324 * Get a PDF value at x/z 0325 */ 0326 double PDFxByz(tcPDPtr) const; 0327 0328 private: 0329 0330 /** 0331 * The assignment operator is private and must never be called. 0332 * In fact, it should not even be implemented. 0333 */ 0334 DipolePKOperator & operator=(const DipolePKOperator &) = delete; 0335 0336 }; 0337 0338 } 0339 0340 #endif /* HERWIG_DipolePKOperator_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|