|
|
|||
File indexing completed on 2026-08-06 09:24:07
0001 // -*- C++ -*- 0002 #ifndef HERWIG_DISBase_H 0003 #define HERWIG_DISBase_H 0004 // 0005 // This is the declaration of the DISBase class. 0006 // 0007 0008 #include "Herwig/MatrixElement/HwMEBase.h" 0009 #include "Herwig/Shower/ShowerAlpha.h" 0010 0011 namespace Herwig { 0012 0013 using namespace ThePEG; 0014 0015 /** 0016 * The DISBase class is the base class for the implementation 0017 * of DIS type processes including corrections in both the old 0018 * fashioned matrix element and POWHEG approaches 0019 * 0020 * @see \ref DISBaseInterfaces "The interfaces" 0021 * defined for DISBase. 0022 */ 0023 class DISBase: public HwMEBase { 0024 0025 public: 0026 0027 /** 0028 * The default constructor. 0029 */ 0030 DISBase(); 0031 0032 /** 0033 * The default constructor. 0034 */ 0035 virtual ~DISBase(); 0036 0037 /** 0038 * Members for the old-fashioned matrix element correction 0039 */ 0040 //@{ 0041 /** 0042 * Has an old fashioned ME correction 0043 */ 0044 virtual bool hasMECorrection() {return true;} 0045 0046 /** 0047 * Initialize the ME correction 0048 */ 0049 virtual void initializeMECorrection(RealEmissionProcessPtr, double &, 0050 double & ); 0051 0052 /** 0053 * Apply the hard matrix element correction to a given hard process or decay 0054 */ 0055 virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr); 0056 0057 /** 0058 * Apply the soft matrix element correction 0059 * @param parent The initial particle in the current branching 0060 * @param progenitor The progenitor particle of the jet 0061 * @param fs Whether the emission is initial or final-state 0062 * @param highestpT The highest pT so far in the shower 0063 * @param ids ids of the particles produced in the branching 0064 * @param z The momentum fraction of the branching 0065 * @param scale the evolution scale of the branching 0066 * @param pT The transverse momentum of the branching 0067 * @return If true the emission should be vetoed 0068 */ 0069 virtual bool softMatrixElementVeto(PPtr parent, 0070 PPtr progenitor, 0071 const bool & fs, 0072 const Energy & highestpT, 0073 const vector<tcPDPtr> & ids, 0074 const double & z, 0075 const Energy & scale, 0076 const Energy & pT); 0077 //@} 0078 0079 /** 0080 * Members for the POWHEG stype correction 0081 */ 0082 //@{ 0083 /** 0084 * Has a POWHEG style correction 0085 */ 0086 virtual POWHEGType hasPOWHEGCorrection() {return Both;} 0087 0088 /** 0089 * Apply the POWHEG style correction 0090 */ 0091 virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, 0092 ShowerInteraction); 0093 //@} 0094 0095 public: 0096 0097 /** @name Virtual functions required by the MEBase class. */ 0098 //@{ 0099 /** 0100 * Return the scale associated with the last set phase space point. 0101 */ 0102 virtual Energy2 scale() const; 0103 0104 /** 0105 * The number of internal degrees of freedom used in the matrix 0106 * element. 0107 */ 0108 virtual int nDim() const; 0109 0110 /** 0111 * Generate internal degrees of freedom given nDim() uniform 0112 * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space 0113 * generator, the dSigHatDR should be a smooth function of these 0114 * numbers, although this is not strictly necessary. 0115 * @param r a pointer to the first of nDim() consecutive random numbers. 0116 * @return true if the generation succeeded, otherwise false. 0117 */ 0118 virtual bool generateKinematics(const double * r); 0119 0120 /** 0121 * Return the matrix element squared differential in the variables 0122 * given by the last call to generateKinematics(). 0123 */ 0124 virtual CrossSection dSigHatDR() const; 0125 //@} 0126 0127 0128 public: 0129 0130 /** @name Functions used by the persistent I/O system. */ 0131 //@{ 0132 /** 0133 * Function used to write out object persistently. 0134 * @param os the persistent output stream written to. 0135 */ 0136 void persistentOutput(PersistentOStream & os) const; 0137 0138 /** 0139 * Function used to read in object persistently. 0140 * @param is the persistent input stream read from. 0141 * @param version the version number of the object when written. 0142 */ 0143 void persistentInput(PersistentIStream & is, int version); 0144 //@} 0145 0146 /** 0147 * The standard Init function used to initialize the interfaces. 0148 * Called exactly once for each class by the class description system 0149 * before the main function starts or 0150 * when this class is dynamically loaded. 0151 */ 0152 static void Init(); 0153 0154 protected: 0155 0156 /** @name Standard Interfaced functions. */ 0157 //@{ 0158 /** 0159 * Initialize this object after the setup phase before saving an 0160 * EventGenerator to disk. 0161 * @throws InitException if object could not be initialized properly. 0162 */ 0163 virtual void doinit(); 0164 //@} 0165 0166 private: 0167 0168 /** 0169 * The assignment operator is private and must never be called. 0170 * In fact, it should not even be implemented. 0171 */ 0172 DISBase & operator=(const DISBase &) = delete; 0173 0174 protected: 0175 0176 /** 0177 * The NLO weight 0178 */ 0179 double NLOWeight() const; 0180 0181 /** 0182 * Calculate the coefficient A for the correlations 0183 */ 0184 virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout, 0185 Energy2 scale) const =0; 0186 0187 /** 0188 * Members for the matrix element correction 0189 */ 0190 //@{ 0191 /** 0192 * Generate the values of \f$x_p\f$ and \f$z_p\f$ 0193 * @param xp The value of xp, output 0194 * @param zp The value of zp, output 0195 */ 0196 double generateComptonPoint(double &xp, double & zp); 0197 0198 /** 0199 * Generate the values of \f$x_p\f$ and \f$z_p\f$ 0200 * @param xp The value of xp, output 0201 * @param zp The value of zp, output 0202 */ 0203 double generateBGFPoint(double &xp, double & zp); 0204 0205 /** 0206 * Return the coefficients for the matrix element piece for 0207 * the QCD compton case. The output is the \f$a_i\f$ coefficients to 0208 * give the function as 0209 * \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$ 0210 * @param xp \f$x_p\f$ 0211 * @param x2 \f$x_2\f$ 0212 * @param xperp \f$x_\perp\f$ 0213 * @param norm Normalise to the large $l$ value of the ME 0214 */ 0215 vector<double> ComptonME(double xp, double x2, double xperp, 0216 bool norm); 0217 0218 /** 0219 * Return the coefficients for the matrix element piece for 0220 * the QCD compton case. The output is the \f$a_i\f$ coefficients to 0221 * give the function as 0222 * \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$ 0223 * @param xp \f$x_p\f$ 0224 * @param x2 \f$x_3\f$ 0225 * @param x3 \f$x_2\f$ 0226 * @param xperp \f$x_\perp\f$ 0227 * @param norm Normalise to the large $l$ value of the ME 0228 */ 0229 vector<double> BGFME(double xp, double x2, double x3, double xperp, 0230 bool norm); 0231 //@} 0232 0233 /** 0234 * Members for the POWHEG correction 0235 */ 0236 //@{ 0237 /** 0238 * Generate a Compton process 0239 */ 0240 void generateCompton(); 0241 0242 /** 0243 * Generate a BGF process 0244 */ 0245 void generateBGF(); 0246 //@} 0247 0248 private: 0249 0250 /** 0251 * Parameters for the matrix element correction 0252 */ 0253 //@{ 0254 /** 0255 * Enchancement factor for ISR 0256 */ 0257 double initial_; 0258 0259 /** 0260 * Enchancement factor for FSR 0261 */ 0262 double final_; 0263 0264 /** 0265 * Relative fraction of compton and BGF processes to generate 0266 */ 0267 double procProb_; 0268 0269 /** 0270 * Integral for compton process 0271 */ 0272 double comptonInt_; 0273 0274 /** 0275 * Integral for BGF process 0276 */ 0277 double bgfInt_; 0278 //@} 0279 0280 /** 0281 * Parameters for the POWHEG correction 0282 */ 0283 //@{ 0284 /** 0285 * Weight for the compton channel 0286 */ 0287 double comptonWeight_; 0288 0289 /** 0290 * Weight for the BGF channel 0291 */ 0292 double BGFWeight_; 0293 0294 /** 0295 * Minimum value of \f$p_T\f$ 0296 */ 0297 Energy pTmin_; 0298 //@} 0299 0300 /** 0301 * Parameters for the point being generated 0302 */ 0303 //@{ 0304 /** 0305 * \f$Q^2\f$ 0306 */ 0307 Energy2 q2_; 0308 0309 /** 0310 * 0311 */ 0312 double l_; 0313 0314 /** 0315 * Borm momentum fraction 0316 */ 0317 double xB_; 0318 0319 /** 0320 * Beam particle 0321 */ 0322 tcBeamPtr beam_; 0323 0324 /** 0325 * Partons 0326 */ 0327 tcPDPtr partons_[2]; 0328 0329 /** 0330 * Leptons 0331 */ 0332 tcPDPtr leptons_[2]; 0333 0334 /** 0335 * PDF object 0336 */ 0337 tcPDFPtr pdf_; 0338 /** 0339 * Rotation to the Breit frame 0340 */ 0341 LorentzRotation rot_; 0342 0343 /** 0344 * Lepton momenta 0345 */ 0346 Lorentz5Momentum pl_[2]; 0347 0348 /** 0349 * Quark momenta 0350 */ 0351 Lorentz5Momentum pq_[2]; 0352 0353 /** 0354 * q 0355 */ 0356 Lorentz5Momentum q_; 0357 0358 /** 0359 * Compton parameters 0360 */ 0361 Energy pTCompton_; 0362 bool ComptonISFS_; 0363 vector<Lorentz5Momentum> ComptonMomenta_; 0364 0365 /** 0366 * BGF parameters 0367 */ 0368 Energy pTBGF_; 0369 vector<Lorentz5Momentum> BGFMomenta_; 0370 //@} 0371 0372 /** 0373 * The coefficient for the correlations 0374 */ 0375 double acoeff_; 0376 0377 /** 0378 * Coupling 0379 */ 0380 ShowerAlphaPtr alpha_; 0381 0382 /** 0383 * Gluon particle data object 0384 */ 0385 PDPtr gluon_; 0386 0387 private: 0388 0389 /** 0390 * The radiative variables 0391 */ 0392 //@{ 0393 /** 0394 * The \f$x_p\f$ or \f$z\f$ real integration variable 0395 */ 0396 double xp_; 0397 //@} 0398 0399 /** 0400 * The hadron 0401 */ 0402 tcBeamPtr hadron_; 0403 0404 /** 0405 * Selects a dynamic or fixed factorization scale 0406 */ 0407 unsigned int scaleOpt_; 0408 0409 /** 0410 * The factorization scale 0411 */ 0412 Energy muF_; 0413 0414 /** 0415 * Prefactor if variable scale used 0416 */ 0417 double scaleFact_; 0418 0419 /** 0420 * Whether to generate the positive, negative or leading order contribution 0421 */ 0422 unsigned int contrib_; 0423 0424 /** 0425 * Power for sampling \f$x_p\f$ 0426 */ 0427 double power_; 0428 0429 /** 0430 * Jacobian for \f$x_p\f$ integral 0431 */ 0432 double jac_; 0433 0434 }; 0435 0436 } 0437 0438 #endif /* HERWIG_DISBase_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|