herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
PerturbativeDecayer.h
1// -*- C++ -*-
2#ifndef Herwig_PerturbativeDecayer_H
3#define Herwig_PerturbativeDecayer_H
4//
5// This is the declaration of the PerturbativeDecayer class.
6//
7
8#include "Herwig/Decay/DecayIntegrator.h"
9#include "Herwig/Shower/ShowerAlpha.h"
10#include "Herwig/Shower/ShowerInteraction.h"
11
12namespace Herwig {
13
14using namespace ThePEG;
15
24
25protected:
26
30 enum dipoleType {FFa, FFc, IFa, IFc, IFba, IFbc, FFg};
31
35 enum phaseSpaceRegion {emissionFromB,emissionFromC,emissionFromA1,emissionFromA2,deadZone};
36
40 struct DipoleType {
41
42 DipoleType() {}
43
45 : type(a), interaction(b)
46 {}
47
48 dipoleType type;
49
50 ShowerInteraction interaction;
51 };
52
53public:
54
59 pTmin_(GeV), useMEforT2_(true),
60 C_(5.), ymax_(10.), phaseOpt_(1),
61 pT_(ZERO),mb_(ZERO), e_(0.),
62 s_(0.), e2_(0.), s2_(0.), enhance_(1.)
63 {}
64
68 virtual POWHEGType hasPOWHEGCorrection() {return No;}
69
73 virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr);
74
78 virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr);
79
80public:
81
89
95 void persistentInput(PersistentIStream & is, int version);
97
104 static void Init();
105
106protected:
107
111 virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2,
112 const ParticleVector & decay3, MEOption meopt,
113 ShowerInteraction inter);
114
118 bool identifyDipoles(vector<DipoleType> & dipoles,
119 PPtr & aProgenitor,
120 PPtr & bProgenitor,
121 PPtr & cProgenitor,
122 ShowerInteraction inter) const;
123
127 ShowerAlphaPtr alphaS() {return alphaS_;}
128
132 ShowerAlphaPtr alphaEM() {return alphaEM_;}
133
137 vector<Lorentz5Momentum> hardMomenta(PPtr in, PPtr emitter,
138 PPtr spectator,
139 const vector<DipoleType> & dipoles,
140 int i, bool inDeadZone);
141
145 bool calcMomenta(int j, Energy pT, double y, double phi, double& xg,
146 double& xs, double& xe, double& xe_z,
147 vector<Lorentz5Momentum>& particleMomenta);
148
152 bool psCheck(const double xg, const double xs);
153
157 pair<double,double> calculateDipole(const DipoleType & dipoleId,
158 const Particle & inpart,
159 const ParticleVector & decay3);
160
164 double dipoleSpinFactor(tcPDPtr emitter, double z);
165
169 double colourCoeff(tcPDPtr emitter, tcPDPtr spectator,
170 tcPDPtr other, DipoleType dipole);
171
175 void getColourLines(RealEmissionProcessPtr real);
176
180 RealEmissionProcessPtr getHardEvent(RealEmissionProcessPtr born,
181 bool inDeadZone,
182 ShowerInteraction inter);
183
187 bool inTotalDeadZone(double xg, double xs,
188 const vector<DipoleType> & dipoles,
189 int i);
190
194 phaseSpaceRegion inInitialFinalDeadZone(double xg, double xa, double a, double c) const;
195
199 phaseSpaceRegion inFinalFinalDeadZone(double xb, double xc, double b, double c) const;
200
204 bool useMEforT2() const {return useMEforT2_;}
205
206protected:
207
215 const Energy & pT() const { return pT_;}
216
220 const Energy & mb() const {return mb_;}
221
225 const double & e() const {return e_;}
226
230 const double & s() const {return s_;}
231
235 const double & e2() const {return e2_;}
236
240 const double & s2() const {return s2_;}
242
243private:
244
250
251private:
252
261
265 ShowerAlphaPtr alphaS_;
266
270 ShowerAlphaPtr alphaEM_;
271
275 Energy pTmin_;
276
283
287 double C_;
288
292 double ymax_;
293
297 unsigned int phaseOpt_;
299
300private:
301
309 Energy pT_;
310
314 Energy mb_;
315
319 double e_;
320
324 double s_;
325
329 double e2_;
330
334 double s2_;
335
339 mutable double enhance_;
341};
342
343}
344
345#endif /* Herwig_PerturbativeDecayer_H */
Main class for Decayers implementing multi-channel phase space integration.
MEOption
Enum for the matrix element option.
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwDecayerBase.h:76
The PerturbativeDecayer class is the base class for perturbative decays in Herwig and implements the ...
const double & e2() const
Reduced mass of emitter child particle squared.
const double & e() const
Reduced mass of emitter child particle.
vector< Lorentz5Momentum > hardMomenta(PPtr in, PPtr emitter, PPtr spectator, const vector< DipoleType > &dipoles, int i, bool inDeadZone)
Return the momenta including the hard emission.
ShowerAlphaPtr alphaEM()
Coupling for the generation of hard QED radiation.
ShowerInteraction inter_
Members for the generation of the hard radiation.
virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr)
Member to generate the hardest emission in the POWHEG scheme.
bool inTotalDeadZone(double xg, double xs, const vector< DipoleType > &dipoles, int i)
Is the point in the dead-zone for all the dipoles.
double e_
Reduced mass of emitter child particle.
ShowerAlphaPtr alphaEM_
Coupling for the generation of hard QED radiation.
bool useMEforT2_
This flag determines whether the T2 region in the decay shower (JHEP12(2003)_045) is populated by the...
double e2_
Reduced mass of emitter child particle squared.
bool useMEforT2() const
For me corrections use the shower or me for the T2 region.
pair< double, double > calculateDipole(const DipoleType &dipoleId, const Particle &inpart, const ParticleVector &decay3)
Return dipole corresponding to the DipoleType dipoleId.
double s2_
Reduced mass of spectator child particle squared.
phaseSpaceRegion inInitialFinalDeadZone(double xg, double xa, double a, double c) const
Is the point in the dead-zone for an initial-final colour connection.
const Energy & mb() const
Mass of decaying particle.
RealEmissionProcessPtr getHardEvent(RealEmissionProcessPtr born, bool inDeadZone, ShowerInteraction inter)
Generate a hard emission.
double C_
Prefactor for the sampling.
double s_
Reduced mass of spectator child particle.
Energy pT_
Mmeber variables for the kinematics of the hard emission.
double enhance_
Enhancement prefactor for special cases.
const Energy & pT() const
Access to the kinematics for inheriting classes.
virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr)
Apply the hard matrix element correction to a given hard process or decay.
static void Init()
The standard Init function used to initialize the interfaces.
bool calcMomenta(int j, Energy pT, double y, double phi, double &xg, double &xs, double &xe, double &xe_z, vector< Lorentz5Momentum > &particleMomenta)
Calculate momenta of all the particles.
ShowerAlphaPtr alphaS()
Coupling for the generation of hard QCD radiation.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
const double & s() const
Reduced mass of spectator child particle.
double ymax_
Maximum value for y.
PerturbativeDecayer()
The default constructor.
bool psCheck(const double xg, const double xs)
Check the calculated momenta are physical.
Energy mb_
Mass of decaying particle.
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
double colourCoeff(tcPDPtr emitter, tcPDPtr spectator, tcPDPtr other, DipoleType dipole)
Return the colour coefficient of the dipole.
virtual double matrixElementRatio(const Particle &inpart, const ParticleVector &decay2, const ParticleVector &decay3, MEOption meopt, ShowerInteraction inter)
Calculate matrix element ratio .
ShowerAlphaPtr alphaS_
Coupling for the generation of hard QCD radiation.
double dipoleSpinFactor(tcPDPtr emitter, double z)
Return contribution to dipole that depends on the spin of the emitter.
phaseSpaceRegion inFinalFinalDeadZone(double xb, double xc, double b, double c) const
Is the point in the dead-zone for a final-final colour connection.
const double & s2() const
Reduced mass of spectator child particle squared.
phaseSpaceRegion
Phase-space region for an emission (assumes .
PerturbativeDecayer & operator=(const PerturbativeDecayer &)=delete
The assignment operator is private and must never be called.
unsigned int phaseOpt_
Option for phase-space sampling.
bool identifyDipoles(vector< DipoleType > &dipoles, PPtr &aProgenitor, PPtr &bProgenitor, PPtr &cProgenitor, ShowerInteraction inter) const
Work out the type of process.
void getColourLines(RealEmissionProcessPtr real)
Set up the colour lines.
ShowerInteraction
Handy header file to be included in all Shower classes.
-*- C++ -*-
ThePEG::Ptr< Particle >::pointer PPtr
vector< PPtr > ParticleVector
constexpr ZeroUnit ZERO
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr