Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // RFSVertex.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_RFSVertex_H
0010 #define ThePEG_RFSVertex_H
0011 //
0012 // This is the declaration of the RFSVertex class.
0013 
0014 #include "ThePEG/Helicity/Vertex/AbstractRFSVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0017 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0018 #include "RFSVertex.fh"
0019 
0020 namespace ThePEG {
0021 
0022 namespace Helicity{
0023 
0024 /** \ingroup Helicity
0025  *
0026  *  The RFSVertex class is the implementation of the interact of a
0027  *  scalar boson and a spin-3/2 fermion-antifermion pair. It inherits from the AbstractRFSVertex
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}_\mu p_{1}^\mu 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 AbstractRFSVertex
0040  */
0041 class RFSVertex: public AbstractRFSVertex {
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 RS ferimon.
0061    * @param sbar2 The wavefunction for the antifermion.
0062    * @param sca3  The wavefunction for the scalar.
0063    */
0064   Complex evaluate(Energy2 q2,const RSSpinorWaveFunction & sp1,
0065            const SpinorBarWaveFunction & sbar2,
0066            const ScalarWaveFunction & sca3);
0067 
0068   /**
0069    * Evalulate the vertex.
0070    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0071    * @param sp1   The wavefunction for the ferimon.
0072    * @param sbar2 The wavefunction for the RS antifermion.
0073    * @param sca3  The wavefunction for the scalar.
0074    */
0075   Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1,
0076            const RSSpinorBarWaveFunction & sbar2,
0077            const ScalarWaveFunction & sca3);
0078 
0079   /**
0080    * Evaluate the off-shell spinor 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 spinor.
0083    * @param out The ParticleData pointer for the off-shell spinor.
0084    * @param sp1   The wavefunction for the ferimon.
0085    * @param sca3  The wavefunction for the scalar.
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   SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0092                   const RSSpinorWaveFunction & sp1, 
0093                   const ScalarWaveFunction & sca3,
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 sca3  The wavefunction for the scalar.
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   RSSpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0109                 const SpinorWaveFunction & sp1, 
0110                 const ScalarWaveFunction & sca3,
0111                 complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0112 
0113   /**
0114    * Evaluate the off-shell barred spinor coming from the vertex.
0115    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0116    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0117    * @param out The ParticleData pointer for the off-shell barred spinor.
0118    * @param sbar2 The wavefunction for the antifermion.
0119    * @param sca3  The wavefunction for the scalar.
0120    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0121    * object
0122    * @param width The width of the off-shell particle if not taken from the ParticleData
0123    * object
0124    */
0125   SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0126                  const RSSpinorBarWaveFunction & sbar2,
0127                  const ScalarWaveFunction & sca3,
0128                  complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0129 
0130   /**
0131    * Evaluate the off-shell barred spinor coming from the vertex.
0132    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0133    * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor.
0134    * @param out The ParticleData pointer for the off-shell barred spinor.
0135    * @param sbar2 The wavefunction for the antifermion.
0136    * @param sca3  The wavefunction for the scalar.
0137    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0138    * object
0139    * @param width The width of the off-shell particle if not taken from the ParticleData
0140    * object
0141    */
0142   RSSpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0143                    const SpinorBarWaveFunction & sbar2,
0144                    const ScalarWaveFunction & sca3,
0145                    complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0146 
0147   /**
0148    * Evaluate the off-shell scalar coming from the vertex.
0149    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0150    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0151    * @param out The ParticleData pointer for the off-shell scalar.
0152    * @param sp1   The wavefunction for the RS ferimon.
0153    * @param sbar2 The wavefunction for the antifermion.
0154    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0155    * object
0156    * @param width The width of the off-shell particle if not taken from the ParticleData
0157    * object
0158    */
0159   ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0160                   const RSSpinorWaveFunction & sp1, 
0161                   const SpinorBarWaveFunction & sbar2,
0162                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0163 
0164   /**
0165    * Evaluate the off-shell scalar coming from the vertex.
0166    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0167    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0168    * @param out The ParticleData pointer for the off-shell scalar.
0169    * @param sp1   The wavefunction for the ferimon.
0170    * @param sbar2 The wavefunction for the RS antifermion.
0171    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0172    * object
0173    * @param width The width of the off-shell particle if not taken from the ParticleData
0174    * object
0175    */
0176   ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0177                   const SpinorWaveFunction & sp1, 
0178                   const RSSpinorBarWaveFunction & sbar2,
0179                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0180   //@}
0181 
0182   /**
0183    *   Set coupling methods
0184    */
0185   //@{
0186   /**
0187    * Calculate the couplings for a three point interaction.
0188    * This method is virtual and must be implemented in 
0189    * classes inheriting from this.
0190    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0191    * @param part1 The ParticleData pointer for the first  particle.
0192    * @param part2 The ParticleData pointer for the second particle.
0193    * @param part3 The ParticleData pointer for the third  particle.
0194    */
0195   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0196                tcPDPtr part2,tcPDPtr part3)=0;
0197 
0198   /**
0199    * Dummy setCouplings for a four point interaction 
0200    * This method is virtual and must be implemented in 
0201    * classes inheriting from this.
0202    */
0203   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0204     assert(false);
0205   }
0206   //@}
0207 
0208   /**
0209    *  Get the couplings
0210    */
0211   //@{
0212   /**
0213    * Get the left coupling.
0214    */
0215   Complex left() { return _left; }
0216   
0217   /**
0218    * Get the right coupling.
0219    */
0220   Complex right() { return _right; }
0221   //@}
0222   
0223 protected:
0224 
0225   /**
0226    *  Set the couplings
0227    */
0228   //@{
0229   /**
0230    * Set the left coupling.
0231    */
0232   void left(Complex in) { _left = in; }
0233 
0234   /**
0235    * Set the right coupling.
0236    */
0237   void right(Complex in) { _right = in; }
0238   //@}
0239   
0240 private:
0241   
0242   /**
0243    * Private and non-existent assignment operator.
0244    */
0245   RFSVertex & operator=(const RFSVertex &) = delete;
0246   
0247 private:
0248 
0249   /**
0250    * Storage of the left coupling.
0251    */
0252   Complex _left;
0253 
0254   /**
0255    * Storage of the right coupling.
0256    */
0257   Complex _right;
0258 
0259 };
0260 }
0261 
0262 }
0263 #endif /* ThePEG_RFSVertex_H */