Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HELICITY_AbstractFFVVertex_H
0003 #define HELICITY_AbstractFFVVertex_H
0004 //
0005 // This is the declaration of the AbstractFFVVertex class.
0006 //
0007 
0008 #include "VertexBase.h"
0009 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0010 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0011 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0012 #include "AbstractFFVVertex.fh"
0013 
0014 namespace ThePEG {
0015 namespace Helicity {
0016 
0017 /**
0018  * The AbstractFFVVertex class provides a base class for all
0019  * fermion-fermion-vector vertices in ThePEG.
0020  */
0021 class AbstractFFVVertex: public VertexBase {
0022 
0023 public:
0024 
0025   /**
0026    *  Enum for the direction in the small angle limit
0027    */
0028   enum SmallAngleDirection {
0029     NegativeZDirection = -1, ///< Along -z 
0030     PostiveZDirection  =  1  ///< Along +z 
0031   };
0032   
0033 public:
0034 
0035 
0036   /**
0037    * Default constructor
0038    */
0039   AbstractFFVVertex() : VertexBase(VertexType::FFV) {}
0040 
0041   /**
0042    * Members to calculate the helicity amplitude expressions for vertices
0043    * and off-shell particles.
0044    */
0045   //@{
0046   /**
0047    * Evalulate the vertex.
0048    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0049    * @param sp1   The wavefunction for the ferimon.
0050    * @param sbar2 The wavefunction for the antifermion.
0051    * @param vec3  The wavefunction for the vector.
0052    */
0053   virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0054                const SpinorBarWaveFunction & sbar2,
0055                const VectorWaveFunction & vec3) = 0;
0056 
0057   /**
0058    * Evaluate the off-shell barred spinor coming from the vertex.
0059    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0060    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0061    * @param out The ParticleData pointer for the off-shell barred spinor.
0062    * @param sbar2 The wavefunction for the antifermion.
0063    * @param vec3  The wavefunction for the vector.
0064    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0065    * object
0066    * @param width The width of the off-shell particle if not taken from the ParticleData
0067    * object
0068    */
0069   virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0070                      const SpinorBarWaveFunction & sbar2,
0071                      const VectorWaveFunction & vec3,
0072                      complex<Energy> mass=-GeV, complex<Energy> width=-GeV) = 0;
0073 
0074   /**
0075    * Evaluate the off-shell vector coming from the vertex.
0076    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0077    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0078    * @param out The ParticleData pointer for the off-shell vector.
0079    * @param sp1   The wavefunction for the ferimon.
0080    * @param sbar2 The wavefunction for the antifermion.
0081    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0082    * object
0083    * @param width The width of the off-shell particle if not taken from the ParticleData
0084    * object
0085    */
0086   virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0087                       const SpinorWaveFunction & sp1,
0088                       const SpinorBarWaveFunction & sbar2,
0089                       complex<Energy> mass=-GeV, complex<Energy> width=-GeV) = 0;
0090 
0091   /**
0092    * Evaluate the off-shell spinor coming from the vertex.
0093    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0094    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0095    * @param out The ParticleData pointer for the off-shell spinor.
0096    * @param sp1   The wavefunction for the ferimon.
0097    * @param vec3  The wavefunction for the vector.
0098    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0099    * object
0100    * @param width The width of the off-shell particle if not taken from the ParticleData
0101    * object
0102    */
0103   virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0104                       const SpinorWaveFunction & sp1,
0105                       const VectorWaveFunction & vec3,
0106                       complex<Energy> mass=-GeV, complex<Energy> width=-GeV) = 0;
0107   //@}
0108 
0109   /**
0110    *  Special members for off-shell fermion wavefunctions with massless
0111    *  gauge bosons at small angles in the small angle limit for
0112    *  numerical accuracy. In order to get sufficient accuracy it is
0113    *  assumed that the fermion lies along either the positive or negative z
0114    *  axis
0115    *
0116    *  Unlike the other members this is not required to be implemented in
0117    *  all inheriting classes and a default implementation which returns
0118    *  the general result is included.
0119    */
0120   //@{
0121   /** Small angle approx for an off-shell spinor
0122    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0123    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0124    * @param out The ParticleData pointer for the off-shell spinor.
0125    * @param sp1   The wavefunction for the ferimon.
0126    * @param vec3  The wavefunction for the vector.
0127    * @param fhel Helicity of the fermion
0128    * @param vhel Helicity of the vector
0129    * @param ctheta   The cosine of the 
0130    *                 polar angle of the photon with respect to the fermion
0131    * @param phi      The azimuthal angle of the photon with respect to the fermion
0132    * @param stheta   The sine of the
0133    *                 polar angle of the photon with respect to the fermion
0134    * @param includeEikonal Whether or not to include the eikonal piece
0135    * @param direction Whether fermion along + or - z direction
0136    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0137    * object
0138    * @param width The width of the off-shell particle if not taken from the ParticleData
0139    * object
0140    */
0141   virtual SpinorWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out,
0142                        const SpinorWaveFunction & sp1,
0143                        const VectorWaveFunction & vec3,
0144                        unsigned int fhel, unsigned int vhel,
0145                        double ctheta, double phi, double stheta,
0146                        bool includeEikonal = true,
0147                        SmallAngleDirection direction = PostiveZDirection,
0148                        Energy mass=-GeV, Energy width=-GeV);
0149 
0150   /** Small angle approx for an off-shell spinor
0151    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0152    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0153    * @param out The ParticleData pointer for the off-shell spinor.
0154    * @param sbar2 The wavefunction for the antifermion.
0155    * @param vec3  The wavefunction for the vector.
0156    * @param fhel Helicity of the fermion
0157    * @param vhel Helicity of the vector
0158    * @param ctheta   The cosine of the 
0159    *                 polar angle of the photon with respect to the fermion
0160    * @param phi      The azimuthal angle of the photon with respect to the fermion
0161    * @param stheta   The sine of the
0162    *                 polar angle of the photon with respect to the fermion
0163    * @param includeEikonal Whether or not to include the eikonal piece
0164    * @param direction Whether fermion along + or - z direction
0165    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0166    * object
0167    * @param width The width of the off-shell particle if not taken from the ParticleData
0168    * object
0169    */
0170   virtual SpinorBarWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out,
0171                           const SpinorBarWaveFunction & sbar2,
0172                           const VectorWaveFunction & vec3,
0173                           unsigned int fhel, unsigned int vhel,
0174                           double ctheta, double phi, double stheta,
0175                           bool includeEikonal = true,
0176                           SmallAngleDirection direction = PostiveZDirection,
0177                           Energy mass=-GeV, Energy width=-GeV);
0178   //@}
0179 
0180 public:
0181 
0182   /**
0183    * The standard Init function used to initialize the interfaces.
0184    * Called exactly once for each class by the class description system
0185    * before the main function starts or
0186    * when this class is dynamically loaded.
0187    */
0188   static void Init();
0189 
0190 private:
0191 
0192   /**
0193    * The assignment operator is private and must never be called.
0194    * In fact, it should not even be implemented.
0195    */
0196   AbstractFFVVertex & operator=(const AbstractFFVVertex &) = delete;
0197 
0198 };
0199 
0200 }
0201 }
0202 
0203 
0204 namespace ThePEG {
0205 
0206 }
0207 #endif /* HELICITY_AbstractFFVVertex_H */