herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
TildeKinematics.h
1// -*- C++ -*-
2//
3// TildeKinematics.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_TildeKinematics_H
10#define HERWIG_TildeKinematics_H
11//
12// This is the declaration of the TildeKinematics class.
13//
14
15#include "ThePEG/Handlers/HandlerBase.h"
16#include "ThePEG/Handlers/StandardXComb.h"
17
18#include "Herwig/MatrixElement/Matchbox/Dipoles/SubtractionDipole.h"
19
20namespace Herwig {
21
22using namespace ThePEG;
23
34
35public:
36
40 Ptr<TildeKinematics>::ptr cloneMe() const {
41 return dynamic_ptr_cast<Ptr<TildeKinematics>::ptr>(clone());
42 }
43
49 const Lorentz5Momentum& realEmitterMomentum() const {
50 return theRealXComb->meMomenta()[theDipole->realEmitter()];
51 }
52
56 const Lorentz5Momentum& realEmissionMomentum() const {
57 return theRealXComb->meMomenta()[theDipole->realEmission()];
58 }
59
63 const Lorentz5Momentum& realSpectatorMomentum() const {
64 return theRealXComb->meMomenta()[theDipole->realSpectator()];
65 }
66
70 const Lorentz5Momentum& bornEmitterMomentum() const { return theBornEmitterMomentum; }
71
75 const Lorentz5Momentum& bornSpectatorMomentum() const { return theBornSpectatorMomentum; }
76
80 const vector<double>& subtractionParameters() const { return theDipole->subtractionParameters(); }
81
86 virtual bool doesTransform() const { return false; }
87
93 virtual Lorentz5Momentum transform(const Lorentz5Momentum& p) const { return p; }
95
102 virtual void getShowerVariables() const {}
103
110 virtual double jacobianRatio() const { return 1.; }
111
112public:
113
120 void prepare(tcStdXCombPtr newRealXComb,
121 tcStdXCombPtr newBornXComb) {
122 theRealXComb = newRealXComb; theBornXComb = newBornXComb;
123 }
124
128 void dipole(Ptr<SubtractionDipole>::tptr dip) { theDipole = dip; }
129
133 Ptr<SubtractionDipole>::tptr dipole() { return theDipole; }
134
138 Ptr<SubtractionDipole>::tcptr dipole() const { return theDipole; }
139
148 virtual bool doMap() = 0;
149
153 virtual Energy lastPt() const = 0;
154
155
159 virtual Energy lastPt(Lorentz5Momentum,Lorentz5Momentum,Lorentz5Momentum) const =0 ;
160
161
165 virtual pair<double,double> zBounds(Energy pt, Energy hardPt ) const = 0;
166
167
171 virtual double lastZ() const = 0;
172
176 virtual Energy lastScale() const;
177
178 virtual bool aboveAlpha() const {
179 cerr<<"only implemented for light kinematics";
180 assert(false);
181 return false;
182 }
183
188 return
189 (theDipole && theRealXComb) ?
190 theRealXComb->mePartonData()[theDipole->realEmitter()] :
191 cPDPtr();
192 }
193
198 return
199 (theDipole && theRealXComb) ?
200 theRealXComb->mePartonData()[theDipole->realEmission()] :
201 cPDPtr();
202 }
203
208 return
209 (theDipole && theRealXComb) ?
210 theRealXComb->mePartonData()[theDipole->realSpectator()] :
211 cPDPtr();
212 }
213
218 return
219 (theDipole && theBornXComb) ?
220 theBornXComb->mePartonData()[theDipole->bornEmitter()] :
221 cPDPtr();
222 }
223
228 return
229 (theDipole && theBornXComb) ?
230 theBornXComb->mePartonData()[theDipole->bornSpectator()] :
231 cPDPtr();
232 }
234
235protected:
236
240 Lorentz5Momentum& bornEmitterMomentum() { return theBornEmitterMomentum; }
241
245 Lorentz5Momentum& bornSpectatorMomentum() { return theBornSpectatorMomentum; }
246
250 vector<double>& subtractionParameters() { return theDipole->subtractionParameters(); }
251
252public:
256 double emitterX() const {
257 return
258 theDipole->bornEmitter() == 0 ?
259 theBornXComb->lastX1() :
260 theBornXComb->lastX2();
261 }
262
263
267 double spectatorX() const {
268 return
269 theDipole->bornSpectator() == 0 ?
270 theBornXComb->lastX1() :
271 theBornXComb->lastX2();
272 }
273
274
275public:
276
284
290 void persistentInput(PersistentIStream & is, int version);
292
299 static void Init();
300
301
302// If needed, insert declarations of virtual function defined in the
303// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
304
305
306protected:
307
319 virtual void rebind(const TranslationMap & trans);
320
328
329
330private:
331
335 Ptr<SubtractionDipole>::tptr theDipole;
336
340 tcStdXCombPtr theRealXComb;
341
345 tcStdXCombPtr theBornXComb;
346
350 Lorentz5Momentum theBornEmitterMomentum;
351
355 Lorentz5Momentum theBornSpectatorMomentum;
356
357private:
358
364
365};
366
367}
368
369#endif /* HERWIG_TildeKinematics_H */
TildeKinematics is the base class for the 'tilde' kinematics being used for subtraction terms in the ...
double spectatorX() const
Return the momentum fraction of the spectator.
virtual double lastZ() const =0
Return the momentum fraction associated to the last splitting.
const Lorentz5Momentum & realSpectatorMomentum() const
Return the momentum of the spectator in the real emission process.
Lorentz5Momentum & bornSpectatorMomentum()
Access the momentum of the spectator in the underlying Born process.
const Lorentz5Momentum & bornEmitterMomentum() const
Return the momentum of the emitter in the underlying Born process.
const Lorentz5Momentum & bornSpectatorMomentum() const
Return the momentum of the spectator in the underlying Born process.
cPDPtr bornSpectatorData() const
Return the particle type of the spectator in the underlying Born process.
TildeKinematics & operator=(const TildeKinematics &)=delete
The assignment operator is private and must never be called.
void dipole(Ptr< SubtractionDipole >::tptr dip)
Set the current dipole.
cPDPtr realSpectatorData() const
Return the particle type of the spectator in the real emission process.
virtual Lorentz5Momentum transform(const Lorentz5Momentum &p) const
If this TildeKinematics object needs to transform all other particles in the process except the emitt...
void prepare(tcStdXCombPtr newRealXComb, tcStdXCombPtr newBornXComb)
Prepare given a dipole, and XCombs describing the real emission and underlying Born processes,...
tcStdXCombPtr theRealXComb
The XComb object describing the real emission process.
virtual IVector getReferences()
Return a vector of all pointers to Interfaced objects used in this object.
static void Init()
The standard Init function used to initialize the interfaces.
tcStdXCombPtr theBornXComb
The XComb object describing the underlying Born process.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual bool doesTransform() const
Return true, if this TildeKinematics object needs to transform all other particles in the process exc...
Ptr< SubtractionDipole >::tptr theDipole
The last dipole this TildeKinematics has been selected for.
virtual Energy lastPt() const =0
Return the pt associated to the last merged splitting.
cPDPtr realEmitterData() const
Return the particle type of the emitter in the real emission process.
Lorentz5Momentum & bornEmitterMomentum()
Access the momentum of the emitter in the underlying Born process.
Ptr< TildeKinematics >::ptr cloneMe() const
Clone this object.
vector< double > & subtractionParameters()
Access the vector of dimensionless variables calculated.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual void rebind(const TranslationMap &trans)
Rebind pointer to other Interfaced objects.
virtual pair< double, double > zBounds(Energy pt, Energy hardPt) const =0
Given a pt and a hard pt, return the boundaries on z;.
virtual void getShowerVariables() const
If this tilde kinematics is implementing a mapping different from the baseline dipole mapping,...
const Lorentz5Momentum & realEmissionMomentum() const
Return the momentum of the emission in the real emission process.
Lorentz5Momentum theBornSpectatorMomentum
The momentum of the spectator in the underlying Born process.
virtual Energy lastScale() const
Return the relevant dipole scale.
Ptr< SubtractionDipole >::tcptr dipole() const
Return the current dipole.
virtual double jacobianRatio() const
If this tilde kinematics is implementing a mapping different from the baseline dipole mapping,...
cPDPtr realEmissionData() const
Return the particle type of the emission in the real emission process.
virtual Energy lastPt(Lorentz5Momentum, Lorentz5Momentum, Lorentz5Momentum) const =0
Return the pt associated to emitter emission and sppectator momentum.
const Lorentz5Momentum & realEmitterMomentum() const
Return the momentum of the emitter in the real emission process.
Lorentz5Momentum theBornEmitterMomentum
The momentum of the emitter in the underlying Born process.
virtual bool doMap()=0
Perform the mapping to the tilde kinematics for the last selected process and store all dimensionless...
Ptr< SubtractionDipole >::tptr dipole()
Return the current dipole.
const vector< double > & subtractionParameters() const
Return the vector of dimensionless variables calculated.
double emitterX() const
Return the momentum fraction of the emitter.
cPDPtr bornEmitterData() const
Return the particle type of the emitter in the underlying Born process.
virtual IBPtr clone() const=0
-*- C++ -*-
ThePEG::Ptr< ParticleData >::const_pointer cPDPtr
vector< IBPtr > IVector