herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
MEqq2ZPrime2ff.h
00001 // -*- C++ -*-
00002 #ifndef RADIATIVEZPRIME_MEqq2ZPrime2ff_H
00003 #define RADIATIVEZPRIME_MEqq2ZPrime2ff_H
00004 //
00005 // This is the declaration of the MEqq2ZPrime2ff class.
00006 //
00007 
00008 #include "Herwig++/MatrixElement/HwMEBase.h"
00009 #include "Herwig++/MatrixElement/ProductionMatrixElement.h"
00010 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
00011 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
00012 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
00013 
00014 namespace RadiativeZPrime {
00015 
00016 using namespace ThePEG;
00017 using namespace Herwig;
00018 
00026 class MEqq2ZPrime2ff: public HwMEBase {
00027 
00028 public:
00029 
00033   MEqq2ZPrime2ff();
00034 
00041   virtual unsigned int orderInAlphaS() const;
00042 
00047   virtual unsigned int orderInAlphaEW() const;
00048 
00056   virtual double me2() const;
00057 
00061   virtual Energy2 scale() const;
00062 
00066   virtual void getDiagrams() const;
00067 
00076   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
00077 
00085   virtual Selector<const ColourLines *>
00086   colourGeometries(tcDiagPtr diag) const;
00087 
00091   virtual void constructVertex(tSubProPtr);
00093 
00094 public:
00095 
00102   void persistentOutput(PersistentOStream & os) const;
00103 
00109   void persistentInput(PersistentIStream & is, int version);
00111 
00118   static void Init();
00119 
00120 protected:
00121 
00128   inline virtual IBPtr clone() const {return new_ptr(*this);}
00129 
00134   inline virtual IBPtr fullclone() const {return new_ptr(*this);}
00136 
00137 protected:
00138 
00147   double qqME(vector<SpinorWaveFunction>    & fin ,
00148                  vector<SpinorBarWaveFunction> & ain ,
00149                  vector<SpinorBarWaveFunction> & fout,
00150                  vector<SpinorWaveFunction>    & aout,
00151                  bool me) const;
00152 
00153 protected:
00154 
00162   virtual void doinit();
00164 
00165 private:
00166 
00171   static ClassDescription<MEqq2ZPrime2ff> initMEqq2ZPrime2ff;
00172 
00177   MEqq2ZPrime2ff & operator=(const MEqq2ZPrime2ff &);
00178 
00179 private:
00180 
00188   AbstractFFVVertexPtr _theFFZPrimeVertex;
00189 
00193   AbstractFFVVertexPtr _theFFZVertex;
00194 
00198   AbstractFFVVertexPtr _theFFPVertex;
00200 
00208   tcPDPtr _zPrime;
00209 
00213   tcPDPtr _z0;
00214 
00218   tcPDPtr _gamma;
00220 
00228   unsigned int _maxflavour;
00229 
00233   unsigned int _gammaZ;
00234   
00238   unsigned int _process;
00240 
00244   ProductionMatrixElement _me;
00245 };
00246 
00247 }
00248 
00249 #include "ThePEG/Utilities/ClassTraits.h"
00250 
00251 namespace ThePEG {
00252 
00257 template <>
00258 struct BaseClassTrait<RadiativeZPrime::MEqq2ZPrime2ff,1> {
00260   typedef Herwig::HwMEBase NthBase;
00261 };
00262 
00265 template <>
00266 struct ClassTraits<RadiativeZPrime::MEqq2ZPrime2ff>
00267   : public ClassTraitsBase<RadiativeZPrime::MEqq2ZPrime2ff> {
00269   static string className() { return "RadiativeZPrime::MEqq2ZPrime2ff"; }
00277   static string library() { return "RadiativeZPrime.so"; }
00278 };
00279 
00282 }
00283 
00284 #endif /* RADIATIVEZPRIME_MEqq2ZPrime2ff_H */