00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_RemnantHandler_H
00010 #define ThePEG_RemnantHandler_H
00011
00012
00013 #include "ThePEG/Handlers/HandlerBase.h"
00014 #include "ThePEG/PDF/PartonBin.h"
00015 #include "ThePEG/PDF/PartonBinInstance.h"
00016 #include "ThePEG/Vectors/Transverse.h"
00017 #include "RemnantHandler.xh"
00018
00019 namespace ThePEG {
00020
00031 class RemnantHandler: public HandlerBase {
00032
00033 public:
00034
00041 RemnantHandler(bool multi = false);
00043
00044 public:
00045
00052 virtual bool canHandle(tcPDPtr particle,
00053 const cPDVector & partons) const = 0;
00054
00065 virtual int nDim(const PartonBin & pb, bool doScale) const;
00066
00079 virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r,
00080 Energy2 scale,
00081 const LorentzMomentum & parent) const = 0;
00082
00097 virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r,
00098 Energy2 scale, Energy2 shat,
00099 const LorentzMomentum & parent) const = 0;
00100
00105 virtual void boostRemnants(PartonBinInstance & pb) const;
00106
00115 virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp,
00116 double newl, Energy2 scale,
00117 const LorentzMomentum & p,
00118 const PVector & prev = PVector()) const;
00131 virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp,
00132 double newl, Energy2 scale,
00133 Energy2 shat, const LorentzMomentum & p,
00134 const PVector & prev = PVector()) const;
00136
00141 bool multiCapable() const { return isMultiCapable; }
00142
00143 public:
00144
00151 void persistentOutput(PersistentOStream & os) const;
00152
00158 void persistentInput(PersistentIStream & is, int version);
00160
00164 static void Init();
00165
00166 protected:
00167
00172 bool isMultiCapable;
00173
00174 private:
00175
00180 static AbstractClassDescription<RemnantHandler> initRemnantHandler;
00181
00185 RemnantHandler & operator=(const RemnantHandler &);
00186
00187 };
00188
00193 template <>
00194 struct BaseClassTrait<RemnantHandler,1>: public ClassTraitsType {
00196 typedef HandlerBase NthBase;
00197 };
00198
00201 template <>
00202 struct ClassTraits<RemnantHandler>: public ClassTraitsBase<RemnantHandler> {
00204 static string className() { return "ThePEG::RemnantHandler"; }
00205 };
00206
00209 }
00210
00211 #endif