herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
MEqq2ZPrime2ZGamma.h
00001 // -*- C++ -*-
00002 #ifndef RADIATIVEZPRIME_MEqq2ZPrime2ZGammma_H
00003 #define RADIATIVEZPRIME_MEqq2ZPrime2ZGamma_H
00004 //
00005 // This is the declaration of the MEqq2ZPrime2ZGamma class.
00006 //
00007 
00008 #include "Herwig++/MatrixElement/HwMEBase.h"
00009 #include "Herwig++/MatrixElement/ProductionMatrixElement.h"
00010 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
00011 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
00012 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.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 MEqq2ZPrime2ZGamma: public HwMEBase {
00029 
00030 public:
00031 
00035   MEqq2ZPrime2ZGamma();
00036 
00043   virtual unsigned int orderInAlphaS() const;
00044 
00049   virtual unsigned int orderInAlphaEW() const;
00050 
00058   virtual double me2() const;
00059 
00063   virtual Energy2 scale() const;
00064 
00068   virtual void getDiagrams() const;
00069 
00078   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
00079 
00087   virtual Selector<const ColourLines *>
00088   colourGeometries(tcDiagPtr diag) const;
00089 
00093   virtual void constructVertex(tSubProPtr);
00095 
00096 
00097 public:
00098 
00105   void persistentOutput(PersistentOStream & os) const;
00106 
00112   void persistentInput(PersistentIStream & is, int version);
00114 
00121   static void Init();
00122 
00123 protected:
00124 
00131   inline virtual IBPtr clone() const { return new_ptr(*this);}
00132 
00137   inline virtual IBPtr fullclone() const { return new_ptr(*this);}
00139 
00140 protected:
00141 
00150   double qqME(vector<SpinorWaveFunction>    & fin ,
00151                  vector<SpinorBarWaveFunction> & ain ,
00152                  vector<VectorWaveFunction> & Zout,
00153                  vector<VectorWaveFunction> & gammaout,
00154                  bool me) const;
00155 
00156 protected:
00157 
00165   virtual void doinit();
00167 
00168 private:
00169 
00174   static ClassDescription<MEqq2ZPrime2ZGamma> initMEqq2ZPrime2ZGamma;
00175 
00180   MEqq2ZPrime2ZGamma & operator=(const MEqq2ZPrime2ZGamma &);
00181 
00182 private:
00183 
00191   AbstractFFVVertexPtr _theFFZPrimeVertex;
00192 
00196   AbstractVVVVertexPtr _theGammaZPrimeZVertex;
00198 
00202   tcPDPtr _zPrime;
00203 
00211   unsigned int _maxflavour;
00213 
00217   ProductionMatrixElement _me;
00218 
00219 };
00220 
00221 }
00222 
00223 #include "ThePEG/Utilities/ClassTraits.h"
00224 
00225 namespace ThePEG {
00226 
00231 template <>
00232 struct BaseClassTrait<RadiativeZPrime::MEqq2ZPrime2ZGamma,1> {
00234   typedef Herwig::HwMEBase NthBase;
00235 };
00236 
00239 template <>
00240 struct ClassTraits<RadiativeZPrime::MEqq2ZPrime2ZGamma>
00241   : public ClassTraitsBase<RadiativeZPrime::MEqq2ZPrime2ZGamma> {
00243   static string className() { return "RadiativeZPrime::MEqq2ZPrime2ZGamma"; }
00251   static string library() { return "RadiativeZPrime.so"; }
00252 };
00253 
00256 }
00257 
00258 #endif /* RADIATIVEZPRIME_MEqq2ZPrime2ZGamma_H */