Herwig++
2.7.0
|
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 */