Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // SMHPPVertex.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_SMHPPVertex_H
0010 #define HERWIG_SMHPPVertex_H
0011 //
0012 // This is the declaration of the SMHPPVertex class.
0013 //
0014 
0015 #include "Herwig/Models/General/VVSLoopVertex.h"
0016 #include "Herwig/Models/StandardModel/StandardModel.h"
0017 #include "ThePEG/PDT/EnumParticles.h"
0018 
0019 namespace Herwig {
0020 using namespace ThePEG;
0021 
0022 /**
0023  * The <code>SMHGGVertex</code> class implements the 
0024  * setCoupling member for the Standard Model effective 
0025  * vertex Higgs-gamma-gamma. 
0026  */
0027 class SMHPPVertex: public VVSLoopVertex {
0028 
0029 public:
0030 
0031   /** @name Standard constructors and destructors. */
0032   //@{
0033   /**
0034    * The default constructor.
0035    */
0036   SMHPPVertex();
0037   //@}
0038 
0039   /** @name Functions used by the persistent I/O system. */
0040   //@{
0041   /**
0042    * Function used to write out object persistently.
0043    * @param os the persistent output stream written to.
0044    */
0045   void persistentOutput(PersistentOStream & os) const;
0046 
0047   /**
0048    * Function used to read in object persistently.
0049    * @param is the persistent input stream read from.
0050    * @param version the version number of the object when written.
0051    */
0052   void persistentInput(PersistentIStream & is, int version);
0053   //@}
0054 
0055   /**
0056    * The standard Init function used to initialize the interfaces.
0057    * Called exactly once for each class by the class description system
0058    * before the main function starts or
0059    * when this class is dynamically loaded.
0060    */
0061   static void Init();
0062 
0063   /**
0064    * Calculate couplings
0065    *@param q2 Scale at which to evaluate coupling
0066    *@param part1 ParticleData pointer to first particle
0067    *@param part2 ParticleData pointer to second particle
0068    *@param part3 ParticleData pointer to third particle
0069    */
0070   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
0071                tcPDPtr part3);
0072 
0073 protected:
0074   /** @name Clone Methods. */
0075   //@{
0076   /**
0077    * Make a simple clone of this object.
0078    * @return a pointer to the new object.
0079    */
0080   virtual IBPtr clone() const {return new_ptr(*this);}
0081 
0082   /** Make a clone of this object, possibly modifying the cloned object
0083    * to make it sane.
0084    * @return a pointer to the new object.
0085    */
0086   virtual IBPtr fullclone() const {return new_ptr(*this);}
0087   //@}
0088 
0089   /**
0090    * Initialize this object after the setup phase before saving and
0091    * EventGenerator to disk.
0092    * @throws InitException if object could not be initialized properly.
0093    */
0094   virtual void doinit();
0095 
0096 private:
0097   /**
0098    * The assignment operator is private and must never be called.
0099    * In fact, it should not even be implemented.
0100    */
0101   SMHPPVertex & operator=(const SMHPPVertex &) = delete;
0102 
0103 private:
0104   
0105   /**
0106    * Loop calculations: A1 for spin-1/2 particles (see details in ``Higgs Hunter's Guide'')
0107    */
0108   Complex Af(const double lambda) const;
0109 
0110   /**
0111    * Loop calculations: A1 for spin-1 particles (see details in ``Higgs Hunter's Guide'')
0112    */
0113   Complex Aw(const double lambda) const;
0114 
0115   /**
0116    * Loop calculations: W2 function (see details in NPB297,221)
0117    */
0118   Complex W2(double lambda) const;
0119 
0120 private:
0121 
0122   /**
0123    *Storage of couplings
0124    */
0125   //@{
0126   /**
0127    * Last value of the coupling calculated
0128    */
0129   Complex _couplast;
0130 
0131   /**
0132    * The scale \f$q^2\f$ at which coupling was last evaluated
0133    */
0134   Energy2 _q2last;
0135   //@}
0136 
0137   /**
0138    * Pointer to Standard Model object
0139    */
0140   tcHwSMPtr _theSM;
0141 
0142   /**
0143    * The mass of the \f$W\f$ boson.
0144    */
0145   Energy _mw;
0146 
0147   /**
0148    * define quark mass scheme (fixed/running)
0149    */
0150   unsigned int _massopt;
0151 
0152   /**
0153    * The minimum flavour number in quark loops
0154    */
0155   int _minloop;
0156 
0157   /**
0158    * The maximum flavour number in quark loops
0159    */
0160   int _maxloop;
0161 
0162   /**
0163    * Switch between two representations of coefficients (_a00,_a11,_a12,_a21,_a22,_aEp):
0164    * suitable for the simplified H-g-g and H-gamma-gamma vertices and 
0165    * suitable for the Passarino-Veltman tensor reduction scheme
0166    */
0167   unsigned int _CoefRepresentation;
0168 
0169 };
0170 }
0171 
0172 
0173 #endif /* HERWIG_SMHPPVertex_H */