Back to home page

EIC code displayed by LXR

 
 

    


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 */