Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // FFVTVertex.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_FFVTVertex_H
0010 #define ThePEG_FFVTVertex_H
0011 //
0012 // This is the declaration of the FFVTVertex class.
0013 //
0014 #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0017 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0018 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
0019 #include "FFVTVertex.fh"
0020 
0021 namespace ThePEG {
0022 namespace Helicity {
0023 
0024 /** \ingroup Helicity
0025  *  
0026  *  The FFVTVertex class is the implementation of the 
0027  *  fermion-fermion--vector-tensor vertex. 
0028  *  It inherits from the AbstractFFVTVertex class for the storage of the particles
0029  *  interacting at the vertex and implements the helicity amplitude calculations.
0030  *
0031  *  All implementations of this vertex should inherit from it and implement the
0032  *  virtual setCoupling member.
0033  *
0034  *  The form of the vertex is
0035  * \f[\frac{ig\kappa}4t^a_{nm}\bar{f_2}(C_{\mu\nu,\rho\sigma}-g_{\mu\nu}g_{\rho\sigma})
0036  * \gamma^\sigma f_1\epsilon_{3\rho}\epsilon_4^{\mu\nu}\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  *
0041  *  @see AbstractFFVTVertex
0042  */
0043 class FFVTVertex: public AbstractFFVTVertex {
0044       
0045 public:
0046 
0047   /**
0048    *  Default constructor
0049    */
0050   FFVTVertex() : left_(1.), right_(1.) {}
0051 
0052   /**
0053    * Standard Init function used to initialize the interfaces.
0054    */
0055   static void Init();
0056   
0057 public:
0058   
0059   /**
0060    * Members to calculate the helicity amplitude expressions for vertices
0061    * and off-shell particles.
0062    */
0063   //@{
0064   /**
0065    * Evalulate the vertex.
0066    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0067    * @param sp1   The wavefunction for the ferimon.
0068    * @param sbar2 The wavefunction for the antifermion.
0069    * @param vec3  The wavefunction for the vector.
0070    * @param ten4  The wavefunction for the tensor.
0071    */
0072   Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0073            const SpinorBarWaveFunction & sbar2,
0074            const VectorWaveFunction & vec3, const TensorWaveFunction & ten4);
0075   //@}
0076 
0077   /**
0078    *   Set coupling methods
0079    */
0080   //@{
0081   /**
0082    * Dummy for a three point interaction.
0083    */
0084   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr) {
0085     assert(false);
0086   }
0087 
0088   /**
0089    * Calculate the couplings for a four point interaction.
0090    * This method is virtual and must be implemented in 
0091    * classes inheriting from this.
0092    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0093    * @param part1 The ParticleData pointer for the first  particle.
0094    * @param part2 The ParticleData pointer for the second particle.
0095    * @param part3 The ParticleData pointer for the third  particle.
0096    * @param part4 The ParticleData pointer for the fourth particle.
0097    */
0098   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
0099                tcPDPtr part4)=0;
0100   //@}
0101 
0102   /**
0103    *  Left and right couplings
0104    */
0105   //@{
0106   /**
0107    *  Get left
0108    */
0109   Complex left() const {return left_;}
0110 
0111   /**
0112    *  Set left
0113    */
0114   void left(Complex in) {left_ = in;}
0115 
0116   /**
0117    *  Get right
0118    */
0119   Complex right() const {return right_;}
0120 
0121   /**
0122    *  Set right
0123    */
0124   void right(Complex in) {right_ = in;}
0125   //@}
0126     
0127 private:
0128   
0129   /**
0130    * Private and non-existent assignment operator.
0131    */
0132   FFVTVertex & operator=(const FFVTVertex &) = delete;
0133   
0134 private:
0135 
0136   /**
0137    *  Left coupling
0138    */
0139   Complex left_;
0140 
0141   /**
0142    *  Right coupling
0143    */
0144   Complex right_;
0145 
0146 };
0147 }
0148 
0149 }
0150 #endif /* ThePEG_FFVTVertex_H */