Back to home page

EIC code displayed by LXR

 
 

    


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

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