Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // DipoleIOperator.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_DipoleIOperator_H
0010 #define HERWIG_DipoleIOperator_H
0011 //
0012 // This is the declaration of the DipoleIOperator class.
0013 //
0014 
0015 #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h"
0016 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h"
0017 
0018 namespace Herwig {
0019 
0020 using namespace ThePEG;
0021 
0022 /**
0023  * \ingroup Matchbox
0024  * \author Simon Platzer, Christian Reuschle
0025  *
0026  * \brief DipoleIOperator implements the I(\epsilon)
0027  * insertion operator.
0028  *
0029  */
0030 class DipoleIOperator: public MatchboxInsertionOperator {
0031 
0032 public:
0033 
0034   /** @name Standard constructors and destructors. */
0035   //@{
0036   /**
0037    * The default constructor.
0038    */
0039   DipoleIOperator();
0040 
0041   /**
0042    * The destructor.
0043    */
0044   virtual ~DipoleIOperator();
0045   //@}
0046 
0047 public:
0048 
0049   /**
0050    * Set the XComb object steering the Born matrix
0051    * element this class represents virtual corrections to.
0052    */
0053   virtual void setXComb(tStdXCombPtr xc);
0054   
0055   /**
0056    * Set parameters for new alpha parameter.
0057    */
0058   virtual void setAlpha (double alpha)const;
0059 
0060   /**
0061    * Return true, if this virtual correction
0062    * applies to the given process.
0063    */
0064   virtual bool apply(const cPDVector&) const;
0065 
0066   /**
0067    * Return true, if contributions exist to
0068    * the given parton.
0069    */
0070   bool apply(tcPDPtr) const;
0071 
0072   /**
0073    * Return a vector of PDG codes of the light flavours,
0074    * which are contained in the jet particle group.
0075    */
0076   vector<int> NLightJetVec() const;
0077 
0078   /**
0079    * Return a vector of PDG codes of the heavy flavours,
0080    * which are contained in the jet particle group.
0081    */
0082   vector<int> NHeavyJetVec() const;
0083 
0084   /**
0085    * Return a vector of PDG codes of the light flavours,
0086    * which are contained in the associated Born sub-process.
0087    */
0088   vector<int> NLightBornVec() const;
0089 
0090   /**
0091    * Return a vector of PDG codes of the heavy flavours,
0092    * which are contained in the associated Born sub-process.
0093    */
0094   vector<int> NHeavyBornVec() const;
0095 
0096   /**
0097    * Return a vector of PDG codes of the light flavours,
0098    * which are contained in the proton particle group.
0099    */
0100   vector<int> NLightProtonVec() const;
0101 
0102   /**
0103    * Evaluate the finite virtual correction for the
0104    * variables supplied through the Born XComb object
0105    * and possible additional random numbers.
0106    */
0107   virtual double me2() const;
0108 
0109   /**
0110    * If defined, return the coefficient of the pole in epsilon^2
0111    */
0112   virtual double oneLoopDoublePole() const;
0113 
0114   /**
0115    * If defined, return the coefficient of the pole in epsilon
0116    */
0117   virtual double oneLoopSinglePole() const;
0118 
0119 public:
0120 
0121   /** @name Functions used by the persistent I/O system. */
0122   //@{
0123   /**
0124    * Function used to write out object persistently.
0125    * @param os the persistent output stream written to.
0126    */
0127   void persistentOutput(PersistentOStream & os) const;
0128 
0129   /**
0130    * Function used to read in object persistently.
0131    * @param is the persistent input stream read from.
0132    * @param version the version number of the object when written.
0133    */
0134   void persistentInput(PersistentIStream & is, int version);
0135   //@}
0136 
0137   /**
0138    * The standard Init function used to initialize the interfaces.
0139    * Called exactly once for each class by the class description system
0140    * before the main function starts or
0141    * when this class is dynamically loaded.
0142    */
0143   static void Init();
0144 
0145 protected:
0146 
0147   /** @name Clone Methods. */
0148   //@{
0149   /**
0150    * Make a simple clone of this object.
0151    * @return a pointer to the new object.
0152    */
0153   virtual IBPtr clone() const;
0154 
0155   /** Make a clone of this object, possibly modifying the cloned object
0156    * to make it sane.
0157    * @return a pointer to the new object.
0158    */
0159   virtual IBPtr fullclone() const;
0160   //@}
0161 
0162 private:
0163 
0164   /**
0165    * C_A
0166    */
0167   double CA;
0168 
0169   /**
0170    * C_F
0171    */
0172   double CF;
0173 
0174   /**
0175    * \gamma_q
0176    */
0177   double gammaQuark;
0178 
0179   /**
0180    * \gamma_g
0181    */
0182   double gammaGluon;
0183 
0184   /**
0185    * \beta_0
0186    */
0187   double betaZero;
0188 
0189   /**
0190    * K_q
0191    */
0192   mutable double KQuark;
0193 
0194   /**
0195    * K_g
0196    */
0197   mutable double KGluon;
0198 
0199 private:
0200 
0201   /**
0202    * The assignment operator is private and must never be called.
0203    * In fact, it should not even be implemented.
0204    */
0205   DipoleIOperator & operator=(const DipoleIOperator &) = delete;
0206 
0207 };
0208 
0209 }
0210 
0211 #endif /* HERWIG_DipoleIOperator_H */