|
|
|||
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 */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|