herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
QTildeSudakov.h
00001 // -*- C++ -*-
00002 //
00003 // QTildeSudakov.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_QTildeSudakov_H
00010 #define HERWIG_QTildeSudakov_H
00011 //
00012 // This is the declaration of the QTildeSudakov class.
00013 //
00014 
00015 #include "Herwig++/Shower/Base/SudakovFormFactor.h"
00016 
00017 namespace Herwig {
00018 
00019 using namespace ThePEG;
00020 
00029 class QTildeSudakov: public SudakovFormFactor {
00030 
00031 public:
00032 
00036   inline QTildeSudakov() {}
00037   
00051   virtual ShoKinPtr generateNextTimeBranching(const Energy startingScale,
00052                                               const IdList &ids,const bool cc,
00053                                               double enhance);
00054 
00066   virtual ShoKinPtr generateNextDecayBranching(const Energy startingScale,
00067                                             const Energy stoppingScale,
00068                                             const Energy minmass,
00069                                             const IdList &ids,
00070                                             const bool cc,
00071                                             double enhance);
00072 
00084   virtual ShoKinPtr generateNextSpaceBranching(const Energy startingScale,
00085                                                const IdList &ids,double x,
00086                                                const bool cc, double enhance,
00087                                                tcBeamPtr beam);
00089 
00094   virtual Energy calculateScale(double z, Energy pt, IdList ids,unsigned int iopt);
00095 
00099   virtual ShoKinPtr createFinalStateBranching(Energy scale,double z,
00100                                               double phi, Energy pt);
00101 
00105   virtual ShoKinPtr createInitialStateBranching(Energy scale,double z,
00106                                                 double phi, Energy pt);
00107 
00111   virtual ShoKinPtr createDecayBranching(Energy scale,double z,
00112                                          double phi, Energy pt);
00113 
00114 public:
00115 
00122   void persistentOutput(PersistentOStream & os) const;
00123 
00129   void persistentInput(PersistentIStream & is, int version);
00131 
00138   static void Init();
00139 
00140 protected:
00153   bool guessTimeLike(Energy2 &t, Energy2 tmin, double enhance);
00154 
00162   bool guessDecay(Energy2 &t, Energy2 tmax,Energy minmass,
00163                   double enhance);
00164 
00172   bool guessSpaceLike(Energy2 &t, Energy2 tmin, const double x,
00173                       double enhance);
00175 
00182   void initialize(const IdList & ids,Energy2 &tmin, const bool cc);
00183 
00190   bool PSVeto(const Energy2 t);
00191 
00197   bool computeTimeLikeLimits(Energy2 & scale);
00198 
00205   bool computeSpaceLikeLimits(Energy2 & scale, double x);
00206 
00207 protected:
00208 
00215   inline virtual IBPtr clone() const {return new_ptr(*this);}
00216 
00221   inline virtual IBPtr fullclone() const {return new_ptr(*this);}
00223 
00224 private:
00225 
00230   QTildeSudakov & operator=(const QTildeSudakov &);
00231 
00232 private:
00233   
00237   Energy q_;
00238 
00242   IdList ids_;
00243 
00247   vector<Energy> masses_;
00248 
00252   vector<Energy2> masssquared_;
00253 
00254 };
00255 
00256 }
00257 
00258 #endif /* HERWIG_QTildeSudakov_H */