Back to home page

EIC code displayed by LXR

 
 

    


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

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