Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // VVVSVertex.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_VVVSVertex_H
0010 #define ThePEG_VVVSVertex_H
0011 //
0012 // This is the declaration of the VVVSVertex class.
0013 
0014 #include "ThePEG/Helicity/Vertex/AbstractVVVSVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0016 #include "VVVSVertex.fh"
0017 
0018 namespace ThePEG {
0019 namespace Helicity{
0020   
0021 /** \ingroup Helicity
0022  *
0023  *  The VVVSVertex class is the base class for triple vector scalar vertices.
0024  *  It inherits from the AbstractVVVSVertex class for the storage of the 
0025  *  particles allowed at the vertex. Given this vertice has dimenison
0026  *  5 the two forms possible for either a scalar or pseudoscalar particle.
0027  *
0028  *  Classes which implement a specific vertex should inherit from this and
0029  *  implement the virtual setCoupling member.
0030  *
0031  *  The form of the vertex is
0032  *  \f[ig\left[  (p_1-p_2)^\gamma g^{\alpha\beta }
0033  *              +(p_2-p_3)^\alpha g^{\beta \gamma}
0034  *              +(p_3-p_1)^\beta  g^{\alpha\gamma}
0035  *   \right]\epsilon_{1\alpha}\epsilon_{2\beta}\epsilon_{3\gamma}\f]
0036  *  for a scalar particle and
0037  *  \f[ig\epsilon^{\delta\alpha\beta\gamma}\epsilon_{1\alpha}\epsilon_{2\beta}\epsilon_{3\gamma}
0038  *     (p_1+p_2+p_3)_\delta\f]
0039  *  @see AbstractVVVSVertex
0040  */
0041 class VVVSVertex: public AbstractVVVSVertex {
0042 
0043 public :
0044   
0045   /**
0046    * Default constructor
0047    */
0048   VVVSVertex() : scalar_(true) {}
0049     
0050 public:
0051  
0052   /** @name Functions used by the persistent I/O system. */
0053   //@{
0054   /**
0055    * Function used to write out object persistently.
0056    * @param os the persistent output stream written to.
0057    */
0058   void persistentOutput(PersistentOStream & os) const;
0059 
0060   /**
0061    * Function used to read in object persistently.
0062    * @param is the persistent input stream read from.
0063    * @param version the version number of the object when written.
0064    */
0065   void persistentInput(PersistentIStream & is, int version);
0066   //@}
0067 
0068   /**
0069    * Standard Init function used to initialize the interfaces.
0070    */
0071   static void Init();
0072   
0073 public:
0074   
0075   /**
0076    * Members to calculate the helicity amplitude expressions for vertices
0077    * and off-shell particles.
0078    */
0079   //@{
0080   /**
0081    * Evaluate the vertex.
0082    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0083    * @param vec1 The wavefunction for the first  vector.
0084    * @param vec2 The wavefunction for the second vector.
0085    * @param vec3 The wavefunction for the third  vector.
0086    * @param sca  The wavefunction for the scalar particle
0087    */
0088   Complex evaluate(Energy2 q2, const VectorWaveFunction & vec1,
0089            const VectorWaveFunction & vec2,
0090            const VectorWaveFunction & vec3,
0091            const ScalarWaveFunction & sca);
0092 
0093   /**
0094    * Evaluate the off-shell vector coming from the vertex.
0095    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0096    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0097    * @param out The ParticleData pointer for the off-shell vector.
0098    * @param vec2 The wavefunction for the second vector.
0099    * @param vec3 The wavefunction for the third  vector.
0100    * @param sca  The wavefunction for the scalar particle
0101    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0102    * object
0103    * @param width The width of the off-shell particle if not taken from the ParticleData
0104    * object
0105    */
0106   VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0107                   const VectorWaveFunction & vec2,
0108                   const VectorWaveFunction & vec3,
0109                   const ScalarWaveFunction & sca,
0110                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0111 
0112   /**
0113    * Evaluate the off-shell scalar coming from the vertex.
0114    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0115    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0116    * @param out The ParticleData pointer for the off-shell scalar.
0117    * @param vec1 The wavefunction for the first vector.
0118    * @param vec2 The wavefunction for the second vector.
0119    * @param vec3 The wavefunction for the third  vector.
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   ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0126                   const VectorWaveFunction & vec1,
0127                   const VectorWaveFunction & vec2,
0128                   const VectorWaveFunction & vec3,
0129                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0130   //@}
0131 
0132   /**
0133    *   Set coupling methods
0134    */
0135   //@{
0136   /**
0137    * Calculate the couplings for a three point interaction.
0138    * This method is virtual and must be implemented in 
0139    * classes inheriting from this.
0140    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0141    * @param part1 The ParticleData pointer for the first  vector.
0142    * @param part2 The ParticleData pointer for the second vector.
0143    * @param part3 The ParticleData pointer for the third  vector.
0144    * @param part4 The ParticleData pointer for the scalar
0145    */
0146   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0147                tcPDPtr part2,tcPDPtr part3,
0148                tcPDPtr part4)=0;
0149 
0150   /**
0151    * Dummy setCouplings for a three point interaction 
0152    * This method is virtual and must be implemented in 
0153    * classes inheriting from this.
0154    */
0155   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr) {
0156     assert(false);
0157   }
0158   //@}
0159 
0160 protected:
0161 
0162   /**
0163    *  Set the type of the vertex
0164    */
0165   void scalar(bool in) {scalar_=in;}
0166 
0167 private:
0168   
0169   /**
0170    * Private and non-existent assignment operator.
0171    */
0172   VVVSVertex & operator=(const VVVSVertex &) = delete;
0173 
0174   /**
0175    *   Whether or ont the vertex has a scalar or pseudoscalr particle
0176    */
0177   bool scalar_;
0178   
0179 };
0180 
0181 }
0182 }
0183 
0184 #endif /* ThePEG_VVVSVertex_H */