herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
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 
12 namespace Herwig {
13 
14 using namespace ThePEG;
15 
24 
25 protected:
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 
53 public:
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 
80 public:
81 
88  void persistentOutput(PersistentOStream & os) const;
89 
95  void persistentInput(PersistentIStream & is, int version);
97 
104  static void Init();
105 
106 protected:
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 
206 protected:
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 
243 private:
244 
249  PerturbativeDecayer & operator=(const PerturbativeDecayer &) = delete;
250 
251 private:
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 
300 private:
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 */
ThePEG::Ptr< Particle >::pointer PPtr
ShowerAlphaPtr alphaEM_
Coupling for the generation of hard QED radiation.
Energy pT_
Mmeber variables for the kinematics of the hard emission.
double s2_
Reduced mass of spectator child particle squared.
ShowerInteraction
Handy header file to be included in all Shower classes.
bool useMEforT2_
This flag determines whether the T2 region in the decay shower (JHEP12(2003)_045) is populated by the...
ShowerAlphaPtr alphaEM()
Coupling for the generation of hard QED radiation.
Energy mb_
Mass of decaying particle.
double ymax_
Maximum value for y.
const double & e2() const
Reduced mass of emitter child particle squared.
PerturbativeDecayer()
The default constructor.
ShowerAlphaPtr alphaS_
Coupling for the generation of hard QCD radiation.
ShowerAlphaPtr alphaS()
Coupling for the generation of hard QCD radiation.
MEOption
Enum for the matrix element option.
unsigned int phaseOpt_
Option for phase-space sampling.
const double & s2() const
Reduced mass of spectator child particle squared.
double C_
Prefactor for the sampling.
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwDecayerBase.h:76
ShowerInteraction inter_
Members for the generation of the hard radiation.
double e_
Reduced mass of emitter child particle.
Main class for Decayers implementing multi-channel phase space integration.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
The PerturbativeDecayer class is the base class for perturbative decays in Herwig and implements the ...
double s_
Reduced mass of spectator child particle.
const Energy & pT() const
Access to the kinematics for inheriting classes.
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
double enhance_
Enhancement prefactor for special cases.
const double & e() const
Reduced mass of emitter child particle.
-*- C++ -*-
phaseSpaceRegion
Phase-space region for an emission (assumes .
bool useMEforT2() const
For me corrections use the shower or me for the T2 region.
double e2_
Reduced mass of emitter child particle squared.
const double & s() const
Reduced mass of spectator child particle.
vector< PPtr > ParticleVector
const Energy & mb() const
Mass of decaying particle.
constexpr ZeroUnit ZERO