herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
IFMassiveKinematics.h
1 // -*- C++ -*-
2 //
3 // IFLightKinematics.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2019 The Herwig Collaboration
5 //
6 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef HERWIG_IFLightKinematics_H
10 #define HERWIG_IFLightKinematics_H
11 //
12 // This is the declaration of the IFLightKinematics class.
13 //
14 
15 #include "DipoleSplittingKinematics.h"
16 
17 namespace Herwig {
18 
19 using namespace ThePEG;
20 
32 
33 public:
34 
41 
45  virtual ~IFMassiveKinematics();
47 
48 public:
49 
55  virtual pair<double,double> kappaSupport(const DipoleSplittingInfo& dIndex) const;
56 
61  virtual pair<double,double> xiSupport(const DipoleSplittingInfo& dIndex) const;
62 
66  virtual pair<double,double> zBoundaries(Energy,
67  const DipoleSplittingInfo&,
68  const DipoleSplittingKernel&) const {
69  return {0.0,1.0};
70  }
71 
80  virtual Energy dipoleScale(const Lorentz5Momentum& pEmitter,
81  const Lorentz5Momentum& pSpectator) const;
82 
86  virtual Energy ptMax(Energy dScale,
87  double emX, double specX,
88  const DipoleSplittingInfo& dInfo,
89  const DipoleSplittingKernel& split) const;
90 
94  virtual Energy ptMax(Energy dScale,
95  double, double,
96  const DipoleIndex& dIndex,
97  const DipoleSplittingKernel& split,
98  tPPtr emitter, tPPtr) const;
99 
103  virtual Energy ptMax(Energy,
104  double, double,
105  const DipoleIndex&,
106  const DipoleSplittingKernel&) const {
107  // Only the DipoleSplittingInfo version should be used for massive
108  // dipoles, for now anyway.
109  assert(false);
110  return ZERO;
111  }
112 
116  virtual Energy QMax(Energy dScale,
117  double emX, double specX,
118  const DipoleSplittingInfo& dInfo,
119  const DipoleSplittingKernel& split) const;
120 
124  virtual Energy QMax(Energy,
125  double, double,
126  const DipoleIndex&,
127  const DipoleSplittingKernel&) const {
128  // Only the DipoleSplittingInfo version should be used for massive
129  // dipoles, for now anyway.
130  assert(false);
131  return ZERO;
132  }
133 
137  virtual Energy PtFromQ(Energy scale, const DipoleSplittingInfo&) const;
138 
142  virtual Energy QFromPt(Energy scale, const DipoleSplittingInfo&) const;
143 
148  virtual double ptToRandom(Energy pt, Energy dScale,
149  double emX, double specX,
150  const DipoleIndex& dIndex,
151  const DipoleSplittingKernel&) const;
152 
158  virtual bool generateSplitting(double kappa, double xi, double phi,
159  DipoleSplittingInfo& dIndex,
160  const DipoleSplittingKernel&);
161 
167  virtual void generateKinematics(const Lorentz5Momentum& pEmitter,
168  const Lorentz5Momentum& pSpectator,
169  const DipoleSplittingInfo& dInfo);
170 
171 public:
172 
179  void persistentOutput(PersistentOStream & os) const;
180 
186  void persistentInput(PersistentIStream & is, int version);
188 
195  static void Init();
196 
197 protected:
198 
205  virtual IBPtr clone() const;
206 
211  virtual IBPtr fullclone() const;
213 
214 
215 // If needed, insert declarations of virtual function defined in the
216 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
217 
218 
219 private:
220 
226 
231  IFMassiveKinematics & operator=(const IFMassiveKinematics &);
232 
233 private:
234 
239 
240 };
241 
242 }
243 
244 #include "ThePEG/Utilities/ClassTraits.h"
245 
246 namespace ThePEG {
247 
252 template <>
253 struct BaseClassTrait<Herwig::IFMassiveKinematics,1> {
255  typedef Herwig::DipoleSplittingKinematics NthBase;
256 };
257 
260 template <>
261 struct ClassTraits<Herwig::IFMassiveKinematics>
262  : public ClassTraitsBase<Herwig::IFMassiveKinematics> {
264  static string className() { return "Herwig::IFMassiveKinematics"; }
272  static string library() { return "HwDipoleShower.so"; }
273 };
274 
277 }
278 
279 #endif /* HERWIG_IFMassiveKinematics_H */
DipoleSplittingKinematics is the base class for dipole splittings as performed in the dipole shower...
IFMassiveKinematics implements massless splittings off an initial-final dipole.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
DipoleIndex is used to index splitting generators for a particular dipole.
virtual pair< double, double > zBoundaries(Energy, const DipoleSplittingInfo &, const DipoleSplittingKernel &) const
Return the boundaries on the momentum fraction.
static ClassDescription< IFMassiveKinematics > initIFMassiveKinematics
The static object used to initialize the description of this class.
ThePEG::Ptr< Particle >::transient_pointer tPPtr
bool theCollinearScheme
Wether or not to choose the `collinear&#39; scheme.
virtual Energy ptMax(Energy, double, double, const DipoleIndex &, const DipoleSplittingKernel &) const
Return the maximum pt for the given dipole scale.
-*- C++ -*-
DipoleSplittingInfo contains all parameters to generate a full dipole splitting.
virtual Energy QMax(Energy, double, double, const DipoleIndex &, const DipoleSplittingKernel &) const
Return the maximum virtuality for the given dipole scale.
constexpr ZeroUnit ZERO
DipoleSplittingKernel is the base class for all kernels used within the dipole shower.