Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // FFVVertex.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_FFVVertex_H
0010 #define ThePEG_FFVVertex_H
0011 //
0012 // This is the declaration of the FFVVertex class.
0013 
0014 #include <ThePEG/Helicity/Vertex/AbstractFFVVertex.h>
0015 #include <ThePEG/Helicity/WaveFunction/VectorWaveFunction.h>
0016 #include <ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h>
0017 #include <ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h>
0018 #include "FFVVertex.fh"
0019 
0020 namespace ThePEG {
0021 
0022 namespace Helicity{
0023 
0024 /** \ingroup Helicity
0025  *
0026  *  The FFVVertex class is the base class for all helicity amplitude
0027  *  vertices which use the renormalisable form for the 
0028  *  fermion-fermion-vector vertex. 
0029  *
0030  *  Any such vertices should inherit from this class and implement the virtual
0031  *  setcoupling member function. The base AbstractFFVVertex class is used to store the
0032  *  particles allowed to interact at the vertex.
0033  *
0034  *  The form of the vertex is
0035  *  \f[ic\bar{f_2}\gamma^\mu a^\lambda P_\lambda f_1\epsilon_{3\mu}\f]
0036  *
0037  *  @see AbstractFFVVertex
0038  */
0039 class FFVVertex: public AbstractFFVVertex {
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    * Evalulate the vertex.
0057    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0058    * @param sp1   The wavefunction for the ferimon.
0059    * @param sbar2 The wavefunction for the antifermion.
0060    * @param vec3  The wavefunction for the vector.
0061    */
0062   virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0063                const SpinorBarWaveFunction & sbar2,
0064                const VectorWaveFunction & vec3);
0065 
0066   /**
0067    * Evaluate the off-shell barred spinor coming from the vertex.
0068    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0069    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0070    * @param out The ParticleData pointer for the off-shell barred spinor.
0071    * @param sbar2 The wavefunction for the antifermion.
0072    * @param vec3  The wavefunction for the vector.
0073    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0074    * object
0075    * @param width The width of the off-shell particle if not taken from the ParticleData
0076    * object
0077    */
0078   virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0079                      const SpinorBarWaveFunction & sbar2,
0080                      const VectorWaveFunction & vec3,
0081                      complex<Energy> mass=-GeV,
0082                      complex<Energy> width=-GeV);
0083 
0084   /**
0085    * Evaluate the off-shell vector 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 vector.
0088    * @param out The ParticleData pointer for the off-shell vector.
0089    * @param sp1   The wavefunction for the ferimon.
0090    * @param sbar2 The wavefunction for the antifermion.
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   virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0097                       const SpinorWaveFunction & sp1,
0098                       const SpinorBarWaveFunction & sbar2,
0099                       complex<Energy> mass=-GeV,
0100                       complex<Energy> width=-GeV);
0101 
0102   /**
0103    * Evaluate the off-shell spinor coming from the vertex.
0104    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0105    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0106    * @param out The ParticleData pointer for the off-shell spinor.
0107    * @param sp1   The wavefunction for the ferimon.
0108    * @param vec3  The wavefunction for the vector.
0109    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0110    * object
0111    * @param width The width of the off-shell particle if not taken from the ParticleData
0112    * object
0113    */
0114   virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0115                       const SpinorWaveFunction & sp1,
0116                       const VectorWaveFunction & vec3,
0117                       complex<Energy> mass=-GeV,
0118                       complex<Energy> width=-GeV);
0119   //@}
0120 
0121   /**
0122    *  Special members for off-shell fermion wavefunctions with massless
0123    *  gauge bosons at small angles in the small angle limit for
0124    *  numerical accuracy. In order to get sufficient accuracy it is
0125    *  assumed that the fermion lies along either the positive or negative z
0126    *  axis.
0127    */
0128   //@{
0129   /** Small angle approx for an off-shell spinor
0130    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0131    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0132    * @param out The ParticleData pointer for the off-shell spinor.
0133    * @param sp1   The wavefunction for the ferimon.
0134    * @param vec3  The wavefunction for the vector.
0135    * @param fhel Helicity of the fermion
0136    * @param vhel Helicity of the vector
0137    * @param ctheta   The cosine of the 
0138    *                 polar angle of the photon with respect to the fermion
0139    * @param phi      The azimuthal angle of the photon with respect to the fermion
0140    * @param stheta   The sine of the
0141    *                 polar angle of the photon with respect to the fermion
0142    * @param includeEikonal Whether or not to include the eikonal piece
0143    * @param direction Whether fermion along + or - z direction
0144    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0145    * object
0146    * @param width The width of the off-shell particle if not taken from the ParticleData
0147    * object
0148    */
0149   virtual SpinorWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out,
0150                        const SpinorWaveFunction & sp1,
0151                        const VectorWaveFunction & vec3,
0152                        unsigned int fhel, unsigned int vhel,
0153                        double ctheta, double phi, double stheta,
0154                        bool includeEikonal = true,
0155                        SmallAngleDirection direction = PostiveZDirection,
0156                        Energy mass=-GeV, Energy width=-GeV);
0157 
0158   /** Small angle approx for an off-shell spinor
0159    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0160    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0161    * @param out The ParticleData pointer for the off-shell spinor.
0162    * @param sbar2 The wavefunction for the antifermion.
0163    * @param vec3  The wavefunction for the vector.
0164    * @param fhel Helicity of the fermion
0165    * @param vhel Helicity of the vector
0166    * @param ctheta   The cosine of the 
0167    *                 polar angle of the photon with respect to the fermion
0168    * @param phi      The azimuthal angle of the photon with respect to the fermion
0169    * @param stheta   The sine of the
0170    *                 polar angle of the photon with respect to the fermion
0171    * @param includeEikonal Whether or not to include the eikonal piece
0172    * @param direction Whether fermion along + or - z direction
0173    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0174    * object
0175    * @param width The width of the off-shell particle if not taken from the ParticleData
0176    * object
0177    */
0178   virtual SpinorBarWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out,
0179                           const SpinorBarWaveFunction & sbar2,
0180                           const VectorWaveFunction & vec3,
0181                           unsigned int fhel, unsigned int vhel,
0182                           double ctheta, double phi, double stheta,
0183                           bool includeEikonal = true,
0184                           SmallAngleDirection direction = PostiveZDirection,
0185                           Energy mass=-GeV, Energy width=-GeV);
0186   //@}
0187 
0188   /**
0189    *   Set coupling methods
0190    */
0191   //@{
0192   /**
0193    * Calculate the couplings for a three point interaction.
0194    * This method is virtual and must be implemented in 
0195    * classes inheriting from this.
0196    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0197    * @param part1 The ParticleData pointer for the first  particle.
0198    * @param part2 The ParticleData pointer for the second particle.
0199    * @param part3 The ParticleData pointer for the third  particle.
0200    */
0201   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0202                tcPDPtr part2,tcPDPtr part3)=0;
0203 
0204   /**
0205    * Dummy setCouplings for a four point interaction 
0206    * This method is virtual and must be implemented in 
0207    * classes inheriting from this.
0208    */
0209   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0210     assert(false);
0211   }
0212   //@}
0213 
0214   /**
0215    * Get the Couplings 
0216    */
0217   //@{
0218   /**
0219    * Get the left coupling.
0220    */
0221   const Complex & left() const { return _left; }
0222 
0223   /**
0224    * Get the right coupling.
0225    */
0226   const Complex & right() const { return _right; }
0227   //@}
0228 
0229 protected:
0230 
0231   /**
0232    *  Set the couplings
0233    */
0234   //@{
0235   /**
0236    * Set the left coupling.
0237    */
0238   void left(const Complex & in) { _left = in; }
0239 
0240   /**
0241    * Set the right coupling.
0242    */
0243   void right(const Complex & in) { _right = in; }
0244   //@}
0245 
0246 private:
0247   
0248   /**
0249    * Private and non-existent assignment operator.
0250    */
0251   FFVVertex & operator=(const FFVVertex &) = delete;
0252   
0253 private:
0254 
0255   /**
0256    * Left coupling.
0257    */
0258   Complex _left;
0259 
0260   /**
0261    * Right coupling.
0262    */
0263   Complex _right;
0264   
0265 };
0266 }
0267 
0268 }
0269 #endif /* ThePEG_FFVVertex_H */