Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // VVVVVertex.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_VVVVVertex_H
0010 #define ThePEG_VVVVVertex_H
0011 //
0012 // This is the declaration of the VVVVVertex class.
0013 
0014 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
0015 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0016 #include "VVVVVertex.fh"
0017 
0018 namespace ThePEG {
0019 namespace Helicity{
0020 
0021 /** \ingroup Helicity
0022  *
0023  * This is the implementation of the four vector vertex. 
0024  * It is based on the AbstractVVVVVertex class for the storage of particles 
0025  * which are allowed to interact at the vertex.
0026  * Classes implementation a specific vertex should inherit from this 
0027  * one and implement the virtual setCoupling member.
0028  *
0029  * The form of the vertex is
0030  * \f[ic^2\left[
0031  *   2\epsilon_1\cdot\epsilon_2\epsilon_3\cdot\epsilon_4-
0032  *   \epsilon_1\cdot\epsilon_3\epsilon_2\cdot\epsilon_4-
0033  *   \epsilon_1\cdot\epsilon_4\epsilon_2\cdot\epsilon_3
0034  * \right]\f]
0035  *  optional the additional diagrams from the three point vertices can be included.
0036  *
0037  * @see AbstractVVVVVertex
0038  */
0039 class VVVVVertex: public AbstractVVVVVertex {
0040   
0041 public:
0042 
0043   /**
0044    * Standard Init function used to initialize the interfaces.
0045    */
0046   static void Init();
0047   
0048 public:
0049   
0050   /**
0051    * Members to calculate the helicity amplitude expressions for vertices
0052    * and off-shell particles.
0053    */
0054   //@{
0055   /**
0056    * Evaluate the vertex.
0057    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0058    * @param iopt Evaluation option, 0 just evaluate the four point vertex, 1
0059    * include all the three point diagrams as well.
0060    * @param vec1 The wavefunction for the first  vector.
0061    * @param vec2 The wavefunction for the second vector.
0062    * @param vec3 The wavefunction for the third  vector.
0063    * @param vec4 The wavefunction for the fourth vector.
0064    */
0065   Complex evaluate(Energy2 q2, int iopt,
0066            const VectorWaveFunction & vec1, const VectorWaveFunction & vec2,
0067            const VectorWaveFunction & vec3, const VectorWaveFunction & vec4);
0068   //@}
0069 
0070   /**
0071    *   Set coupling methods
0072    */
0073   //@{
0074   /**
0075    * Dummy for a three point interaction.
0076    */
0077   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr) {
0078     assert(false);
0079   }
0080 
0081   /**
0082    * Calculate the couplings for a four point interaction.
0083    * This method is virtual and must be implemented in 
0084    * classes inheriting from this.
0085    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0086    * @param part1 The ParticleData pointer for the first  particle.
0087    * @param part2 The ParticleData pointer for the second particle.
0088    * @param part3 The ParticleData pointer for the third  particle.
0089    * @param part4 The ParticleData pointer for the fourth particle.
0090    */
0091   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
0092                tcPDPtr part4)=0;
0093   //@}
0094   
0095 protected:
0096   
0097   /**
0098    * Set the order of the particles.
0099    * @param id1 The PDG code of the first  particle.
0100    * @param id2 The PDG code of the second particle.
0101    * @param id3 The PDG code of the third  particle.
0102    * @param id4 The PDG code of the fourth particle.
0103    */
0104   void setOrder(int id1,int id2,int id3,int id4) {
0105     _iorder[0]=id1;
0106     _iorder[1]=id2;
0107     _iorder[2]=id3;
0108     _iorder[3]=id4;
0109   }
0110 
0111   /**
0112    * Set the type of the vertex.
0113    * @param itype The type of vertex (QCD=1 or electroweak=2).
0114    */
0115   void setType(int itype) {
0116     _itype=itype;
0117   }
0118 
0119   /**
0120    * Set the intermediate particles if including s/u/t channel terms.
0121    * @param part1 The ParticleData pointer for the first  particle.
0122    * @param part2 The ParticleData pointer for the second particle.
0123    * @param c1 The coupling for the first  particle.
0124    * @param c2 The coupling for the second particle.
0125    */
0126   void setIntermediate(tcPDPtr part1,tcPDPtr part2,Complex c1,Complex c2) {
0127     _inter[0]=part1;
0128     _inter[1]=part2;
0129     _coup[0]=c1;
0130     _coup[1]=c2;
0131   }
0132   
0133 private:
0134   
0135   /**
0136    * Private and non-existent assignment operator.
0137    */
0138   VVVVVertex & operator=(const VVVVVertex &) = delete;
0139   
0140 private:
0141 
0142   /**
0143    * Type of vertex 1=QCD 2=EW.
0144    */
0145   int _itype;
0146 
0147   /**  
0148    * Order of the particles.
0149    */
0150   array<int,4> _iorder;
0151 
0152   /**
0153    *  Intermediate particles
0154    */
0155   array<tcPDPtr,2> _inter;
0156 
0157   /**
0158    * Couplings of the intermediate particles.
0159    */
0160   array<Complex,2> _coup;
0161 
0162 };
0163 }
0164 }
0165 
0166 namespace ThePEG {
0167 
0168 }
0169 #endif /* ThePEG_VVVVVertex_H */