herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
MEff2sv.h
00001 // -*- C++ -*-
00002 //
00003 // MEff2sv.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_MEff2sv_H
00010 #define HERWIG_MEff2sv_H
00011 //
00012 // This is the declaration of the MEff2sv class.
00013 //
00014 
00015 #include "GeneralHardME.h"
00016 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
00017 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
00018 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
00019 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
00020 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
00021 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
00022 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
00023 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
00024 #include "Herwig++/MatrixElement/ProductionMatrixElement.h"
00025 
00026 namespace Herwig {
00027 using namespace ThePEG;
00028 using Helicity::SpinorWaveFunction;
00029 using Helicity::SpinorBarWaveFunction;
00030 using Helicity::VectorWaveFunction;
00031 using Helicity::ScalarWaveFunction;
00032 
00043 class MEff2sv: public GeneralHardME {
00044 
00045 public:
00046 
00052   typedef vector<SpinorWaveFunction> SpinorVector;
00053 
00057   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
00058 
00062   typedef vector<VectorWaveFunction> VBVector;
00064 
00065 public:
00066 
00070   MEff2sv() : scalar_(0), vector_(0), fermion_(0) {}
00071 
00081   virtual double me2() const;
00083 
00088   virtual void constructVertex(tSubProPtr sub);
00089 
00090 public:
00091 
00098   void persistentOutput(PersistentOStream & os) const;
00099 
00105   void persistentInput(PersistentIStream & is, int version);
00107 
00114   static void Init();
00115 
00116 protected:
00117 
00125   virtual void doinit();
00127 
00128 protected:
00129 
00136   virtual IBPtr clone() const {return new_ptr(*this);}
00137 
00142   virtual IBPtr fullclone() const {return new_ptr(*this);}
00144 
00145 private:
00146 
00151   static ClassDescription<MEff2sv> initMEff2sv;
00152 
00157   MEff2sv & operator=(const MEff2sv &);
00158 
00159 private:
00160 
00175   ProductionMatrixElement
00176   ffb2svHeME(SpinorVector & sp, SpinorBarVector & spbar,
00177              ScalarWaveFunction & sca, VBVector & vec, 
00178              double & me2,bool first) const;
00180 
00181 
00182 private:
00183 
00188   vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_;
00189 
00194   vector<pair<AbstractFFVVertexPtr, AbstractVVSVertexPtr> > vector_;
00195   
00200   vector<pair<AbstractFFSVertexPtr, AbstractFFVVertexPtr> > fermion_;
00201 };
00202 
00203 }
00204 
00205 #include "ThePEG/Utilities/ClassTraits.h"
00206 
00207 namespace ThePEG {
00208 
00213 template <>
00214 struct BaseClassTrait<Herwig::MEff2sv,1> {
00216   typedef Herwig::GeneralHardME NthBase;
00217 };
00218 
00221 template <>
00222 struct ClassTraits<Herwig::MEff2sv>
00223   : public ClassTraitsBase<Herwig::MEff2sv> {
00225   static string className() { return "Herwig::MEff2sv"; }
00226 };
00227 
00230 }
00231 
00232 #endif /* HERWIG_MEff2sv_H */