00001 // -*- C++ -*- 00002 // 00003 // CascadeHandler.h is a part of ThePEG - Toolkit for HEP Event Generation 00004 // Copyright (C) 1999-2007 Leif Lonnblad 00005 // 00006 // ThePEG 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 ThePEG_CascadeHandler_H 00010 #define ThePEG_CascadeHandler_H 00011 // This is the declaration of the CascadeHandler class. 00012 00013 #include "StepHandler.h" 00014 #include "ThePEG/Handlers/LastXCombInfo.h" 00015 #include "ThePEG/PDF/PDF.h" 00016 00017 namespace ThePEG { 00018 00019 00033 class CascadeHandler: public StepHandler, public LastXCombInfo<> { 00034 00035 public: 00036 00042 virtual ~CascadeHandler(); 00044 00045 public: 00046 00063 virtual void handle(EventHandler & eh, const tPVector & tagged, 00064 const Hint & hint); 00066 00072 virtual void cascade() = 0; 00073 00091 virtual double reweightCKKW(int minMult, int maxMult); 00092 00093 public: 00094 00102 const tPVector & tagged() const { return *theTagged; } 00103 00107 const Hint & hint() const { return *theHint; } 00108 00112 const PDF & firstPDF() const { return pdfs().first; } 00113 00117 const PDF & secondPDF() const { return pdfs().second; } 00118 00122 const pair<PDF,PDF> & pdfs() const { return thePDFs; } 00123 00127 void resetPDFs(const pair<tcPDFPtr,tcPDFPtr> & pdfpair); 00128 00133 void setXComb(tXCombPtr xc); 00135 00136 public: 00137 00141 static void Init(); 00142 00143 private: 00144 00148 const tPVector * theTagged; 00149 00153 const Hint * theHint; 00154 00158 pair<PDF,PDF> thePDFs; 00159 00160 private: 00161 00166 static AbstractNoPIOClassDescription<CascadeHandler> initCascadeHandler; 00167 00171 CascadeHandler & operator=(const CascadeHandler &); 00172 00173 }; 00174 00179 template <> 00180 struct BaseClassTrait<CascadeHandler,1>: public ClassTraitsType { 00182 typedef StepHandler NthBase; 00183 }; 00184 00187 template <> 00188 struct ClassTraits<CascadeHandler>: public ClassTraitsBase<CascadeHandler> { 00190 static string className() { return "ThePEG::CascadeHandler"; } 00191 }; 00192 00195 } 00196 00197 #endif /* ThePEG_CascadeHandler_H */