Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // MatchboxInsertionOperator.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_MatchboxInsertionOperator_H
0010 #define HERWIG_MatchboxInsertionOperator_H
0011 //
0012 // This is the declaration of the MatchboxInsertionOperator class.
0013 //
0014 
0015 #include "ThePEG/Handlers/HandlerBase.h"
0016 #include "ThePEG/Handlers/StandardXComb.h"
0017 #include "ThePEG/Handlers/LastXCombInfo.h"
0018 #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.fh"
0019 #include "Herwig/MatrixElement/Matchbox/Utility/LastMatchboxXCombInfo.h"
0020 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.fh"
0021 #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.fh"
0022 
0023 namespace Herwig {
0024 
0025 using namespace ThePEG;
0026 
0027 /**
0028  * \ingroup Matchbox
0029  * \author Simon Platzer
0030  *
0031  * \brief MatchboxInsertionOperator is the base class for insertion operators.
0032  *
0033  * @see \ref MatchboxInsertionOperatorInterfaces "The interfaces"
0034  * defined for MatchboxInsertionOperator.
0035  */
0036 class MatchboxInsertionOperator: 
0037     public HandlerBase, 
0038     public LastXCombInfo<StandardXComb>,
0039     public LastMatchboxXCombInfo {
0040 
0041 public:
0042 
0043   /** @name Standard constructors and destructors. */
0044   //@{
0045   /**
0046    * The default constructor.
0047    */
0048   MatchboxInsertionOperator();
0049 
0050   /**
0051    * The destructor.
0052    */
0053   virtual ~MatchboxInsertionOperator();
0054   //@}
0055 
0056 public:
0057 
0058   /**
0059    * Return the factory which produced this matrix element
0060    */
0061   Ptr<MatchboxFactory>::tptr factory() const;
0062 
0063   /** @name Process and phasespace information */
0064   //@{
0065 
0066   /**
0067    * Return true, if this virtual correction
0068    * applies to the given process.
0069    */
0070   virtual bool apply(const cPDVector&) const = 0;
0071 
0072   /**
0073    * Return the Born matrix element this class represents 
0074    * virtual corrections to.
0075    */
0076   Ptr<MatchboxMEBase>::tptr lastBorn() const ;
0077 
0078   /**
0079    * Set the XComb object steering the Born matrix
0080    * element this class represents virtual corrections to.
0081    */
0082   virtual void setXComb(tStdXCombPtr xc) { 
0083     theLastXComb = xc;
0084     lastMatchboxXComb(xc);
0085   }
0086       
0087       
0088   /**
0089    * Set parameters for new alpha parameter.
0090    */
0091   virtual void setAlpha(double )const {assert(false);}
0092   
0093     
0094 
0095   /**
0096    * Return the number of additional random variables
0097    * needed to calculate this virtual correction.
0098    */
0099   virtual int nDimAdditional() const { return 0; }
0100 
0101   //@}
0102 
0103   /** @name Conventions */
0104   //@{
0105 
0106 
0107   /**
0108    * Return true, if the amplitude is DRbar renormalized, otherwise
0109    * MSbar is assumed.
0110    */
0111       virtual bool isDRbar() const;
0112   /**
0113    * Return true, if this virtual correction
0114    * has been calculated using dimensional reduction.
0115    * CDR is assumed otherwise.
0116    */
0117       virtual bool isDR() const;
0118   /**
0119    * Return true, if the virtual correction has been calculated in the
0120    * dipole convention.
0121    */
0122       virtual bool isCS() const;
0123   /**
0124    * Return true, if the virtual correction has been calculated in the
0125    * BDK convention.
0126    */
0127       virtual bool isBDK() const;
0128   /**
0129    * Return true, if the virtual correction has been calculated in the
0130    * expanded convention.
0131    */
0132       virtual bool isExpanded() const;
0133   /**
0134    * If defined, return the coefficient of the pole in epsilon^2
0135    */
0136   virtual double oneLoopDoublePole() const { return 0.; }
0137 
0138   /**
0139    * If defined, return the coefficient of the pole in epsilon
0140    */
0141   virtual double oneLoopSinglePole() const { return 0.; }
0142 
0143   //@}
0144 
0145   /** @name Evaluate the insertion operator */
0146   //@{
0147 
0148   /**
0149    * Evaluate the finite virtual correction for the
0150    * variables supplied through the Born XComb object
0151    * and possible additional random numbers.
0152    */
0153   virtual double me2() const = 0;
0154 
0155   /**
0156    * Evaluate the finite virtual correction for the
0157    * variables supplied through the Born XComb object
0158    * and possible additional random numbers.
0159    */
0160   virtual CrossSection dSigHatDR() const;
0161       
0162       
0163   /**
0164    * Evaluate the difference of dSigHatDR with and without alpha 
0165    * parameter.
0166    */
0167   virtual CrossSection dSigHatDRAlphaDiff(double alpha) const{
0168     setAlpha(alpha);
0169     CrossSection res=dSigHatDR();
0170     setAlpha(1.);
0171     return res-dSigHatDR();
0172   }
0173 
0174   //@}
0175 
0176   /** @name Caching and helpers to setup insertion operator objects. */
0177   //@{
0178 
0179   /**
0180    * Inform this matrix element that a new phase space
0181    * point is about to be generated, so all caches should
0182    * be flushed.
0183    */
0184   virtual void flushCaches() {}
0185 
0186   /**
0187    * Clone this insertion operator.
0188    */
0189   Ptr<MatchboxInsertionOperator>::ptr cloneMe() const {
0190     return dynamic_ptr_cast<Ptr<MatchboxInsertionOperator>::ptr>(clone());
0191   }
0192 
0193   /**
0194    * Clone the dependencies, using a given prefix.
0195    */
0196   virtual void cloneDependencies(const std::string& prefix = "");
0197 
0198   //@}
0199 
0200 public:
0201 
0202   /** @name Functions used by the persistent I/O system. */
0203   //@{
0204   /**
0205    * Function used to write out object persistently.
0206    * @param os the persistent output stream written to.
0207    */
0208   void persistentOutput(PersistentOStream & os) const;
0209 
0210   /**
0211    * Function used to read in object persistently.
0212    * @param is the persistent input stream read from.
0213    * @param version the version number of the object when written.
0214    */
0215   void persistentInput(PersistentIStream & is, int version);
0216   //@}
0217 
0218   /**
0219    * The standard Init function used to initialize the interfaces.
0220    * Called exactly once for each class by the class description system
0221    * before the main function starts or
0222    * when this class is dynamically loaded.
0223    */
0224   static void Init();
0225 
0226 
0227 // If needed, insert declarations of virtual function defined in the
0228 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0229 
0230 private:
0231 
0232   /**
0233    * The assignment operator is private and must never be called.
0234    * In fact, it should not even be implemented.
0235    */
0236   MatchboxInsertionOperator & operator=(const MatchboxInsertionOperator &) = delete;
0237 
0238 };
0239 
0240 }
0241 
0242 #endif /* HERWIG_MatchboxInsertionOperator_H */