herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
SMHiggsFermionsPOWHEGDecayer.h
00001 // -*- C++ -*-
00002 #ifndef HERWIG_SMHiggsFermionsPOWHEGDecayer_H
00003 #define HERWIG_SMHiggsFermionsPOWHEGDecayer_H
00004 //
00005 // This is the declaration of the SMHiggsFermionsPOWHEGDecayer class.
00006 //
00007 
00008 #include "SMHiggsFermionsDecayer.h"
00009 #include "Herwig++/Utilities/Maths.h"
00010 #include "Herwig++/Shower/Couplings/ShowerAlpha.fh"
00011 
00012 namespace Herwig {
00013 
00014 using namespace ThePEG;
00015 
00022 class SMHiggsFermionsPOWHEGDecayer: public SMHiggsFermionsDecayer {
00023 
00024 public:
00025 
00029   SMHiggsFermionsPOWHEGDecayer();
00030 
00039   virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
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<SMHiggsFermionsPOWHEGDecayer> initSMHiggsFermionsPOWHEGDecayer;
00112 
00117   SMHiggsFermionsPOWHEGDecayer & operator=(const SMHiggsFermionsPOWHEGDecayer &);
00118 
00122   double calculateLambda(double x, double y, double z) const;
00123 
00127   InvEnergy2 dipoleSubtractionTerm(double x1, double x2) const;
00128 
00132   InvEnergy2 calculateRealEmission(double x1, double x2) const;
00133 
00137   double calculateVirtualTerm() const;
00138 
00142   double calculateNonSingletTerm(double beta, double L) 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   bool getEvent();
00158 
00159 private:
00160 
00164   double CF_;
00165 
00169   mutable Energy mHiggs_;
00170 
00174   mutable double mu_;
00175 
00179   mutable double mu2_;
00180 
00184   mutable double aS_;
00185 
00193   ShowerAlphaPtr alphaS_;
00194 
00198   tcPDPtr gluon_;
00199 
00203   Energy pTmin_;
00204 
00205   //  radiative variables (pt,y)
00206   Energy pT_;
00207 
00211   vector<tcPDPtr> partons_;
00212 
00216   vector<Lorentz5Momentum> quark_;
00217 
00221   Lorentz5Momentum gauge_;
00222 
00226   PPtr higgs_;
00227 
00231   Energy2 mh2_;
00233 };
00234 
00235 }
00236 
00237 #include "ThePEG/Utilities/ClassTraits.h"
00238 
00239 namespace ThePEG {
00240 
00245 template <>
00246 struct BaseClassTrait<Herwig::SMHiggsFermionsPOWHEGDecayer,1> {
00248   typedef Herwig::SMHiggsFermionsDecayer NthBase;
00249 };
00250 
00253 template <>
00254 struct ClassTraits<Herwig::SMHiggsFermionsPOWHEGDecayer>
00255   : public ClassTraitsBase<Herwig::SMHiggsFermionsPOWHEGDecayer> {
00257   static string className() { return "Herwig::SMHiggsFermionsPOWHEGDecayer"; }
00265   static string library() { return "HwPerturbativeHiggsDecay.so"; }
00266 };
00267 
00270 }
00271 
00272 #endif /* HERWIG_SMHiggsFermionsPOWHEGDecayer_H */