Herwig++
2.7.0
|
00001 // -*- C++ -*- 00002 #ifndef RADIATIVEZPRIME_MEqq2ZPrime2ZGamma2ffGamma_H 00003 #define RADIATIVEZPRIME_MEqq2ZPrime2ZGamma2ffGamma_H 00004 // 00005 // This is the declaration of the MEqq2ZPrime2ZGamma2ffGamma class. 00006 // 00007 00008 #include "ThePEG/MatrixElement/MEBase.h" 00009 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" 00010 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" 00011 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" 00012 #include "Herwig++/MatrixElement/ProductionMatrixElement.h" 00013 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" 00014 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.fh" 00015 00016 namespace RadiativeZPrime { 00017 00018 using namespace ThePEG; 00019 using namespace Herwig; 00020 00028 class MEqq2ZPrime2ZGamma2ffGamma: public MEBase { 00029 00030 public: 00031 00037 inline MEqq2ZPrime2ZGamma2ffGamma() :_maxflavour(5) {} 00038 00045 virtual unsigned int orderInAlphaS() const; 00046 00051 virtual unsigned int orderInAlphaEW() const; 00052 00060 virtual double me2() const; 00061 00065 virtual Energy2 scale() const; 00066 00071 virtual int nDim() const; 00072 00081 virtual bool generateKinematics(const double * r); 00082 00087 virtual CrossSection dSigHatDR() const; 00088 00092 virtual void getDiagrams() const; 00093 00102 virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; 00103 00111 virtual Selector<const ColourLines *> 00112 colourGeometries(tcDiagPtr diag) const; 00113 00117 virtual void constructVertex(tSubProPtr); 00119 00120 public: 00121 00128 void persistentOutput(PersistentOStream & os) const; 00129 00135 void persistentInput(PersistentIStream & is, int version); 00137 00144 static void Init(); 00145 00146 protected: 00147 00152 double getCosTheta(double cthmin, double cthmax, const double r); 00153 00167 InvEnergy2 qqbarME(vector<SpinorWaveFunction> & fin, 00168 vector<SpinorBarWaveFunction> & ain, 00169 vector<VectorWaveFunction> & gout, 00170 vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, 00171 bool me=false) const; 00172 00173 protected: 00174 00181 inline virtual IBPtr clone() const {return new_ptr(*this);} 00182 00187 inline virtual IBPtr fullclone() const {return new_ptr(*this);} 00189 00190 protected: 00191 00199 virtual void doinit(); 00201 00202 private: 00203 00208 static ClassDescription<MEqq2ZPrime2ZGamma2ffGamma> initMEqq2ZPrime2ZGamma2ffGamma; 00209 00214 MEqq2ZPrime2ZGamma2ffGamma & operator=(const MEqq2ZPrime2ZGamma2ffGamma &); 00215 00216 private: 00217 00225 AbstractFFVVertexPtr _theFFZVertex; 00229 AbstractFFVVertexPtr _theFFZPrimeVertex; 00230 00234 AbstractVVVVertexPtr _theGammaZPrimeZVertex; 00236 00244 tcPDPtr _z0; 00245 00249 tcPDPtr _zPrime; 00251 00259 unsigned int _maxflavour; 00261 00265 ProductionMatrixElement _me; 00266 00270 Energy2 _mz2; 00271 00272 }; 00273 00274 } 00275 00276 #include "ThePEG/Utilities/ClassTraits.h" 00277 00278 namespace ThePEG { 00279 00284 template <> 00285 struct BaseClassTrait<RadiativeZPrime::MEqq2ZPrime2ZGamma2ffGamma,1> { 00287 typedef MEBase NthBase; 00288 }; 00289 00292 template <> 00293 struct ClassTraits<RadiativeZPrime::MEqq2ZPrime2ZGamma2ffGamma> 00294 : public ClassTraitsBase<RadiativeZPrime::MEqq2ZPrime2ZGamma2ffGamma> { 00296 static string className() { return "RadiativeZPrime::MEqq2ZPrime2ZGamma2ffGamma"; } 00304 static string library() { return "RadiativeZPrime.so"; } 00305 }; 00306 00309 } 00310 00311 #endif /* RADIATIVEZPRIME_MEqq2ZPrime2ZGamma2ffGamma_H */