Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:16

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