herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
IILightKinematics.h
1// -*- C++ -*-
2//
3// IILightKinematics.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_IILightKinematics_H
10#define HERWIG_IILightKinematics_H
11//
12// This is the declaration of the IILightKinematics class.
13//
14
15#include "DipoleSplittingKinematics.h"
16
17namespace Herwig {
18
19using namespace ThePEG;
20
32
33 public:
34
39
40 public:
41
45 virtual Energy ptMax(Energy dScale,
46 double emX, double specX,
47 const DipoleIndex&,
48 const DipoleSplittingKernel&) const;
49
53 virtual Energy QMax(Energy dScale,
54 double emX, double specX,
55 const DipoleIndex& dIndex,
56 const DipoleSplittingKernel&) const;
57
61 virtual Energy PtFromQ(Energy scale, const DipoleSplittingInfo&) const;
62
66 virtual Energy QFromPt(Energy scale, const DipoleSplittingInfo&) const;
67
71 virtual pair<double,double> zBoundaries(Energy pt,
72 const DipoleSplittingInfo& dInfo,
73 const DipoleSplittingKernel& split) const;
74
80 virtual bool generateSplitting(double kappa, double xi, double phi,
81 DipoleSplittingInfo& dIndex,
83
89 virtual void generateKinematics(const Lorentz5Momentum& pEmitter,
90 const Lorentz5Momentum& pSpectator,
91 const DipoleSplittingInfo& dInfo);
92
98 virtual bool doesTransform () const { return theCollinearScheme || didCollinear; }
99
103 virtual void setTransformation () ;
104
105 /*
106 * perform the transformation, if existing
107 */
108 virtual void transform (PPtr& part) {
109 if ( !theCollinearScheme && !didCollinear ) return;
110
111 Lorentz5Momentum mom = part->momentum();
112
113 // If particle has SpinInfo check that we're
114 // not dealing with an intermediate spectator.
115 if ( part->spinInfo()
116 && !(part->spinInfo()->timelike() && part->children().size() == 1 )
117 && !(!part->spinInfo()->timelike() && part->parents()[0]->children().size() == 1 ) ) {
118
121
122 part->spinInfo()->transform(mom,theRecoilTransformation);
123 }
124
125 part->set5Momentum(mom-(2.*(KplusKtilde*mom)/KplusKtilde2)*KplusKtilde+(2.*(Ktilde*mom)/K2)*K);
126
127 }
128
129 /*
130 * SW 30/01/2019: Test feature only, not for release.
131 * Return true to only apply the transformation to non-coloured particles.
132 * Note this requires careful handling in DipoleEventRecord
133 */
134 //virtual bool transformHardOnly() const { return theTransformHardOnly; }
135
136
141 // virtual void transformHard ( PPtr& hard ) {
142 // if ( !theTransformationCalculated ) {
143 // setTransformation();
144 // theTransformationCalculated = true;
145 // }
146 // hard->setMomentum(splitRecoilMomentum());
147 // hard->rescaleMass();
148 // }
149
150
151 public:
152
160
166 void persistentInput(PersistentIStream & is, int version);
168
175 static void Init();
176
177 protected:
178
185 virtual IBPtr clone() const;
186
191 virtual IBPtr fullclone() const;
193
194
195 // If needed, insert declarations of virtual function defined in the
196 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
197
198
199 private:
200
206
212
213 private:
214
219
220 bool didCollinear;
221
226 //bool theTransformHardOnly;
227
228 Lorentz5Momentum K;
229 Energy2 K2;
230 Lorentz5Momentum Ktilde;
231 Lorentz5Momentum KplusKtilde;
232 Energy2 KplusKtilde2;
233
241
247
248 };
249
250}
251
252#include "ThePEG/Utilities/ClassTraits.h"
253
254namespace ThePEG {
255
260 template <>
261 struct BaseClassTrait<Herwig::IILightKinematics,1> {
264 };
265
268 template <>
269 struct ClassTraits<Herwig::IILightKinematics>
270 : public ClassTraitsBase<Herwig::IILightKinematics> {
272 static string className() { return "Herwig::IILightKinematics"; }
280 static string library() { return "HwDipoleShower.so"; }
281 };
282
285}
286
287#endif /* HERWIG_IILightKinematics_H */
DipoleIndex is used to index splitting generators for a particular dipole.
DipoleSplittingInfo contains all parameters to generate a full dipole splitting.
DipoleSplittingKernel is the base class for all kernels used within the dipole shower.
DipoleSplittingKinematics is the base class for dipole splittings as performed in the dipole shower.
IILightKinematics implements massless splittings off an initial-initial dipole.
LorentzRotation theRecoilTransformation
Store the LorentzRotation object equivalent to the transformation applied to the outgoing particles.
IILightKinematics()
The default constructor.
static void Init()
The standard Init function used to initialize the interfaces.
virtual void setTransformation()
Calculate and store a required Lorentz transformation.
virtual bool doesTransform() const
Return true, if there is a transformation which should be applied to all other final state particles ...
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual bool generateSplitting(double kappa, double xi, double phi, DipoleSplittingInfo &dIndex, const DipoleSplittingKernel &)
Generate splitting variables given three random numbers and the momentum fractions of the emitter and...
Lorentz5Momentum K
SW 30/01/2019: Test feature only, not for release.
virtual Energy ptMax(Energy dScale, double emX, double specX, const DipoleIndex &, const DipoleSplittingKernel &) const
Return the maximum pt for the given dipole scale.
bool theTransformationCalculated
Bool to avoid unecessary recalculation of the Lorentz transformation.
static ClassDescription< IILightKinematics > initIILightKinematics
The static object used to initialize the description of this class.
bool theCollinearScheme
Wether or not to choose the ‘collinear’ scheme.
virtual pair< double, double > zBoundaries(Energy pt, const DipoleSplittingInfo &dInfo, const DipoleSplittingKernel &split) const
Return the boundaries on the momentum fraction.
virtual IBPtr clone() const
Make a simple clone of this object.
virtual void generateKinematics(const Lorentz5Momentum &pEmitter, const Lorentz5Momentum &pSpectator, const DipoleSplittingInfo &dInfo)
Generate the full kinematics given emitter and spectator momentum and a previously completeted Dipole...
virtual Energy PtFromQ(Energy scale, const DipoleSplittingInfo &) const
Return the pt given a virtuality.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
virtual Energy QFromPt(Energy scale, const DipoleSplittingInfo &) const
Return the virtuality given a pt.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual Energy QMax(Energy dScale, double emX, double specX, const DipoleIndex &dIndex, const DipoleSplittingKernel &) const
Return the maximum virtuality for the given dipole scale.
IILightKinematics & operator=(const IILightKinematics &)=delete
The assignment operator is private and must never be called.
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::Ptr< Particle >::pointer PPtr
static string className()
static string library()