Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HELICITY_GeneralVVSVertex_H
0003 #define HELICITY_GeneralVVSVertex_H
0004 //
0005 // This is the declaration of the GeneralVVSVertex class.
0006 //
0007 
0008 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0009 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0010 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0011 #include "GeneralVVSVertex.fh"
0012 
0013 namespace ThePEG {
0014 namespace Helicity {
0015 
0016 using namespace ThePEG;
0017 
0018 /**
0019  * The GeneralVVSVertex class implements a
0020  * general Vector-Vector-Scalar vertex allowing for decay modes 
0021  * that only enter at the one-loop level
0022  * 
0023  * The loop integral is calculated by Passarino-Veltman reduction 
0024  * and the coefficients are stored here. They must be calculated
0025  * in the inheriting class along with implementation of the
0026  * setCoupling member.
0027  *
0028  *  The vertex takes the form
0029  *  \f[  a_{00}g^{\mu\nu}p_1\cdot p_2 + a_{11}p_1^\mu p_1^\nu
0030  *     + a_{12}p_1^\mu p_2^\nu + a_{21}p_2^\mu p_1^\nu
0031  *     + a_{22}p_2^\mu p_2^\nu +a_e\epsilon^{p_1 \mu \nu p_2}\f]
0032  *
0033  */
0034 class GeneralVVSVertex: public AbstractVVSVertex {
0035 
0036 public:
0037 
0038   /**
0039    * The default constructor.
0040    */
0041   GeneralVVSVertex() : _a00(1), 
0042                _a11(0), _a12(0), 
0043                _a21(0), _a22(0),
0044                _aEp(0)
0045   {}
0046 
0047   /**
0048    * The standard Init function used to initialize the interfaces.
0049    * Called exactly once for each class by the class description system
0050    * before the main function starts or
0051    * when this class is dynamically loaded.
0052    */
0053   static void Init();
0054 
0055 public:
0056   
0057   /**
0058    * Members to calculate the helicity amplitude expressions for vertices
0059    * and off-shell particles.
0060    */
0061   //@{
0062   /**
0063    * Evaluate the vertex.
0064    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0065    * @param vec1 The wavefunction for the first  vector.
0066    * @param vec2 The wavefunction for the second vector.
0067    * @param sca3 The wavefunction for the scalar.
0068    */
0069   virtual Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1,
0070                const VectorWaveFunction & vec2,
0071                const ScalarWaveFunction & sca3);
0072 
0073   /**
0074    * Evaluate the off-shell vector coming from the vertex.
0075    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0076    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0077    * @param out The ParticleData pointer for the off-shell vector.
0078    * @param vec2 The wavefunction for the vector.
0079    * @param sca3 The wavefunction for the scalar.
0080    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0081    * object
0082    * @param width The width of the off-shell particle if not taken from the ParticleData
0083    * object
0084    */
0085   virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0086                       const VectorWaveFunction & vec2,
0087                       const ScalarWaveFunction & sca3,
0088                       complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0089 
0090   /**
0091    * Evaluate the off-shell scalar coming from the vertex.
0092    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0093    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0094    * @param out The ParticleData pointer for the off-shell scalar.
0095    * @param vec1 The wavefunction for the first  vector.
0096    * @param vec2 The wavefunction for the second vector.
0097    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0098    * object
0099    * @param width The width of the off-shell particle if not taken from the ParticleData
0100    * object
0101    */
0102   virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0103                       const VectorWaveFunction & vec1,
0104                       const VectorWaveFunction & vec2,
0105                       complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0106   //@}
0107 
0108   /**
0109    *   Set coupling methods
0110    */
0111   //@{
0112   /**
0113    * Calculate the couplings for a three point interaction.
0114    * This method is virtual and must be implemented in 
0115    * classes inheriting from this.
0116    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0117    * @param part1 The ParticleData pointer for the first  particle.
0118    * @param part2 The ParticleData pointer for the second particle.
0119    * @param part3 The ParticleData pointer for the third  particle.
0120    */
0121   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0122                tcPDPtr part2,tcPDPtr part3)=0;
0123 
0124   /**
0125    * Dummy setCouplings for a four point interaction 
0126    * This method is virtual and must be implemented in 
0127    * classes inheriting from this.
0128    */
0129   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0130     assert(false);
0131   }
0132   //@}
0133 
0134 public:
0135 
0136   /**@name Set and Get tensor coefficients.*/
0137   //@{
0138   /**
0139    * Access coefficient of \f$g^{\mu\nu}\f$
0140    */
0141   Complex a00() const {return _a00;}
0142       
0143   /**
0144    * Access coefficient of \f$p_1^\mu p_1^\nu\f$
0145    */
0146   Complex a11() const {return _a11;}
0147       
0148   /**
0149    * Access coefficient of \f$p_1^\mu p_2^\nu\f$
0150    */
0151   Complex a12() const {return _a12;}
0152       
0153   /**
0154    * Access coefficient of \f$p_2^\mu p_1^\nu\f$
0155    */
0156   Complex a21() const {return _a21;}
0157       
0158   /**
0159    * Access coefficient of \f$p_2^\mu p_2^\nu\f$
0160    */
0161   Complex a22() const {return _a22;}
0162       
0163   /**
0164    * Access coefficient of \f$\epsilon^{\mu\nu\alpha\beta}p_1\alpha p_2\beta\f$
0165    */
0166   Complex aEp() const {return _aEp;}
0167       
0168   /**
0169    * Set tensor coefficient of \f$g^{\mu\nu}\f$
0170    */
0171   void a00(const Complex & val) {_a00 = val;}
0172       
0173   /**
0174    * Set tensor coefficient of \f$p_1^\mu p_1^\nu\f$
0175    */
0176   void a11(const Complex & val) {_a11 = val;}
0177       
0178   /**
0179    * Set tensor coefficient of \f$p_1^\mu p_2^\nu\f$
0180    */
0181   void a12(const Complex & val) {_a12 = val;}
0182       
0183   /**
0184    * Set tensor coefficient of \f$p_2^\mu p_1^\nu\f$
0185    */
0186   void a21(const Complex & val) {_a21 = val;}
0187       
0188   /**
0189    * Set tensor coefficient of \f$p_2^\mu p_2^\nu\f$
0190    */ 
0191   void a22(const Complex & val) {_a22 = val;}
0192       
0193   /**
0194    * Set tensor coefficient of \f$\epsilon^{\mu\nu\alpha\beta}p_1\alpha p_2\beta\f$
0195    */
0196   void aEp(const Complex & val) {_aEp = val;}
0197   //@}
0198 
0199 private:
0200 
0201   /**
0202    * The assignment operator is private and must never be called.
0203    * In fact, it should not even be implemented.
0204    */
0205   GeneralVVSVertex & operator=(const GeneralVVSVertex &) = delete;
0206 
0207       
0208 private:
0209   
0210   /** @name Store tensor coefficients.*/
0211   //@{
0212   /**
0213    * Coefficient of \f$g^{\mu\nu}\f$
0214    */
0215   Complex _a00;
0216 
0217   /**
0218    * Coefficient of \f$p_1^\mu p_1^\nu\f$
0219    */
0220   Complex _a11;
0221 
0222   /**
0223    * Coefficient of \f$p_1^\mu p_2^\nu\f$
0224    */
0225   Complex _a12;
0226 
0227   /**
0228    * Coefficient of \f$p_2^\mu p_1^\nu\f$
0229    */
0230   Complex _a21;
0231 
0232   /**
0233    * Coefficient of \f$p_2^\mu p_2^\nu\f$
0234    */
0235   Complex _a22;
0236 
0237   /**
0238    * Coefficient of \f$\epsilon^{\mu\nu\alpha\beta}p_1\alpha p_2\beta\f$
0239    */
0240   Complex _aEp;
0241   //@}
0242 };
0243 
0244 }
0245 }
0246 #endif /* HELICITY_GeneralVVSVertex_H */