herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
DipoleEvolutionOrdering.h
1 // -*- C++ -*-
2 //
3 // DipoleEvolutionOrdering.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_DipoleEvolutionOrdering_H
10 #define HERWIG_DipoleEvolutionOrdering_H
11 //
12 // This is the declaration of the DipoleEvolutionOrdering class.
13 //
14 
15 #include "ThePEG/Handlers/HandlerBase.h"
16 
17 #include "Herwig/Shower/Dipole/Base/Dipole.h"
18 #include "Herwig/Shower/Dipole/Base/DipoleChain.h"
19 #include "Herwig/Shower/Dipole/Kernels/DipoleSplittingKernel.h"
20 
21 namespace Herwig {
22 
23 using namespace ThePEG;
24 
34 
35 public:
36 
43 
47  virtual ~DipoleEvolutionOrdering();
49 
50 public:
51 
56  virtual bool independentDipoles() const { return false; }
57 
62  virtual Energy hardScale(tPPtr emitter, tPPtr spectator,
63  double emitterX, double spectatorX,
64  const DipoleSplittingKernel&,
65  const DipoleIndex&) const = 0;
66 
72  virtual void setEvolutionScale(Energy scale,
73  const DipoleSplittingInfo&,
74  DipoleChain&,
75  pair<list<Dipole>::iterator,list<Dipole>::iterator>) const = 0;
76 
82  virtual void setEvolutionScale(Energy scale,
83  const DipoleSplittingInfo&,
84  DipoleChain&,
85  list<Dipole>::iterator) const = 0;
86 
90  virtual Energy evolutionScale(const DipoleSplittingInfo&,
91  const DipoleSplittingKernel&) const = 0;
92 
97  virtual Energy maxPt(Energy scale,
98  const DipoleSplittingInfo&,
99  const DipoleSplittingKernel&) const = 0;
100 
101 public:
102 
109  void persistentOutput(PersistentOStream & os) const;
110 
116  void persistentInput(PersistentIStream & is, int version);
118 
125  static void Init();
126 
127 // If needed, insert declarations of virtual function defined in the
128 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
129 
130 
131 private:
132 
138 
143  DipoleEvolutionOrdering & operator=(const DipoleEvolutionOrdering &) = delete;
144 
145 };
146 
147 }
148 
149 #include "ThePEG/Utilities/ClassTraits.h"
150 
151 namespace ThePEG {
152 
157 template <>
158 struct BaseClassTrait<Herwig::DipoleEvolutionOrdering,1> {
160  typedef HandlerBase NthBase;
161 };
162 
165 template <>
166 struct ClassTraits<Herwig::DipoleEvolutionOrdering>
167  : public ClassTraitsBase<Herwig::DipoleEvolutionOrdering> {
169  static string className() { return "Herwig::DipoleEvolutionOrdering"; }
177  static string library() { return "HwDipoleShower.so"; }
178 };
179 
182 }
183 
184 #endif /* HERWIG_DipoleEvolutionOrdering_H */
DipoleIndex is used to index splitting generators for a particular dipole.
static AbstractClassDescription< DipoleEvolutionOrdering > initDipoleEvolutionOrdering
The static object used to initialize the description of this class.
DipoleEvolutionOrdering defines a particular evolution algortihm for the dipole shower.
virtual bool independentDipoles() const
Return true, if this ordering requests an independent dipole evolution.
ThePEG::Ptr< Particle >::transient_pointer tPPtr
-*- C++ -*-
DipoleSplittingInfo contains all parameters to generate a full dipole splitting.
The DipoleChain class is used by the dipole shower to represent a chain of dipoles.
Definition: DipoleChain.h:29
DipoleSplittingKernel is the base class for all kernels used within the dipole shower.