Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // FFSVertex.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_FFSVertex_H
0010 #define ThePEG_FFSVertex_H
0011 //
0012 // This is the declaration of the FFSVertex class.
0013 
0014 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0017 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0018 #include "FFSVertex.fh"
0019 
0020 namespace ThePEG {
0021 
0022 namespace Helicity{
0023 
0024 /** \ingroup Helicity
0025  *
0026  *  The FFSVertex class is the implementation of the interact of a
0027  *  scalar boson and a fermion-antifermion pair. It inherits from the AbstractFFSVertex
0028  *  class for storage of the particles interacting at the vertex and implements
0029  *  the helicity calculations.
0030  *
0031  *  Implementations of specific interactions should inherit from this and implement
0032  *  the virtual setCoupling member.
0033  *
0034  *  The form of the vertex is
0035  *  \f[ic\bar{f_2}a^\lambda P_\lambda f_1\phi_3\f]
0036  *  where \f$a^\pm\f$ are the right and left couplings and \f$P_\pm=(1\pm\gamma_5)\f$
0037  *  are the chirality projection operators.
0038  *
0039  *  @see AbstractFFSVertex
0040  */
0041 class FFSVertex: public AbstractFFSVertex {
0042       
0043 public:
0044   
0045   /**
0046    * Standard Init function used to initialize the interfaces.
0047    */
0048   static void Init();
0049   
0050 public:      
0051 
0052   /**
0053    * Members to calculate the helicity amplitude expressions for vertices
0054    * and off-shell particles.
0055    */
0056   //@{
0057   /**
0058    * Evalulate the vertex.
0059    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0060    * @param sp1   The wavefunction for the ferimon.
0061    * @param sbar2 The wavefunction for the antifermion.
0062    * @param sca3  The wavefunction for the scalar.
0063    */
0064   Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0065            const SpinorBarWaveFunction & sbar2,
0066            const ScalarWaveFunction & sca3);
0067 
0068   /**
0069    * Evaluate the off-shell spinor coming from the vertex.
0070    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0071    * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor.
0072    * @param out The ParticleData pointer for the off-shell spinor.
0073    * @param sp1   The wavefunction for the ferimon.
0074    * @param sca3  The wavefunction for the scalar.
0075    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0076    * object
0077    * @param width The width of the off-shell particle if not taken from the ParticleData
0078    * object
0079    */
0080   SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0081                   const SpinorWaveFunction & sp1, 
0082                   const ScalarWaveFunction & sca3,
0083                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0084 
0085   /**
0086    * Evaluate the off-shell barred spinor coming from the vertex.
0087    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0088    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0089    * @param out The ParticleData pointer for the off-shell barred spinor.
0090    * @param sbar2 The wavefunction for the antifermion.
0091    * @param sca3  The wavefunction for the scalar.
0092    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0093    * object
0094    * @param width The width of the off-shell particle if not taken from the ParticleData
0095    * object
0096    */
0097   SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0098                  const SpinorBarWaveFunction & sbar2,
0099                  const ScalarWaveFunction & sca3,
0100                  complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0101 
0102   /**
0103    * Evaluate the off-shell scalar 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 scalar.
0106    * @param out The ParticleData pointer for the off-shell scalar.
0107    * @param sp1   The wavefunction for the ferimon.
0108    * @param sbar2 The wavefunction for the antifermion.
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   ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0115                   const SpinorWaveFunction & sp1, 
0116                   const SpinorBarWaveFunction & sbar2,
0117                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
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   /**
0146    *  Get the couplings
0147    */
0148   //@{
0149   /**
0150    * Get the left coupling.
0151    */
0152   Complex left() { return _left; }
0153   
0154   /**
0155    * Get the right coupling.
0156    */
0157   Complex right() { return _right; }
0158   //@}
0159   
0160 protected:
0161 
0162   /**
0163    *  Set the couplings
0164    */
0165   //@{
0166   /**
0167    * Set the left coupling.
0168    */
0169   void left(Complex in) { _left = in; }
0170 
0171   /**
0172    * Set the right coupling.
0173    */
0174   void right(Complex in) { _right = in; }
0175   //@}
0176   
0177 private:
0178   
0179   /**
0180    * Private and non-existent assignment operator.
0181    */
0182   FFSVertex & operator=(const FFSVertex &) = delete;
0183   
0184 private:
0185 
0186   /**
0187    * Storage of the left coupling.
0188    */
0189   Complex _left;
0190 
0191   /**
0192    * Storage of the right coupling.
0193    */
0194   Complex _right;
0195 
0196 };
0197 }
0198 
0199 }
0200 #endif /* ThePEG_FFSVertex_H */