Herwig++
2.7.0
|
00001 // -*- C++ -*- 00002 #ifndef HERWIG_SMZFermionsPOWHEGDecayer_H 00003 #define HERWIG_SMZFermionsPOWHEGDecayer_H 00004 // 00005 // This is the declaration of the SMZFermionsPOWHEGDecayer class. 00006 // 00007 00008 #include "SMZDecayer.h" 00009 #include "Herwig++/Utilities/Maths.h" 00010 00011 namespace Herwig { 00012 00013 using namespace ThePEG; 00014 00015 00022 class SMZFermionsPOWHEGDecayer: public SMZDecayer{ 00023 00024 public: 00025 00029 SMZFermionsPOWHEGDecayer(); 00030 00034 virtual POWHEGType hasPOWHEGCorrection() {return FSR;} 00035 00039 virtual HardTreePtr generateHardest(ShowerTreePtr); 00040 00045 virtual double me2(const int ichan, const Particle & part, 00046 const ParticleVector & decay, MEOption meopt) const; 00047 00048 public: 00049 00056 void persistentOutput(PersistentOStream & os) const; 00057 00063 void persistentInput(PersistentIStream & is, int version); 00065 00072 static void Init(); 00073 00074 protected: 00075 00082 virtual IBPtr clone() const; 00083 00088 virtual IBPtr fullclone() const; 00090 00091 protected: 00092 00100 virtual void doinit(); 00102 00103 private: 00104 00109 static ClassDescription<SMZFermionsPOWHEGDecayer> initSMZFermionsPOWHEGDecayer; 00110 00115 SMZFermionsPOWHEGDecayer & operator=(const SMZFermionsPOWHEGDecayer &); 00116 00120 AbstractFFVVertexPtr FFZVertex() const {return FFZVertex_;} 00121 00125 AbstractFFVVertexPtr FFGVertex() const {return FFGVertex_;} 00126 00130 double calculateRealEmission(double x1, double x2, 00131 vector<PPtr> hardProcess, 00132 double phi, 00133 bool subtract, 00134 int emitter) const; 00135 00139 double calculateRealEmission(double x1, double x2, 00140 vector<PPtr> hardProcess, 00141 double phi, 00142 bool subtract) const; 00143 00147 bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT) const; 00148 00152 InvEnergy calculateJacobian(double x1, double x2, Energy pT) const; 00153 00157 double meRatio(vector<cPDPtr> partons, 00158 vector<Lorentz5Momentum> momenta, 00159 unsigned int iemitter,bool subtract) const; 00163 double loME(const vector<cPDPtr> & partons, 00164 const vector<Lorentz5Momentum> & momenta) const; 00165 00169 InvEnergy2 realME(const vector<cPDPtr> & partons, 00170 const vector<Lorentz5Momentum> & momenta) const; 00171 00175 bool getEvent(vector<PPtr> hardProcess); 00176 00177 private: 00178 00182 AbstractFFVVertexPtr FFZVertex_; 00183 00187 AbstractFFVVertexPtr FFGVertex_; 00188 00192 double CF_; 00193 00197 mutable Energy mZ_; 00198 00202 mutable double mu_; 00203 00207 mutable double mu2_; 00208 00212 mutable double aS_; 00213 00217 mutable Energy2 scale_; 00218 00226 tcPDPtr gluon_; 00227 00231 Energy pTmin_; 00232 00233 // radiative variables (pt,y) 00234 Energy pT_; 00235 00239 vector<tcPDPtr> partons_; 00240 00244 vector<Lorentz5Momentum> quark_; 00245 00249 Lorentz5Momentum gauge_; 00250 00254 PPtr zboson_; 00255 00259 Energy2 mz2_; 00261 }; 00262 00263 } 00264 00265 #include "ThePEG/Utilities/ClassTraits.h" 00266 00267 namespace ThePEG { 00268 00273 template <> 00274 struct BaseClassTrait<Herwig::SMZFermionsPOWHEGDecayer,1> { 00276 typedef Herwig::SMZDecayer NthBase; 00277 }; 00278 00281 template <> 00282 struct ClassTraits<Herwig::SMZFermionsPOWHEGDecayer> 00283 : public ClassTraitsBase<Herwig::SMZFermionsPOWHEGDecayer> { 00285 static string className() { return "Herwig::SMZFermionsPOWHEGDecayer"; } 00293 static string library() { return "HwPerturbativeDecay.so"; } 00294 }; 00295 00298 } 00299 00300 #endif /* HERWIG_SMZFermionsPOWHEGDecayer_H */