herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
SMWFermionsPOWHEGDecayer.h
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 */