herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
SMZDecayer.h
1 // -*- C++ -*-
2 //
3 // SMZDecayer.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_SMZDecayer_H
10 #define HERWIG_SMZDecayer_H
11 //
12 // This is the declaration of the SMZDecayer class.
13 //
14 #include "Herwig/Decay/PerturbativeDecayer.h"
15 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
16 #include "Herwig/Decay/DecayPhaseSpaceMode.h"
17 
18 namespace Herwig {
19 using namespace ThePEG;
20 using namespace ThePEG::Helicity;
21 
32 
33 public:
34 
38  SMZDecayer();
39 
48  virtual bool hasMECorrection() {return true;}
49 
53  virtual void initializeMECorrection(RealEmissionProcessPtr , double & ,
54  double & );
55 
68  virtual bool softMatrixElementVeto(PPtr parent,
69  PPtr progenitor,
70  const bool & fs,
71  const Energy & highestpT,
72  const vector<tcPDPtr> & ids,
73  const double & z,
74  const Energy & scale,
75  const Energy & pT);
76 
80  virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
82 
83 public:
84 
91  virtual int modeNumber(bool & cc, tcPDPtr parent,
92  const tPDVector & children) const;
93 
102  virtual double me2(const int ichan, const Particle & part,
103  const ParticleVector & decay,MEOption meopt) const;
104 
110  virtual void dataBaseOutput(ofstream & os,bool header) const;
111 
123  virtual double oneLoopVirtualME(unsigned int imode,
124  const Particle & part,
125  const ParticleVector & products);
126 
140  virtual InvEnergy2 realEmissionME(unsigned int imode,
141  const Particle & part,
142  ParticleVector & products,
143  unsigned int iemitter,
144  double ctheta, double stheta,
145  const LorentzRotation & rot1,
146  const LorentzRotation & rot2);
148 
149 public:
150 
157  void persistentOutput(PersistentOStream & os) const;
158 
164  void persistentInput(PersistentIStream & is, int version);
166 
170  static void Init();
171 
172 protected:
173 
180  virtual IBPtr clone() const {return new_ptr(*this);}
181 
186  virtual IBPtr fullclone() const {return new_ptr(*this);}
188 
189 protected:
190 
198  virtual void doinit();
199 
204  virtual void doinitrun();
206 
207 protected:
208 
212  void setRho(double);
213 
217  void setKtildeSymm();
218 
222  void setKtilde2();
223 
231  double getZfromX(double, double);
232 
236  double getKfromX(double, double);
238 
246  void getXXbar(double kt, double z, double & x, double & xbar);
247 
257  double qWeight(double x, double xbar);
258 
264  double qbarWeight(double x, double xbar);
265 
271  double qWeightX(Energy qtilde, double z);
272 
278  double qbarWeightX(Energy qtilde, double z);
280 
283  double u(double);
284 
292  double MEV(double, double);
293 
297  double MEA(double, double);
298 
304  double PS(double x1, double x2);
306 
307 protected:
308 
312  double calculateRealEmission(double x1, double x2,
313  vector<PPtr> hardProcess,
314  double phi,
315  bool subtract,
316  int emitter) const;
317 
321  double calculateRealEmission(double x1, double x2,
322  vector<PPtr> hardProcess,
323  double phi,
324  bool subtract) const;
325 
329  bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT) const;
330 
334  InvEnergy calculateJacobian(double x1, double x2, Energy pT) const;
335 
339  double meRatio(vector<cPDPtr> partons,
340  vector<Lorentz5Momentum> momenta,
341  unsigned int iemitter,bool subtract) const;
342 
346  virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2,
347  const ParticleVector & decay3, MEOption meopt,
348  ShowerInteraction inter);
349 
353  double loME(const vector<cPDPtr> & partons,
354  const vector<Lorentz5Momentum> & momenta) const;
355 
359  InvEnergy2 realME(const vector<cPDPtr> & partons,
360  const vector<Lorentz5Momentum> & momenta,
361  ShowerInteraction inter) const;
362 
366  bool getEvent(vector<PPtr> hardProcess);
367 
368 private:
369 
373  SMZDecayer & operator=(const SMZDecayer &) = delete;
374 
375 private:
376 
377 
378 
382  FFVVertexPtr FFZVertex_;
383 
387  AbstractFFVVertexPtr FFPVertex_;
388 
392  AbstractFFVVertexPtr FFGVertex_;
393 
401  vector<double> quarkWeight_;
402 
406  vector<double> leptonWeight_;
408 
412  mutable RhoDMatrix _rho;
413 
417  mutable vector<VectorWaveFunction> _vectors;
418 
422  mutable vector<SpinorWaveFunction> _wave;
423 
427  mutable vector<SpinorBarWaveFunction> _wavebar;
428 
429 private:
430 
434  Energy d_Q_;
435 
439  Energy d_m_;
440 
444  double d_rho_;
445 
449  double d_v_;
450 
454  double d_kt1_;
455 
459  double d_kt2_;
460 
464  static const double EPS_;
465 
466 private:
467 
471  double CF_;
472 
476  mutable Energy mZ_;
477 
481  mutable double mu_;
482 
486  mutable double mu2_;
487 
491  mutable double aS_;
492 
496  mutable Energy2 scale_;
497 
506 
510  vector<tcPDPtr> partons_;
511 
515  vector<Lorentz5Momentum> quark_;
516 
520  Lorentz5Momentum gauge_;
521 
526 
530  Energy2 mz2_;
532 
536  bool NLO_;
537 };
538 
539 }
540 
541 
542 #endif /* HERWIG_SMZDecayer_H */
ThePEG::Ptr< Particle >::pointer PPtr
AbstractFFVVertexPtr FFGVertex_
Pointer to the fermion-antifermion G vertex.
Definition: SMZDecayer.h:392
FFVVertexPtr FFZVertex_
Pointer to the fermion-antifermion Z vertex.
Definition: SMZDecayer.h:382
AbstractFFVVertexPtr FFPVertex_
Pointer to the photon vertex.
Definition: SMZDecayer.h:387
vector< double > leptonWeight_
Weights for the Z to leptons decays.
Definition: SMZDecayer.h:406
ShowerInteraction
Handy header file to be included in all Shower classes.
virtual IBPtr clone() const
Make a simple clone of this object.
Definition: SMZDecayer.h:180
vector< tcPDPtr > partons_
The ParticleData objects for the fermions.
Definition: SMZDecayer.h:510
double CF_
The colour factor.
Definition: SMZDecayer.h:471
Lorentz5Momentum gauge_
The momentum of the radiated gauge boson.
Definition: SMZDecayer.h:520
vector< double > quarkWeight_
maximum weights for the different integrations
Definition: SMZDecayer.h:401
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
double d_v_
The v parameter.
Definition: SMZDecayer.h:449
tcPDPtr gluon_
Stuff for the POWHEG correction.
Definition: SMZDecayer.h:505
double mu2_
The square of the reduced mass.
Definition: SMZDecayer.h:486
bool NLO_
Whether or not to give an LO or NLO normalisation.
Definition: SMZDecayer.h:536
vector< SpinorBarWaveFunction > _wavebar
Barred spinors for the decay.
Definition: SMZDecayer.h:427
Energy d_m_
Quark mass.
Definition: SMZDecayer.h:439
Energy mZ_
The Z mass.
Definition: SMZDecayer.h:476
static const double EPS_
Cut-off parameter.
Definition: SMZDecayer.h:464
double d_kt1_
The initial kappa-tilde values for radiation from the quark.
Definition: SMZDecayer.h:454
vector< SpinorWaveFunction > _wave
Spinors for the decay.
Definition: SMZDecayer.h:422
MEOption
Enum for the matrix element option.
double d_kt2_
The initial kappa-tilde values for radiation from the antiquark.
Definition: SMZDecayer.h:459
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition: SMZDecayer.h:186
vector< tPDPtr > tPDVector
POWHEGType
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: HwDecayerBase.h:76
The SMZDecayer is designed to perform the decay of the Z boson to the Standard Model fermions...
Definition: SMZDecayer.h:31
vector< VectorWaveFunction > _vectors
Polarization vectors for the decay.
Definition: SMZDecayer.h:417
double mu_
The reduced mass.
Definition: SMZDecayer.h:481
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
vector< Lorentz5Momentum > quark_
The fermion momenta.
Definition: SMZDecayer.h:515
Energy d_Q_
CM energy.
Definition: SMZDecayer.h:434
The PerturbativeDecayer class is the base class for perturbative decays in Herwig and implements the ...
Energy2 mz2_
Higgs mass squared.
Definition: SMZDecayer.h:530
double aS_
The strong coupling.
Definition: SMZDecayer.h:491
Energy2 scale_
The scale.
Definition: SMZDecayer.h:496
PPtr zboson_
The Z boson.
Definition: SMZDecayer.h:525
-*- C++ -*-
virtual POWHEGType hasPOWHEGCorrection()
Has a POWHEG style correction.
Definition: SMZDecayer.h:80
RhoDMatrix _rho
Spin density matrix for the decay.
Definition: SMZDecayer.h:412
vector< PPtr > ParticleVector
double d_rho_
The rho parameter.
Definition: SMZDecayer.h:444
virtual bool hasMECorrection()
Virtual members to be overridden by inheriting classes which implement hard corrections.
Definition: SMZDecayer.h:48