Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_GenericHGGVertex_H
0003 #define Herwig_GenericHGGVertex_H
0004 //
0005 // This is the declaration of the GenericHGGVertex class.
0006 //
0007 
0008 #include "VVSLoopVertex.h"
0009 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
0010 #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h"
0011 #include "ThePEG/Persistency/PersistentOStream.h"
0012 #include "ThePEG/Persistency/PersistentIStream.h"
0013 #include "ThePEG/Utilities/EnumIO.h"
0014 #include "ThePEG/PDT/ParticleData.h"
0015 #include "Herwig/Models/StandardModel/StandardModel.h"
0016 
0017 namespace Herwig {
0018 
0019 using namespace ThePEG;
0020 using namespace ThePEG::Helicity;
0021 
0022 /**
0023  * The GenericHGGVertex class implements the coupling of the Higgs boson to gluons
0024  * in a generic model using the other vertices coupling the Higgs boson
0025  * to coloured particles.
0026  *
0027  * @see \ref GenericHGGVertexInterfaces "The interfaces"
0028  * defined for GenericHGGVertex.
0029  */
0030 class GenericHGGVertex: public VVSLoopVertex {
0031 
0032 public:
0033 
0034   /**
0035    *  Struct to store the stuff needed for the vertices
0036    */
0037   struct Interaction {
0038 
0039     /**
0040      *  Constructor
0041      */
0042     Interaction(PDPtr in_particle=PDPtr(),SSSVertexPtr in_scalar=SSSVertexPtr(),
0043         FFSVertexPtr in_fermion=FFSVertexPtr()) 
0044       : particle(in_particle), scalar(in_scalar), fermion(in_fermion)
0045     {}
0046 
0047     /**
0048      *  The particle
0049      */
0050     PDPtr particle;
0051 
0052     /**
0053      *  The scalar vertex
0054      */
0055     SSSVertexPtr scalar;
0056 
0057     /**
0058      *  The fermion vertex
0059      */
0060     FFSVertexPtr fermion;
0061   };
0062 
0063 public:
0064 
0065   /**
0066    * The default constructor.
0067    */
0068   GenericHGGVertex();
0069 
0070   /** 
0071    * Calculate couplings
0072    *@param q2 Scale at which to evaluate coupling
0073    *@param part1 ParticleData pointer to first particle
0074    *@param part2 ParticleData pointer to first particle
0075    *@param part3 ParticleData pointer to first particle
0076    */
0077   virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3);
0078 
0079 public:
0080 
0081   /** @name Functions used by the persistent I/O system. */
0082   //@{
0083   /**
0084    * Function used to write out object persistently.
0085    * @param os the persistent output stream written to.
0086    */
0087   void persistentOutput(PersistentOStream & os) const;
0088 
0089   /**
0090    * Function used to read in object persistently.
0091    * @param is the persistent input stream read from.
0092    * @param version the version number of the object when written.
0093    */
0094   void persistentInput(PersistentIStream & is, int version);
0095   //@}
0096 
0097   /**
0098    * The standard Init function used to initialize the interfaces.
0099    * Called exactly once for each class by the class description system
0100    * before the main function starts or
0101    * when this class is dynamically loaded.
0102    */
0103   static void Init();
0104 
0105 protected:
0106 
0107   /** @name Clone Methods. */
0108   //@{
0109   /**
0110    * Make a simple clone of this object.
0111    * @return a pointer to the new object.
0112    */
0113   virtual IBPtr clone() const;
0114 
0115   /** Make a clone of this object, possibly modifying the cloned object
0116    * to make it sane.
0117    * @return a pointer to the new object.
0118    */
0119   virtual IBPtr fullclone() const;
0120   //@}
0121 
0122   /**
0123    * Initialize this object after the setup phase before saving and
0124    * EventGenerator to disk.
0125    * @throws InitException if object could not be initialized properly.
0126    */
0127   virtual void doinit();
0128 
0129 private:
0130 
0131   /**
0132    * The assignment operator is private and must never be called.
0133    * In fact, it should not even be implemented.
0134    */
0135   GenericHGGVertex & operator=(const GenericHGGVertex &) = delete;
0136 
0137 private:
0138 
0139   /**
0140    *  Initialize the vertex
0141    */
0142   void initializeVertex();
0143 
0144 private:
0145 
0146   /**
0147    *  The bosons to consider as particles
0148    */
0149   vector<PDPtr> bosons_;
0150 
0151   /**
0152    *  Has it been set up?
0153    */
0154   bool setup_;
0155 
0156   /**
0157    *  The vertices to use
0158    */
0159   map<cPDPtr,vector<Interaction> > vertices_;
0160   
0161   /**
0162    * The scale \f$q^2\f$ at which coupling was last evaluated
0163    */
0164   Energy2 q2Last_;
0165 
0166   /**
0167    * Last value of the coupling calculated
0168    */
0169   Complex coupLast_;
0170 
0171   /**
0172    *  Lasst id of the boson
0173    */
0174   long idLast_;
0175 
0176   /**
0177    *  The model for running masses
0178    */
0179   tcHwSMPtr model_;
0180 };
0181 
0182 /**
0183  *  Persistent output of the Interaction struct
0184  */
0185 inline PersistentOStream & operator<<(PersistentOStream & os, 
0186                       const GenericHGGVertex::Interaction  & x) {
0187   os << x.particle << x.scalar << x.fermion;
0188   return os;
0189 }
0190 
0191 /**
0192  *  Persistent input of the Interaction struct
0193  */
0194 inline PersistentIStream & operator>>(PersistentIStream & is,
0195                       GenericHGGVertex::Interaction & x) {
0196   is >> x.particle >> x.scalar >> x.fermion;
0197   return is;
0198 }
0199 
0200 }
0201 
0202 #endif /* Herwig_GenericHGGVertex_H */