Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // SSSVertex.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_SSSVertex_H
0010 #define ThePEG_SSSVertex_H
0011 //
0012 // This is the declaration of the SSSVertex class.
0013 //
0014 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0016 #include "SSSVertex.fh"
0017 
0018 namespace ThePEG {
0019 namespace Helicity {
0020 
0021 /** \ingroup Helicity
0022  *  
0023  *  The SSSVertex class is the implementation of the interaction of
0024  *  three scalars. It inherits from the AbstractSSSVertex class for the storage of the
0025  *  particles interacting at the vertex and implements the helicity calculations.
0026  *
0027  *  Any classes implementating the vertex should inherit from it and implement
0028  *  the virtual set Coupling member.
0029  *
0030  *  The form of the vertex is
0031  * \f[ic\phi_1\phi_2\phi_3\f]
0032  *
0033  *  @see AbstractSSSVertex
0034  */
0035 class SSSVertex: public AbstractSSSVertex {
0036 
0037 public:
0038 
0039   /**
0040    * Standard Init function used to initialize the interfaces.
0041    */
0042   static void Init();
0043   
0044 public:
0045 
0046   /**
0047    * Members to calculate the helicity amplitude expressions for vertices
0048    * and off-shell particles.
0049    */
0050   //@{  
0051   /**
0052    * Evaluate the vertex.
0053    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0054    * @param sca1 The wavefunction for the first  scalar.
0055    * @param sca2 The wavefunction for the second scalar.
0056    * @param sca3 The wavefunction for the third  scalar.
0057    */
0058   Complex evaluate(Energy2 q2,const ScalarWaveFunction & sca1,
0059            const ScalarWaveFunction & sca2,const ScalarWaveFunction & sca3);
0060 
0061   /**
0062    * Evaluate the off-shell scalar coming from the vertex.
0063    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0064    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0065    * @param out The ParticleData pointer for the off-shell scalar.
0066    * @param sca1 The wavefunction for the first  scalar.
0067    * @param sca2 The wavefunction for the second scalar.
0068    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0069    * object
0070    * @param width The width of the off-shell particle if not taken from the ParticleData
0071    * object
0072    */
0073   ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, 
0074                   const ScalarWaveFunction & sca1,
0075                   const ScalarWaveFunction & sca2,
0076                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0077   //@}
0078 
0079   /**
0080    *   Set coupling methods
0081    */
0082   //@{
0083   /**
0084    * Calculate the couplings for a three point interaction.
0085    * This method is virtual and must be implemented in 
0086    * classes inheriting from this.
0087    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0088    * @param part1 The ParticleData pointer for the first  particle.
0089    * @param part2 The ParticleData pointer for the second particle.
0090    * @param part3 The ParticleData pointer for the third  particle.
0091    */
0092   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0093                tcPDPtr part2,tcPDPtr part3)=0;
0094 
0095   /**
0096    * Dummy setCouplings for a four point interaction 
0097    * This method is virtual and must be implemented in 
0098    * classes inheriting from this.
0099    */
0100   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0101     assert(false);
0102   }
0103   //@}
0104 
0105 private:
0106   
0107   /**
0108    * Private and non-existent assignment operator.
0109    */
0110   SSSVertex & operator=(const SSSVertex &) = delete;
0111   
0112 };
0113 
0114 }
0115 
0116 }
0117 #endif /* ThePEG_SSSVertex_H */