herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
MEee2Z.h
00001 // -*- C++ -*-
00002 //
00003 // MEee2Z.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
00004 // Copyright (C) 2002-2011 The Herwig Collaboration
00005 //
00006 // Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
00007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
00008 //
00009 #ifndef HERWIG_MEee2Z_H
00010 #define HERWIG_MEee2Z_H
00011 //
00012 // This is the declaration of the <!id>MEee2Z<!!id> class.
00013 //
00014 
00015 #include "ThePEG/MatrixElement/ME2to2Base.h"
00016 #include "ThePEG/MatrixElement/MEBase.h"
00017 #include "Herwig++/Models/RSModel/RSModel.h"
00018 #include "ThePEG/Repository/EventGenerator.h"
00019 #include "ThePEG/PDT/EnumParticles.h"
00020 #include "ThePEG/Utilities/Rebinder.h"
00021 #include "Herwig++/MatrixElement/ProductionMatrixElement.h"
00022 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
00023 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
00024 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
00025 
00026 namespace Herwig {
00027 using namespace ThePEG;
00028 using Helicity::SpinorWaveFunction;
00029 using Helicity::SpinorBarWaveFunction;
00030 using Helicity::VectorWaveFunction;
00031 
00036 class MEee2Z: public MEBase {
00037 
00038 public:
00039 
00046   virtual unsigned int orderInAlphaS() const;
00047 
00052   virtual unsigned int orderInAlphaEW() const;
00053 
00061   virtual double me2() const;
00062 
00066   virtual Energy2 scale() const;
00067 
00071   virtual void getDiagrams() const;
00072 
00081   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
00082 
00090   virtual Selector<const ColourLines *>
00091   colourGeometries(tcDiagPtr diag) const;
00092 
00096   virtual void constructVertex(tSubProPtr);
00101   virtual int nDim() const;
00102 
00110   virtual bool generateKinematics(const double * r);
00111 
00117   virtual CrossSection dSigHatDR() const;
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 
00154   inline virtual IBPtr clone() const {return new_ptr(*this);}
00155 
00160   inline virtual IBPtr fullclone() const {return new_ptr(*this);}
00162 
00163 protected:
00164 
00172   virtual void doinit();
00174 
00175 private:
00176   
00184   ProductionMatrixElement HelicityME(vector<SpinorWaveFunction> fin,
00185                                      vector<SpinorBarWaveFunction> ain,
00186                                      vector<VectorWaveFunction> vout,double& me) const;
00187 
00188 private:
00189 
00194   static ClassDescription<MEee2Z> initMEee2Z;
00195 
00200   MEee2Z & operator=(const MEee2Z &);
00201 
00202 private:
00203 
00207   AbstractFFVVertexPtr _theFFZVertex;
00208 
00209 };
00210 
00211 }
00212 
00213 
00214 #include "ThePEG/Utilities/ClassTraits.h"
00215 
00216 namespace ThePEG {
00217 
00222 template <>
00223 struct BaseClassTrait<Herwig::MEee2Z,1> {
00225   typedef MEBase NthBase;
00226 };
00227 
00230 template <>
00231 struct ClassTraits<Herwig::MEee2Z>
00232   : public ClassTraitsBase<Herwig::MEee2Z> {
00234   static string className() { return "Herwig::MEee2Z"; }
00238   static string library() { return "LeptonME.so"; }
00239 };
00240 
00243 }
00244 
00245 #endif /* HERWIG_MEee2Z_H */