Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEPP2HiggsVBFPowheg_H
0003 #define HERWIG_MEPP2HiggsVBFPowheg_H
0004 //
0005 // This is the declaration of the MEPP2HiggsVBFPowheg class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/Hadron/MEPP2HiggsVBF.h"
0009 
0010 namespace Herwig {
0011 
0012 using namespace ThePEG;
0013 
0014 /**
0015  * Here is the documentation of the MEPP2HiggsVBFPowheg class.
0016  *
0017  * @see \ref MEPP2HiggsVBFPowhegInterfaces "The interfaces"
0018  * defined for MEPP2HiggsVBFPowheg.
0019  */
0020 class MEPP2HiggsVBFPowheg: public Herwig::MEPP2HiggsVBF {
0021 
0022 public:
0023 
0024   /**
0025    * The default constructor.
0026    */
0027   MEPP2HiggsVBFPowheg();
0028 
0029   /** @name Virtual functions required by the MEBase class. */
0030   //@{
0031 
0032   /**
0033    * Return the scale associated with the last set phase space point.
0034    */
0035   virtual Energy2 scale() const;
0036 
0037   /**
0038    * The number of internal degrees of freedom used in the matrix
0039    * element.
0040    */
0041   virtual int nDim() const;
0042 
0043  /**
0044    * Generate internal degrees of freedom given nDim() uniform
0045    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
0046    * generator, the dSigHatDR should be a smooth function of these
0047    * numbers, although this is not strictly necessary.
0048    * @param r a pointer to the first of nDim() consecutive random numbers.
0049    * @return true if the generation succeeded, otherwise false.
0050    */
0051   virtual bool generateKinematics(const double * r);
0052 
0053   /**
0054    * Return the matrix element squared differential in the variables
0055    * given by the last call to generateKinematics().
0056    */
0057   virtual CrossSection dSigHatDR() const;
0058   //@}
0059 
0060 public:
0061 
0062   /** @name Functions used by the persistent I/O system. */
0063   //@{
0064   /**
0065    * Function used to write out object persistently.
0066    * @param os the persistent output stream written to.
0067    */
0068   void persistentOutput(PersistentOStream & os) const;
0069 
0070   /**
0071    * Function used to read in object persistently.
0072    * @param is the persistent input stream read from.
0073    * @param version the version number of the object when written.
0074    */
0075   void persistentInput(PersistentIStream & is, int version);
0076   //@}
0077 
0078   /**
0079    * The standard Init function used to initialize the interfaces.
0080    * Called exactly once for each class by the class description system
0081    * before the main function starts or
0082    * when this class is dynamically loaded.
0083    */
0084   static void Init();
0085 
0086 protected:
0087 
0088   /**
0089    *  The NLO weight
0090    */
0091   double NLOWeight() const;
0092 
0093   /**
0094    *  Leading order matrix element
0095    */
0096   Energy4 loMatrixElement(const Lorentz5Momentum &p1,
0097               const Lorentz5Momentum &p2,
0098               const Lorentz5Momentum &q1,
0099               const Lorentz5Momentum &q2,
0100               double G1, double G2) const;
0101 
0102 protected:
0103 
0104   /** @name Standard Interfaced functions. */
0105   //@{
0106   /**
0107    * Initialize this object after the setup phase before saving an
0108    * EventGenerator to disk.
0109    * @throws InitException if object could not be initialized properly.
0110    */
0111   virtual void doinit();
0112   //@}
0113 
0114 protected:
0115 
0116   /** @name Clone Methods. */
0117   //@{
0118   /**
0119    * Make a simple clone of this object.
0120    * @return a pointer to the new object.
0121    */
0122   virtual IBPtr clone() const;
0123 
0124   /** Make a clone of this object, possibly modifying the cloned object
0125    * to make it sane.
0126    * @return a pointer to the new object.
0127    */
0128   virtual IBPtr fullclone() const;
0129   //@}
0130 
0131 private:
0132 
0133   /**
0134    * The assignment operator is private and must never be called.
0135    * In fact, it should not even be implemented.
0136    */
0137   MEPP2HiggsVBFPowheg & operator=(const MEPP2HiggsVBFPowheg &) = delete;
0138 
0139 private:
0140 
0141   /**
0142    *  The Born variables
0143    */
0144   //@{
0145   /**
0146    *  \f$x_B\f$
0147    */
0148   double _xB;
0149 
0150   /**
0151    *  Partons
0152    */
0153   tcPDPtr _partons[5];
0154 
0155   mutable Energy2 _q2;
0156   //@}
0157 
0158   /**
0159    *  The radiative variables
0160    */
0161   //@{
0162   /**
0163    *  The \f$x_p\f$ or \f$z\f$ real integration variable
0164    */
0165   double  _xp;
0166 
0167   /**
0168    *  The \f$z_p\f$ real integration variable 
0169    */
0170   double _zp;
0171 
0172   /**
0173    *  The \f$fi\f$ real integration variable 
0174    */
0175   double _phi;
0176   //@}
0177 
0178   /**
0179    *  The variables to get the right boost
0180    */
0181   //@{
0182   /**
0183    *  LO momenta 
0184    */
0185   Lorentz5Momentum _loMomenta[4];
0186   /**
0187    *  The transfered (virtual boson) momentum 
0188    */
0189   mutable Lorentz5Momentum _pa;
0190 
0191   /**
0192    *  The incoming quark momentum 
0193    */
0194   mutable Lorentz5Momentum _pb;
0195 
0196   /**
0197    *  The outgoing quark momentum
0198    */
0199   Lorentz5Momentum _pc;
0200 
0201   /**
0202    *  The incoming quark momentum 
0203    */
0204   Lorentz5Momentum _pbother;
0205 
0206   /**
0207    *  The outgoing quark momentum
0208    */
0209   Lorentz5Momentum _pcother;
0210   //@}
0211 
0212   /**
0213    *  Electroweak parameters
0214    */
0215   //@{
0216   /**
0217    *  The square of the Z mass
0218    */
0219   Energy2 _mz2;
0220 
0221   /**
0222    *  The square of the W mass
0223    */
0224   Energy2 _mw2;
0225   //@}
0226 
0227   /**
0228    *  The first hadron
0229    */
0230   tcBeamPtr _hadron;
0231 
0232   /**
0233    * Selects a dynamic or fixed factorization scale
0234    */
0235   unsigned int scaleOpt_;
0236 
0237   /**
0238    * The factorization scale 
0239    */
0240   Energy muF_;
0241 
0242   /**
0243    *  Prefactor if variable scale used
0244    */
0245   double scaleFact_;
0246 
0247   /**
0248    *  Whether to generate the positive, negative or leading order contribution
0249    */
0250   unsigned int contrib_;
0251 
0252   /**
0253    *  Power for sampling \f$x_p\f$
0254    */
0255   double power_;
0256 
0257   /**
0258    *  Jacobian for \f$x_p\f$ integral
0259    */
0260   double jac_;
0261 
0262 
0263 };
0264 
0265 }
0266 
0267 #endif /* HERWIG_MEPP2HiggsVBFPowheg_H */