Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // FFTVertex.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_FFTVertex_H
0010 #define ThePEG_FFTVertex_H
0011 //
0012 // This is the declaration of the FFTVertex class.
0013 //
0014 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0017 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
0018 #include "FFTVertex.fh"
0019 
0020 namespace ThePEG {
0021 namespace Helicity {
0022 
0023 /** \ingroup Helicity
0024  *
0025  *  The FFTVertex class is the implementation of the fermion-fermion-tensor
0026  *  vertex. It inherits from the AbstractFFTVertex 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[-\frac{i\kappa}8\bar{f_2}\left[
0034  *  \gamma_\mu(k_1-k_2)_\nu+\gamma_\nu(k_1-k_2)_\mu
0035  * -2g_{\mu\nu}(k\!\!\!\!\!\not\,\,\,_1-k\!\!\!\!\!\not\,\,\,_2)+4g_{\mu\nu}m_{f}
0036  * \right]f_1\epsilon^{\mu\nu}_3\f] 
0037  *
0038  *  @see AbstractFFTVertex
0039  */
0040 class FFTVertex: public AbstractFFTVertex {
0041       
0042 public:
0043 
0044   /**
0045    * Standard Init function used to initialize the interfaces.
0046    */
0047   static void Init();
0048 
0049 public:
0050   
0051   /**
0052    * Members to calculate the helicity amplitude expressions for vertices
0053    * and off-shell particles.
0054    */
0055   //@{
0056   /**
0057    * Evalulate the vertex.
0058    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0059    * @param sp1   The wavefunction for the ferimon.
0060    * @param sbar2 The wavefunction for the antifermion.
0061    * @param ten3  The wavefunction for the tensor.
0062    */
0063   Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0064            const SpinorBarWaveFunction & sbar2, 
0065            const TensorWaveFunction & ten3);
0066 
0067   /**
0068    * Evaluate the off-shell tensor coming from the vertex.
0069    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0070    * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor.
0071    * @param out The ParticleData pointer for the off-shell tensor.
0072    * @param sp1   The wavefunction for the ferimon.
0073    * @param sbar2 The wavefunction for the antifermion.
0074    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0075    * object
0076    * @param width The width of the off-shell particle if not taken from the ParticleData
0077    * object
0078    */
0079   TensorWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out,
0080                   const SpinorWaveFunction & sp1,
0081                   const SpinorBarWaveFunction & sbar2,
0082                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0083 
0084   /**
0085    * Evaluate the off-shell spinor coming from the vertex.
0086    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0087    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0088    * @param out The ParticleData pointer for the off-shell spinor.
0089    * @param sp1   The wavefunction for the ferimon.
0090    * @param ten3  The wavefunction for the tensor.
0091    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0092    * object
0093    * @param width The width of the off-shell particle if not taken from the ParticleData
0094    * object
0095    */
0096   SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0097                   const SpinorWaveFunction & sp1,
0098                   const TensorWaveFunction & ten3,
0099                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0100 
0101   /**
0102    * Evaluate the off-shell barred spinor coming from the vertex.
0103    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0104    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0105    * @param out The ParticleData pointer for the off-shell barred spinor.
0106    * @param sbar2 The wavefunction for the antifermion.
0107    * @param ten3  The wavefunction for the tensor.
0108    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0109    * object
0110    * @param width The width of the off-shell particle if not taken from the ParticleData
0111    * object
0112    */
0113   SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0114                  const SpinorBarWaveFunction & sbar2,
0115                  const TensorWaveFunction& ten3,
0116                  complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0117   //@}
0118 
0119   /**
0120    *   Set coupling methods
0121    */
0122   //@{
0123   /**
0124    * Calculate the couplings for a three point interaction.
0125    * This method is virtual and must be implemented in 
0126    * classes inheriting from this.
0127    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0128    * @param part1 The ParticleData pointer for the first  particle.
0129    * @param part2 The ParticleData pointer for the second particle.
0130    * @param part3 The ParticleData pointer for the third  particle.
0131    */
0132   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0133                tcPDPtr part2,tcPDPtr part3)=0;
0134 
0135   /**
0136    * Dummy setCouplings for a four point interaction 
0137    * This method is virtual and must be implemented in 
0138    * classes inheriting from this.
0139    */
0140   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0141     assert(false);
0142   }
0143   //@}
0144   
0145 private:
0146   
0147   /**
0148    * Private and non-existent assignment operator.
0149    */
0150   FFTVertex & operator=(const FFTVertex &) = delete;
0151   
0152 };
0153 
0154 }
0155 
0156 }
0157 #endif /* ThePEG_FFTVertex_H */