Back to home page

EIC code displayed by LXR

 
 

    


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

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