Herwig++
2.7.0
|
00001 // -*- C++ -*- 00002 #ifndef HERWIG_SMWFermionsPOWHEGDecayer_H 00003 #define HERWIG_SMWFermionsPOWHEGDecayer_H 00004 // 00005 // This is the declaration of the SMWFermionsPOWHEGDecayer class. 00006 // 00007 00008 #include "SMWDecayer.h" 00009 #include "Herwig++/Utilities/Maths.h" 00010 00011 namespace Herwig { 00012 00013 using namespace ThePEG; 00014 00021 class SMWFermionsPOWHEGDecayer: public SMWDecayer { 00022 00023 public: 00024 00028 SMWFermionsPOWHEGDecayer(); 00029 00038 virtual POWHEGType hasPOWHEGCorrection() {return FSR;} 00039 00040 00044 virtual HardTreePtr generateHardest(ShowerTreePtr); 00046 00047 virtual double me2(const int ichan, const Particle & part, 00048 const ParticleVector & decay, MEOption meopt) const; 00049 00050 public: 00051 00058 void persistentOutput(PersistentOStream & os) const; 00059 00065 void persistentInput(PersistentIStream & is, int version); 00067 00074 static void Init(); 00075 00076 protected: 00077 00084 virtual IBPtr clone() const; 00085 00090 virtual IBPtr fullclone() const; 00092 00093 protected: 00094 00102 virtual void doinit(); 00104 00105 private: 00106 00111 static ClassDescription<SMWFermionsPOWHEGDecayer> initSMWFermionsPOWHEGDecayer; 00112 00117 SMWFermionsPOWHEGDecayer & operator=(const SMWFermionsPOWHEGDecayer &); 00118 00122 AbstractFFVVertexPtr FFWVertex() const {return FFWVertex_;} 00123 00127 AbstractFFVVertexPtr FFGVertex() const {return FFGVertex_;} 00128 00132 double calculateRealEmission(double x1, double x2, 00133 vector<PPtr> hardProcess, 00134 double phi, double muj, double muk, 00135 int iemit, bool subtract) const; 00136 00140 bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT, 00141 double muj, double muk) const; 00142 00146 InvEnergy calculateJacobian(double x1, double x2, Energy pT, 00147 double muj, double muk) const; 00148 00152 double meRatio(vector<cPDPtr> partons, 00153 vector<Lorentz5Momentum> momenta, 00154 unsigned int iemitter,bool subtract) const; 00158 double loME(const vector<cPDPtr> & partons, 00159 const vector<Lorentz5Momentum> & momenta) const; 00160 00164 InvEnergy2 realME(const vector<cPDPtr> & partons, 00165 const vector<Lorentz5Momentum> & momenta) const; 00166 00170 bool getEvent(vector<PPtr> hardProcess); 00171 00172 private: 00173 00177 AbstractFFVVertexPtr FFWVertex_; 00178 00182 AbstractFFVVertexPtr FFGVertex_; 00183 00187 double CF_; 00188 00192 mutable Energy mW_; 00193 00194 00195 // TODO: delete this 00196 mutable double mu_; 00197 00201 mutable double mu1_; 00205 mutable double mu12_; 00206 00210 mutable double mu2_; 00211 00215 mutable double mu22_; 00216 00217 00221 mutable double aS_; 00222 00226 mutable Energy2 scale_; 00227 00235 tcPDPtr gluon_; 00236 00240 Energy pTmin_; 00241 00242 // radiative variables (pt,y) 00243 Energy pT_; 00244 00248 vector<tcPDPtr> partons_; 00249 00253 vector<Lorentz5Momentum> quark_; 00254 00258 Lorentz5Momentum gauge_; 00259 00263 PPtr wboson_; 00264 00268 Energy2 mw2_; 00270 }; 00271 00272 } 00273 00274 #include "ThePEG/Utilities/ClassTraits.h" 00275 00276 namespace ThePEG { 00277 00282 template <> 00283 struct BaseClassTrait<Herwig::SMWFermionsPOWHEGDecayer,1> { 00285 typedef Herwig::SMWDecayer NthBase; 00286 }; 00287 00290 template <> 00291 struct ClassTraits<Herwig::SMWFermionsPOWHEGDecayer> 00292 : public ClassTraitsBase<Herwig::SMWFermionsPOWHEGDecayer> { 00294 static string className() { return "Herwig::SMWFermionsPOWHEGDecayer"; } 00302 static string library() { return "HwPerturbativeDecay.so"; } 00303 }; 00304 00307 } 00308 00309 #endif /* HERWIG_SMWFermionsPOWHEGDecayer_H */