Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:23

0001 // -*- C++ -*-
0002 //
0003 // VVSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation
0004 // Copyright (C) 2003-2019 Peter Richardson, Leif Lonnblad
0005 //
0006 // ThePEG 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 ThePEG_VVSVertex_H
0010 #define ThePEG_VVSVertex_H
0011 //
0012 // This is the declaration of the VVSVertex class.
0013 
0014 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0017 #include "VVSVertex.fh"
0018 
0019 namespace ThePEG {
0020 namespace Helicity {
0021 
0022 /** \ingroup Helicity
0023  *
0024  * The VVSVertex class is the implementation of the vector-vector-scalar.
0025  * It inherits from the AbstractVVSVertex class for the storage of the particles and
0026  * implements the helicity calculations.
0027  *
0028  * All interactions of this type should inherit from it and implement the virtual
0029  * setCoupling member.
0030  *
0031  *  The form of the vertex is
0032  *  \f[icg^{\mu\nu}\epsilon_{1\mu}\epsilon_{2\nu}\f]
0033  *
0034  * @see AbstractVVSVertex
0035  */
0036 class VVSVertex: public AbstractVVSVertex {
0037   
0038 public:
0039 
0040   /**
0041    * Standard Init function used to initialize the interfaces.
0042    */
0043   static void Init();
0044   
0045 public:
0046   
0047   /**
0048    * Members to calculate the helicity amplitude expressions for vertices
0049    * and off-shell particles.
0050    */
0051   //@{
0052   /**
0053    * Evaluate the vertex.
0054    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0055    * @param vec1 The wavefunction for the first  vector.
0056    * @param vec2 The wavefunction for the second vector.
0057    * @param sca3 The wavefunction for the scalar.
0058    */
0059   Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1,
0060            const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3);
0061 
0062   /**
0063    * Evaluate the off-shell vector coming from the vertex.
0064    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0065    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0066    * @param out The ParticleData pointer for the off-shell vector.
0067    * @param vec2 The wavefunction for the vector.
0068    * @param sca3 The wavefunction for the scalar.
0069    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0070    * object
0071    * @param width The width of the off-shell particle if not taken from the ParticleData
0072    * object
0073    */
0074   VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0075                   const VectorWaveFunction & vec2,
0076                   const ScalarWaveFunction & sca3,
0077                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0078 
0079   /**
0080    * Evaluate the off-shell scalar coming from the vertex.
0081    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0082    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0083    * @param out The ParticleData pointer for the off-shell scalar.
0084    * @param vec1 The wavefunction for the first  vector.
0085    * @param vec2 The wavefunction for the second vector.
0086    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0087    * object
0088    * @param width The width of the off-shell particle if not taken from the ParticleData
0089    * object
0090    */
0091   ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0092                   const VectorWaveFunction & vec1,
0093                   const VectorWaveFunction & vec2,
0094                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0095   //@}
0096 
0097   /**
0098    *   Set coupling methods
0099    */
0100   //@{
0101   /**
0102    * Calculate the couplings for a three point interaction.
0103    * This method is virtual and must be implemented in 
0104    * classes inheriting from this.
0105    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0106    * @param part1 The ParticleData pointer for the first  particle.
0107    * @param part2 The ParticleData pointer for the second particle.
0108    * @param part3 The ParticleData pointer for the third  particle.
0109    */
0110   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0111                tcPDPtr part2,tcPDPtr part3)=0;
0112 
0113   /**
0114    * Dummy setCouplings for a four point interaction 
0115    * This method is virtual and must be implemented in 
0116    * classes inheriting from this.
0117    */
0118   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0119     assert(false);
0120   }
0121   //@}
0122   
0123 private:
0124   
0125   /**
0126    * Private and non-existent assignment operator.
0127    */
0128   VVSVertex & operator=(const VVSVertex &) = delete;
0129   
0130 };
0131 
0132 }
0133 
0134 }
0135 #endif /* ThePEG_VVSVertex_H */