herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
SMWDecayer.h
1 // -*- C++ -*-
2 //
3 // SMWDecayer.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_SMWDecayer_H
10 #define HERWIG_SMWDecayer_H
11 //
12 // This is the declaration of the SMWDecayer class.
13 //
14 #include "Herwig/Decay/PerturbativeDecayer.h"
15 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
16 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
17 #include "Herwig/Decay/DecayPhaseSpaceMode.h"
18 
19 namespace Herwig {
20 using namespace ThePEG;
21 using namespace ThePEG::Helicity;
22 
33 
34 public:
35 
39  SMWDecayer();
40 
41 public:
42 
51  virtual bool hasMECorrection() {return true;}
52 
56  virtual void initializeMECorrection(RealEmissionProcessPtr , double & ,
57  double & );
58 
71  virtual bool softMatrixElementVeto(PPtr parent,
72  PPtr progenitor,
73  const bool & fs,
74  const Energy & highestpT,
75  const vector<tcPDPtr> & ids,
76  const double & z,
77  const Energy & scale,
78  const Energy & pT);
79 
83  virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
84 
85 public:
86 
93  virtual int modeNumber(bool & cc, tcPDPtr parent,
94  const tPDVector & children) const;
95 
104  virtual double me2(const int ichan, const Particle & part,
105  const ParticleVector & decay,MEOption meopt) const;
106 
112  virtual void dataBaseOutput(ofstream & os,bool header) const;
113 
114 public:
115 
122  void persistentOutput(PersistentOStream & os) const;
123 
129  void persistentInput(PersistentIStream & is, int version);
131 
135  static void Init();
136 
137 protected:
138 
145  virtual IBPtr clone() const {return new_ptr(*this);}
146 
151  virtual IBPtr fullclone() const {return new_ptr(*this);}
153 
154 protected:
155 
163  virtual void doinit();
164 
169  virtual void doinitrun();
171 
172 protected:
173 
177  void setRho(double);
178 
182  void setKtildeSymm();
183 
187  void setKtilde2();
188 
196  double getZfromX(double, double);
197 
201  double getKfromX(double, double);
203 
211  void getXXbar(double kt, double z, double & x, double & xbar);
212 
222  double qWeight(double x, double xbar);
223 
229  double qbarWeight(double x, double xbar);
230 
236  double qWeightX(Energy qtilde, double z);
237 
243  double qbarWeightX(Energy qtilde, double z);
245 
249  double u(double);
250 
258  double MEV(double, double);
259 
263  double MEA(double, double);
264 
270  double PS(double x1, double x2);
272 
273 protected:
274 
278  double calculateRealEmission(double x1, double x2,
279  vector<PPtr> hardProcess,
280  double phi, double muj, double muk,
281  int iemit, bool subtract) const;
282 
286  double meRatio(vector<cPDPtr> partons,
287  vector<Lorentz5Momentum> momenta,
288  unsigned int iemitter,bool subtract) const;
289 
293  virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2,
294  const ParticleVector & decay3, MEOption meopt,
295  ShowerInteraction inter);
296 
300  double loME(const vector<cPDPtr> & partons,
301  const vector<Lorentz5Momentum> & momenta) const;
302 
306  InvEnergy2 realME(const vector<cPDPtr> & partons,
307  const vector<Lorentz5Momentum> & momenta,
308  ShowerInteraction inter) const;
309 
310 private:
311 
315  SMWDecayer & operator=(const SMWDecayer &) = delete;
316 
317  private:
318 
319 
323  AbstractFFVVertexPtr FFWVertex_;
324 
328  AbstractFFVVertexPtr FFGVertex_;
329 
333  AbstractFFVVertexPtr FFPVertex_;
334 
338  AbstractVVVVertexPtr WWWVertex_;
339 
347  vector<double> quarkWeight_;
348 
352  vector<double> leptonWeight_;
354 
358  mutable RhoDMatrix rho_;
359 
363  mutable vector<VectorWaveFunction> vectors_;
364 
368  mutable vector<SpinorWaveFunction> wave_;
369 
373  mutable vector<SpinorBarWaveFunction> wavebar_;
374 
375 private:
376 
380  Energy d_Q_;
381 
385  Energy d_m_;
386 
390  double d_rho_;
391 
395  double d_v_;
396 
400  double d_kt1_;
401 
405  double d_kt2_;
406 
410  static const double EPS_;
411 
412 private:
413 
417  double CF_;
418 
422  mutable Energy mW_;
423 
424 
428  mutable double aS_;
429 
433  mutable Energy2 scale_;
434 
443 
447  vector<tcPDPtr> partons_;
448 
452  vector<Lorentz5Momentum> quark_;
453 
457  Lorentz5Momentum gauge_;
458 
463 
467  Energy2 mw2_;
469 
473  bool NLO_;
474 };
475 
476 }
477 
478 
479 #endif /* HERWIG_SMWDecayer_H */
ThePEG::Ptr< Particle >::pointer PPtr
AbstractVVVVertexPtr WWWVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMWDecayer.h:338
ShowerInteraction
Handy header file to be included in all Shower classes.
double d_rho_
The rho parameter.
Definition: SMWDecayer.h:390
Energy mW_
The W mass.
Definition: SMWDecayer.h:422
AbstractFFVVertexPtr FFGVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMWDecayer.h:328
double d_kt2_
The initial kappa-tilde values for radiation from the antiquark.
Definition: SMWDecayer.h:405
Energy2 scale_
The scale.
Definition: SMWDecayer.h:433
double d_kt1_
The initial kappa-tilde values for radiation from the quark.
Definition: SMWDecayer.h:400
virtual bool hasMECorrection()
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: SMWDecayer.h:51
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
The SMWDecayer is designed to perform the decay of the W boson to the Standard Model fermions...
Definition: SMWDecayer.h:32
Energy d_m_
Quark mass.
Definition: SMWDecayer.h:385
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: SMWDecayer.h:151
RhoDMatrix rho_
Spin density matrix for the decay.
Definition: SMWDecayer.h:358
double d_v_
The v parameter.
Definition: SMWDecayer.h:395
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
Definition: SMWDecayer.h:83
AbstractFFVVertexPtr FFWVertex_
Pointer to the fermion-antifermion W vertex.
Definition: SMWDecayer.h:323
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: SMWDecayer.h:145
static const double EPS_
Cut-off parameter.
Definition: SMWDecayer.h:410
vector< VectorWaveFunction > vectors_
Polarization vectors for the decay.
Definition: SMWDecayer.h:363
MEOption
Enum for the matrix element option.
vector< tPDPtr > tPDVector
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwDecayerBase.h:76
Lorentz5Momentum gauge_
The momentum of the radiated gauge boson.
Definition: SMWDecayer.h:457
AbstractFFVVertexPtr FFPVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMWDecayer.h:333
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
vector< double > quarkWeight_
maximum weights for the different integrations
Definition: SMWDecayer.h:347
The PerturbativeDecayer class is the base class for perturbative decays in Herwig and implements the ...
vector< tcPDPtr > partons_
The ParticleData objects for the fermions.
Definition: SMWDecayer.h:447
double CF_
The colour factor.
Definition: SMWDecayer.h:417
Energy d_Q_
CM energy.
Definition: SMWDecayer.h:380
PPtr wboson_
The W boson.
Definition: SMWDecayer.h:462
Energy2 mw2_
W mass squared.
Definition: SMWDecayer.h:467
tcPDPtr gluon_
Stuff for the POWHEG correction.
Definition: SMWDecayer.h:442
vector< double > leptonWeight_
Weights for the W to leptons decays.
Definition: SMWDecayer.h:352
-*- C++ -*-
vector< SpinorBarWaveFunction > wavebar_
Barred spinors for the decay.
Definition: SMWDecayer.h:373
vector< PPtr > ParticleVector
bool NLO_
Whether ro return the LO or NLO result.
Definition: SMWDecayer.h:473
double aS_
The strong coupling.
Definition: SMWDecayer.h:428
vector< Lorentz5Momentum > quark_
The fermion momenta.
Definition: SMWDecayer.h:452
vector< SpinorWaveFunction > wave_
Spinors for the decay.
Definition: SMWDecayer.h:368