Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // DipolePKOperator.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_DipolePKOperator_H
0010 #define HERWIG_DipolePKOperator_H
0011 //
0012 // This is the declaration of the DipolePKOperator class.
0013 //
0014 
0015 #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h"
0016 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h"
0017 #include "ThePEG/PDF/PDF.h"
0018 
0019 namespace Herwig {
0020 
0021 using namespace ThePEG;
0022 
0023 /**
0024  * \ingroup Matchbox
0025  * \author Simon Platzer, Christian Reuschle
0026  *
0027  * \brief DipolePKOperator implements the P+K
0028  * insertion operator.
0029  *
0030  */
0031 class DipolePKOperator: public MatchboxInsertionOperator {
0032 
0033 public:
0034 
0035   /** @name Standard constructors and destructors. */
0036   //@{
0037   /**
0038    * The default constructor.
0039    */
0040   DipolePKOperator();
0041 
0042   /**
0043    * The destructor.
0044    */
0045   virtual ~DipolePKOperator();
0046   //@}
0047 
0048 public:
0049 
0050   /**
0051    * Set the XComb object steering the Born matrix
0052    * element this class represents virtual corrections to.
0053    */
0054   virtual void setXComb(tStdXCombPtr xc);
0055   
0056   /**
0057    * Set parameters for new alpha parameter.
0058    */
0059   virtual void setAlpha (double alpha)const;
0060 
0061   /**
0062    * Return the number of additional random variables
0063    * needed to calculate this virtual correction.
0064    * We treat all integrations on equal footing.
0065    */
0066   virtual int nDimAdditional() const { return 1; }
0067 
0068   /**
0069    * Return a vector of PDG codes of the light flavours,
0070    * which are contained in the jet particle group.
0071    */
0072   vector<int> NLightJetVec() const;
0073 
0074   /**
0075    * Return a vector of PDG codes of the heavy flavours,
0076    * which are contained in the jet particle group.
0077    */
0078   vector<int> NHeavyJetVec() const;
0079 
0080   /**
0081    * Return a vector of PDG codes of the light flavours,
0082    * which are contained in the associated Born sub-process.
0083    */
0084   vector<int> NLightBornVec() const;
0085 
0086   /**
0087    * Return a vector of PDG codes of the heavy flavours,
0088    * which are contained in the associated Born sub-process.
0089    */
0090   vector<int> NHeavyBornVec() const;
0091 
0092   /**
0093    * Return a vector of PDG codes of the light flavours,
0094    * which are contained in the proton particle group.
0095    */
0096   vector<int> NLightProtonVec() const;
0097 
0098   /**
0099    * Evaluate the finite virtual correction for the
0100    * variables supplied through the Born XComb object
0101    * and possible additional random numbers.
0102    */
0103   virtual double me2() const;
0104 
0105   /**
0106    * Evaluate the finite virtual correction for the
0107    * variables supplied through the Born XComb object
0108    * and possible additional random numbers.
0109    */
0110   virtual CrossSection dSigHatDR() const { 
0111     return sqr(hbarc) * me2() * lastBorn()->lastXComb().jacobian() / (2.*lastSHat());
0112   }
0113 
0114 public:
0115 
0116   /**
0117    * Return true, if contributions exist to
0118    * the given parton.
0119    */
0120   bool apply(tcPDPtr) const;
0121 
0122   /**
0123    * Return true, if this virtual correction
0124    * applies to the given process.
0125    */
0126   virtual bool apply(const cPDVector&) const;
0127 
0128   /**
0129    * The initial-final contribution
0130    */
0131   double gammaSoft() const;
0132 
0133   /**
0134    * [(1/(1-z))*ln((1-z)/z)]_+
0135    */
0136   double softLogByz(tcPDPtr p) const;
0137 
0138   /**
0139    * [(1/(1-z))*ln((1-z))]_+
0140    */
0141   double softLog(tcPDPtr p) const;
0142 
0143   /**
0144    * The Kbar^{qq} contribution
0145    */
0146   double KBarqq() const;
0147 
0148   /**
0149    * The Ktilde^{qq} contribution
0150    */
0151   double KTildeqq() const;
0152 
0153   /**
0154    * The P^{qq} contribution
0155    */
0156   double Pqq() const;
0157 
0158   /**
0159    * The Kbar^{qg} contribution
0160    */
0161   double KBarqg() const;
0162 
0163   /**
0164    * The Ktilde^{qg} contribution
0165    */
0166   double KTildeqg() const;
0167 
0168   /**
0169    * The P^{qg} contribution
0170    */
0171   double Pqg() const;
0172 
0173   /**
0174    * The Kbar^{gq} contribution
0175    */
0176   double KBargq() const;
0177 
0178   /**
0179    * The Ktilde^{gq} contribution
0180    */
0181   double KTildegq() const;
0182 
0183   /**
0184    * The P^{gq} contribution
0185    */
0186   double Pgq() const;
0187 
0188   /**
0189    * The Kbar^{gg} contribution
0190    */
0191   double KBargg() const;
0192 
0193   /**
0194    * The Ktilde^{gg} contribution
0195    */
0196   double KTildegg() const;
0197 
0198   /**
0199    * The P^{gg} contribution
0200    */
0201   double Pgg() const;
0202 
0203   /**
0204    * Get all contributions for the indicated incoming parton.
0205    */
0206   double sumParton(int id) const;
0207 
0208 public:
0209 
0210   /** @name Functions used by the persistent I/O system. */
0211   //@{
0212   /**
0213    * Function used to write out object persistently.
0214    * @param os the persistent output stream written to.
0215    */
0216   void persistentOutput(PersistentOStream & os) const;
0217 
0218   /**
0219    * Function used to read in object persistently.
0220    * @param is the persistent input stream read from.
0221    * @param version the version number of the object when written.
0222    */
0223   void persistentInput(PersistentIStream & is, int version);
0224   //@}
0225 
0226   /**
0227    * The standard Init function used to initialize the interfaces.
0228    * Called exactly once for each class by the class description system
0229    * before the main function starts or
0230    * when this class is dynamically loaded.
0231    */
0232   static void Init();
0233 
0234 protected:
0235 
0236   /** @name Clone Methods. */
0237   //@{
0238   /**
0239    * Make a simple clone of this object.
0240    * @return a pointer to the new object.
0241    */
0242   virtual IBPtr clone() const;
0243 
0244   /** Make a clone of this object, possibly modifying the cloned object
0245    * to make it sane.
0246    * @return a pointer to the new object.
0247    */
0248   virtual IBPtr fullclone() const;
0249   //@}
0250 
0251 private:
0252 
0253   /**
0254    * C_A
0255    */
0256   double CA;
0257 
0258   /**
0259    * C_F
0260    */
0261   double CF;
0262 
0263   /**
0264    * \gamma_q
0265    */
0266   double gammaQuark;
0267 
0268   /**
0269    * \gamma_g
0270    */
0271   double gammaGluon;
0272 
0273   /**
0274    * K_q
0275    */
0276   mutable double KQuark;
0277 
0278   /**
0279    * K_g
0280    */
0281   mutable  double KGluon;
0282 
0283   /**
0284    * The scale to be used.
0285    */
0286   mutable Energy2 scale;
0287 
0288   /**
0289    * The PDF to be used.
0290    */
0291   mutable tcPDFPtr pdf;
0292 
0293   /**
0294    * The incoming parton type considered.
0295    */
0296   mutable tcPDPtr particle;
0297 
0298   /**
0299    * The x to be used.
0300    */
0301   mutable double x;
0302 
0303   /**
0304    * The convolution variable to be used.
0305    */
0306   mutable double z;
0307 
0308   /**
0309    * Cache PDFs evaluated at x and x/z
0310    */
0311   mutable map<pair<tcPDFPtr,tcPDPtr>,pair<double,double> > pdfCache;
0312 
0313   /**
0314    * The currently considered incoming parton.
0315    */
0316   mutable tcPDPtr parton;
0317 
0318   /**
0319    * Get a PDF value at x
0320    */
0321   double PDFx(tcPDPtr) const;
0322 
0323   /**
0324    * Get a PDF value at x/z
0325    */
0326   double PDFxByz(tcPDPtr) const;
0327 
0328 private:
0329 
0330   /**
0331    * The assignment operator is private and must never be called.
0332    * In fact, it should not even be implemented.
0333    */
0334   DipolePKOperator & operator=(const DipolePKOperator &) = delete;
0335 
0336 };
0337 
0338 }
0339 
0340 #endif /* HERWIG_DipolePKOperator_H */