Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // GeneralFFVVertex.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_GeneralFFVVertex_H
0010 #define ThePEG_GeneralFFVVertex_H
0011 //
0012 // This is the declaration of the GeneralFFVVertex 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 "GeneralFFVVertex.fh"
0019 
0020 namespace ThePEG {
0021 
0022 namespace Helicity{
0023 
0024 /** \ingroup Helicity
0025  *
0026  *  The GeneralFFVVertex class is the base class for all helicity amplitude
0027  *  vertices which use a general form of the fermion-fermion-vector vertex.
0028  *
0029  *  Any such vertices should inherit from this class and implement the virtual
0030  *  setcoupling member function. The base AbstractFFVVertex class is
0031  *  used to store the particles allowed to interact at the vertex.
0032  *
0033  *  The form of the vertex is
0034  *  \f[ic\bar{f_2}\gamma^\mu a^\lambda P_\lambda f_1\epsilon_{3\mu}\f]
0035  *
0036  *  @see AbstractFFVVertex
0037  */
0038 class GeneralFFVVertex: public AbstractFFVVertex {
0039   
0040 public:
0041   
0042   /**
0043    * Standard Init function used to initialize the interfaces.
0044    */
0045   static void Init();
0046 
0047   /**
0048    * Members to calculate the helicity amplitude expressions for vertices
0049    * and off-shell particles.
0050    */
0051   //@{
0052   /**
0053    * Evalulate the vertex.
0054    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0055    * @param sp1   The wavefunction for the ferimon.
0056    * @param sbar2 The wavefunction for the antifermion.
0057    * @param vec3  The wavefunction for the vector.
0058    */
0059   Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0060            const SpinorBarWaveFunction & sbar2,const VectorWaveFunction & vec3);
0061 
0062   /**
0063    * Evaluate the off-shell barred spinor coming from the vertex.
0064    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0065    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0066    * @param out The ParticleData pointer for the off-shell barred spinor.
0067    * @param sbar2 The wavefunction for the antifermion.
0068    * @param vec3  The wavefunction for the vector.
0069    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0070    * object
0071    * @param width The width of the off-shell particle if not taken from the ParticleData
0072    * object
0073    */
0074   SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0075                  const SpinorBarWaveFunction & sbar2,
0076                  const VectorWaveFunction & vec3,
0077                  complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0078 
0079   /**
0080    * Evaluate the off-shell vector coming from the vertex.
0081    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0082    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0083    * @param out The ParticleData pointer for the off-shell vector.
0084    * @param sp1   The wavefunction for the ferimon.
0085    * @param sbar2 The wavefunction for the antifermion.
0086    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0087    * object
0088    * @param width The width of the off-shell particle if not taken from the ParticleData
0089    * object
0090    */
0091   VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0092                   const SpinorWaveFunction & sp1,
0093                   const SpinorBarWaveFunction & sbar2,
0094                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0095 
0096   /**
0097    * Evaluate the off-shell spinor coming from the vertex.
0098    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0099    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0100    * @param out The ParticleData pointer for the off-shell spinor.
0101    * @param sp1   The wavefunction for the ferimon.
0102    * @param vec3  The wavefunction for the vector.
0103    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0104    * object
0105    * @param width The width of the off-shell particle if not taken from the ParticleData
0106    * object
0107    */
0108   SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0109                   const SpinorWaveFunction & sp1,
0110                   const VectorWaveFunction & vec3,
0111                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0112   //@}
0113 
0114   /**
0115    *   Set coupling methods
0116    */
0117   //@{
0118   /**
0119    * Calculate the couplings for a three point interaction.
0120    * This method is virtual and must be implemented in 
0121    * classes inheriting from this.
0122    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0123    * @param part1 The ParticleData pointer for the first  particle.
0124    * @param part2 The ParticleData pointer for the second particle.
0125    * @param part3 The ParticleData pointer for the third  particle.
0126    */
0127   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0128                tcPDPtr part2,tcPDPtr part3)=0;
0129 
0130   /**
0131    * Dummy setCouplings for a four point interaction 
0132    * This method is virtual and must be implemented in 
0133    * classes inheriting from this.
0134    */
0135   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0136     assert(false);
0137   }
0138   //@}
0139 
0140   /**
0141    * Get the Couplings 
0142    */
0143   //@{
0144   /**
0145    * Get the left coupling.
0146    */
0147   const Complex & getLeft() { return _left; }
0148 
0149   /**
0150    * Get the right coupling.
0151    */
0152   const Complex & getRight() { return _right; }
0153 
0154   /**
0155    *  Get the left coupling for the \f$\sigma^{\mu\nu}\f$ term
0156    */
0157   const complex<InvEnergy> getLeftSigma() { return _leftSigma; }
0158 
0159   /**
0160    *  Get the right coupling for the \f$\sigma^{\mu\nu}\f$ term
0161    */
0162   const complex<InvEnergy> getRightSigma() { return _rightSigma; }
0163   //@}
0164 
0165 protected:
0166 
0167   /**
0168    *  Set the couplings
0169    */
0170   //@{
0171   /**
0172    * Set the left coupling.
0173    */
0174   void setLeft(const Complex & in) { _left = in; }
0175 
0176   /**
0177    * Set the right coupling.
0178    */
0179   void setRight(const Complex & in) { _right = in; }
0180 
0181   /**
0182    *  Set the left coupling for the \f$\sigma^{\mu\nu}\f$ term
0183    */
0184   void  setLeftSigma(const complex<InvEnergy> & in) { _leftSigma  = in; }
0185 
0186   /**
0187    *  Set the right coupling for the \f$\sigma^{\mu\nu}\f$ term
0188    */
0189   void setRightSigma(const complex<InvEnergy> & in) { _rightSigma = in; }
0190   //@}
0191 
0192 private:
0193   
0194   /**
0195    * Private and non-existent assignment operator.
0196    */
0197   GeneralFFVVertex & operator=(const GeneralFFVVertex &) = delete;
0198   
0199 private:
0200 
0201   /**
0202    *  Left \f$\gamma^\mu\f$ coupling.
0203    */
0204   Complex _left;
0205 
0206   /**
0207    * Right \f$\gamma^\mu\f$ coupling.
0208    */
0209   Complex _right;
0210 
0211   /**
0212    * Left \f$\sigma^{\mu\nu}\f$ coupling
0213    */
0214   complex<InvEnergy> _leftSigma;
0215 
0216   /**
0217    * Right \f$\sigma^{\mu\nu}\f$ coupling
0218    */
0219   complex<InvEnergy> _rightSigma;
0220   
0221 };
0222 }
0223 
0224 }
0225 #endif /* ThePEG_GeneralFFVVertex_H */