Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_VVSLoopVertex_H
0003 #define HERWIG_VVSLoopVertex_H
0004 // // This is the declaration of the VVSLoopVertex class.
0005 //
0006 
0007 #include "ThePEG/Helicity/Vertex/Scalar/GeneralVVSVertex.h"
0008 #include "VVSLoopVertex.fh"
0009  
0010 namespace Herwig {
0011 using namespace ThePEG;
0012 
0013 /**
0014  * The <code>VVSLoopVertex</code> is designed to
0015  * calculate the coefficents for the terms in the
0016  * Passarino-Veltman tensor reduction scheme. A vertex
0017  * class should inherit from this and implement it's own 
0018  * setCoupling member from which the VVSLoopVertex  
0019  * setCoupling member is called.
0020  */
0021 class VVSLoopVertex: public Helicity::GeneralVVSVertex {
0022 
0023 public:
0024 
0025   /**
0026    * The default constructor.
0027    */
0028   VVSLoopVertex() : masses(0), type(0), couplings(0), Npart_(0), loopToolsInit_(false) {
0029     kinematics(true);
0030   }
0031 
0032   /** 
0033    * Calculate couplings
0034    *@param q2 Scale at which to evaluate coupling
0035    *@param part1 ParticleData pointer to first particle
0036    *@param part2 ParticleData pointer to first particle
0037    *@param part3 ParticleData pointer to first particle
0038    */
0039   virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,
0040                tcPDPtr part3);
0041 
0042 public:
0043 
0044   /** @name Functions used by the persistent I/O system. */
0045   //@{
0046   /**
0047    * Function used to write out object persistently.
0048    * @param os the persistent output stream written to.
0049    */
0050   void persistentOutput(PersistentOStream & os) const;
0051 
0052   /**
0053    * Function used to read in object persistently.
0054    * @param is the persistent input stream read from.
0055    * @param version the version number of the object when written.
0056    */
0057   void persistentInput(PersistentIStream & is, int version);
0058   //@}
0059 
0060   /**
0061    * The standard Init function used to initialize the interfaces.
0062    * Called exactly once for each class by the class description system
0063    * before the main function starts or
0064    * when this class is dynamically loaded.
0065    */
0066   static void Init();
0067 
0068 protected:
0069 
0070   /** @name Clone Methods. */
0071   //@{
0072   /**
0073    * Make a simple clone of this object.
0074    * @return a pointer to the new object.
0075    */
0076   virtual IBPtr clone() const;
0077 
0078   /** Make a clone of this object, possibly modifying the cloned object
0079    * to make it sane.
0080    * @return a pointer to the new object.
0081    */
0082   virtual IBPtr fullclone() const;
0083   //@}
0084 
0085 protected:
0086 
0087   /** @name Standard Interfaced functions. */
0088   //@{
0089   /**
0090    * Finalize this object. Called in the run phase just after a
0091    * run has ended. Used eg. to write out statistics.
0092    */
0093   virtual void dofinish();
0094   //@}
0095 
0096 protected:
0097   
0098   /**
0099    * Vector of loop masses
0100    */
0101   vector<Energy> masses;
0102   
0103   /**
0104    * Vector of loop types
0105    */
0106   vector<PDT::Spin> type;
0107 
0108   /**
0109    * The left and right couplings for a fermion loop 
0110    */
0111   vector<pair<Complex, Complex> > couplings;
0112 
0113   /**
0114    * Set the number of particles in the loop 
0115    */
0116   void setNParticles(unsigned int npart) { Npart_ = npart; }
0117 
0118   /**
0119    *  Is loopTools initialized
0120    */
0121   bool loopToolsInitialized() { return loopToolsInit_; }
0122 
0123 private:
0124 
0125   /**
0126    * The assignment operator is private and must never be called.
0127    * In fact, it should not even be implemented.
0128    */
0129   VVSLoopVertex & operator=(const VVSLoopVertex &) = delete;
0130 
0131 private:
0132   
0133   /**
0134    * The number of particles in the loop 
0135    */
0136   unsigned int Npart_;
0137 
0138   /**
0139    *  Loop tools initialised ?
0140    */
0141   bool loopToolsInit_;
0142 
0143 };
0144 
0145 }
0146 
0147 #endif /* HERWIG_VVSLoopVertex_H */