ThePEG  1.8.0
RemnantHandler.h
1 // -*- C++ -*-
2 //
3 // RemnantHandler.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2011 Leif Lonnblad
5 //
6 // ThePEG is licenced under version 2 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef ThePEG_RemnantHandler_H
10 #define ThePEG_RemnantHandler_H
11 // This is the declaration of the RemnantHandler class.
12 
13 #include "ThePEG/Handlers/HandlerBase.h"
14 #include "ThePEG/PDF/PartonBin.h"
15 #include "ThePEG/PDF/PartonBinInstance.h"
16 #include "ThePEG/Vectors/Transverse.h"
17 #include "RemnantHandler.xh"
18 
19 namespace ThePEG {
20 
31 class RemnantHandler: public HandlerBase {
32 
33 public:
34 
41  RemnantHandler(bool multi = false);
43 
44 public:
45 
52  virtual bool canHandle(tcPDPtr particle,
53  const cPDVector & partons) const = 0;
54 
65  virtual int nDim(const PartonBin & pb, bool doScale) const;
66 
79  virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r,
80  Energy2 scale,
81  const LorentzMomentum & parent,
82  bool fixedPartonMomentum = false) const = 0;
83 
98  virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r,
99  Energy2 scale, Energy2 shat,
100  const LorentzMomentum & parent,
101  bool fixedPartonMomentum = false) const = 0;
102 
107  virtual void boostRemnants(PartonBinInstance & pb) const;
108 
117  virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp,
118  double newl, Energy2 scale,
119  const LorentzMomentum & p,
120  const PVector & prev = PVector()) const;
133  virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp,
134  double newl, Energy2 scale,
135  Energy2 shat, const LorentzMomentum & p,
136  const PVector & prev = PVector()) const;
138 
143  bool multiCapable() const { return isMultiCapable; }
144 
145 public:
146 
153  void persistentOutput(PersistentOStream & os) const;
154 
160  void persistentInput(PersistentIStream & is, int version);
162 
166  static void Init();
167 
168 protected:
169 
175 
176 private:
177 
183 
188 
189 };
190 
195 template <>
198  typedef HandlerBase NthBase;
199 };
200 
203 template <>
204 struct ClassTraits<RemnantHandler>: public ClassTraitsBase<RemnantHandler> {
206  static string className() { return "ThePEG::RemnantHandler"; }
207 };
208 
211 }
212 
213 #endif /* ThePEG_RemnantHandler_H */