Back to home page

EIC code displayed by LXR

 
 

    


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

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