Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // VVTVertex.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_VVTVertex_H
0010 #define ThePEG_VVTVertex_H
0011 //
0012 // This is the declaration of the VVTVertex class.
0013 
0014 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
0017 #include "VVTVertex.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-tensor vertex. 
0026  *  It inherits from the AbstractVVTVertex 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  *    \left[m^2_v+k_1\cdot k_2)C_{\mu\nu,\rho\sigma}+D_{\mu\nu,\rho\sigma}\right]
0035  *    \epsilon_1^\rho\epsilon_2^\sigma \epsilon_3^{\mu\nu}
0036  *  \f]
0037  *  where
0038  * - \f$C_{\mu\nu,\rho\sigma}=g_{\mu\rho}g_{\nu\sigma}+g_{\mu\sigma}g_{\nu\rho}
0039  *         -g_{\mu\nu}g_{\rho\sigma}\f$
0040  * - \f$D_{\mu\nu,\rho\sigma}=
0041  *    g_{\mu\nu}k_{1\sigma}k_{2\rho}-\left[g_{\mu\sigma}k_{1\nu}k_{2\rho}+g_{\mu\rho}k_{1\sigma}k_{2\nu}-g_{\rho\sigma}k_{1\mu}k_{2\nu}+(\mu\leftrightarrow\nu)\right]
0042  *   \f$
0043  *
0044  *  @see AbstractVVTVertex
0045  */
0046 class VVTVertex: public AbstractVVTVertex {
0047   
0048 public:
0049 
0050   /**
0051    * Standard Init function used to initialize the interfaces.
0052    */
0053   static void Init();
0054   
0055 public:
0056 
0057   /**
0058    * Members to calculate the helicity amplitude expressions for vertices
0059    * and off-shell particles.
0060    */
0061   //@{
0062   /**
0063    * Evalulate the vertex.
0064    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0065    * @param vec1  The wavefunction for the first  vector.
0066    * @param vec2  The wavefunction for the second vector.
0067    * @param ten3  The wavefunction for the tensor.
0068    * @param vmass The mass of the vector boson.
0069    */
0070   Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1,
0071            const VectorWaveFunction & vec2,
0072            const TensorWaveFunction & ten3,
0073            Energy vmass=-GeV);
0074 
0075   /**
0076    * Evaluate the off-shell tensor coming from the vertex.
0077    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0078    * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor.
0079    * @param out The ParticleData pointer for the off-shell tensor.
0080    * @param vec1  The wavefunction for the first  vector.
0081    * @param vec2  The wavefunction for the second vector.
0082    * @param vmass The mass of the vector boson.
0083    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0084    * object
0085    * @param width The width of the off-shell particle if not taken from the ParticleData
0086    * object
0087    */
0088   TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0089                   const VectorWaveFunction & vec1,
0090                   const VectorWaveFunction & vec2,
0091                   Energy vmass=-GeV,
0092                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0093 
0094   /**
0095    * Evaluate the off-shell vector coming from the vertex.
0096    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0097    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0098    * @param out The ParticleData pointer for the off-shell vector.
0099    * @param vec1  The wavefunction for the first vector.
0100    * @param ten3  The wavefunction for the tensor.
0101    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0102    * object
0103    * @param width The width of the off-shell particle if not taken from the ParticleData
0104    * object
0105    */
0106   VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0107                   const VectorWaveFunction & vec1,
0108                   const TensorWaveFunction & ten3,
0109                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0110   //@}
0111 
0112   /**
0113    *   Set coupling methods
0114    */
0115   //@{
0116   /**
0117    * Calculate the couplings for a three point interaction.
0118    * This method is virtual and must be implemented in 
0119    * classes inheriting from this.
0120    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0121    * @param part1 The ParticleData pointer for the first  particle.
0122    * @param part2 The ParticleData pointer for the second particle.
0123    * @param part3 The ParticleData pointer for the third  particle.
0124    */
0125   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0126                tcPDPtr part2,tcPDPtr part3)=0;
0127 
0128   /**
0129    * Dummy setCouplings for a four point interaction 
0130    * This method is virtual and must be implemented in 
0131    * classes inheriting from this.
0132    */
0133   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0134     assert(false);
0135   }
0136   
0137 private:
0138   
0139   /**
0140    * Private and non-existent assignment operator.
0141    */
0142   VVTVertex & operator=(const VVTVertex &) = delete;
0143   
0144 };
0145 
0146 }
0147 
0148 }
0149 #endif /* ThePEG_VVTVertex_H */