Back to home page

EIC code displayed by LXR

 
 

    


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