Back to home page

EIC code displayed by LXR

 
 

    


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

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