diff --git a/Decay/Makefile.am b/Decay/Makefile.am --- a/Decay/Makefile.am +++ b/Decay/Makefile.am @@ -1,236 +1,236 @@ SUBDIRS = FormFactors Tau Baryon VectorMeson Perturbative \ WeakCurrents ScalarMeson TensorMeson Partonic General Radiation if HAVE_EVTGEN SUBDIRS += EvtGen endif noinst_LTLIBRARIES = libHwDecay.la libHwDecay_la_LIBADD = \ $(top_builddir)/PDT/libHwPDT.la nodist_libHwDecay_la_SOURCES = \ hwdecay__all.cc BUILT_SOURCES = hwdecay__all.cc CLEANFILES = hwdecay__all.cc hwdecay__all.cc : $(DIR_H_FILES) $(DIR_CC_FILES) Makefile @echo "Concatenating .cc files into $@" @$(top_srcdir)/cat_with_cpplines $(DIR_CC_FILES) > $@ EXTRA_DIST = $(ALL_H_FILES) $(ALL_CC_FILES) DIR_H_FILES = $(addprefix $(srcdir)/,$(ALL_H_FILES)) ALL_H_FILES = \ DecayIntegrator.fh DecayIntegrator.h \ DecayPhaseSpaceChannel.fh DecayPhaseSpaceChannel.h \ DecayPhaseSpaceMode.fh DecayPhaseSpaceMode.h \ HwDecayerBase.fh HwDecayerBase.h \ HwDecayHandler.h \ DecayVertex.fh DecayVertex.h \ DecayMatrixElement.fh DecayMatrixElement.h \ TwoBodyDecayMatrixElement.h \ GeneralDecayMatrixElement.fh GeneralDecayMatrixElement.h \ -BranchingRatioReweighter.h +BranchingRatioReweighter.h\ +PerturbativeDecayer.h DIR_CC_FILES = $(addprefix $(srcdir)/,$(ALL_CC_FILES)) ALL_CC_FILES = \ DecayIntegrator.cc \ DecayPhaseSpaceChannel.cc \ DecayPhaseSpaceMode.cc \ HwDecayerBase.cc \ HwDecayHandler.cc \ DecayVertex.cc \ DecayMatrixElement.cc \ TwoBodyDecayMatrixElement.cc \ GeneralDecayMatrixElement.cc \ -BranchingRatioReweighter.cc - - +BranchingRatioReweighter.cc\ +PerturbativeDecayer.cc ################## pkglib_LTLIBRARIES = Hw64Decay.la Hw64Decay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 9:0:0 Hw64Decay_la_SOURCES = \ Hw64Decayer.h Hw64Decayer.cc ################## pkglib_LTLIBRARIES += HwMamboDecay.la HwMamboDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 10:0:0 HwMamboDecay_la_SOURCES = \ MamboDecayer.h MamboDecayer.cc ################## noinst_LTLIBRARIES += libHwFormFactor.la libHwFormFactor_la_SOURCES = \ FormFactors/BaryonFormFactor.cc \ FormFactors/ScalarFormFactor.cc \ FormFactors/BtoSGammaHadronicMass.cc \ FormFactors/BaryonFormFactor.fh \ FormFactors/BaryonFormFactor.h \ FormFactors/ScalarFormFactor.fh \ FormFactors/ScalarFormFactor.h \ FormFactors/BtoSGammaHadronicMass.h \ FormFactors/BtoSGammaHadronicMass.fh pkglib_LTLIBRARIES += HwFormFactors.la HwFormFactors_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 10:0:0 HwFormFactors_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/FormFactors nodist_HwFormFactors_la_SOURCES = \ FormFactors/Formfactor__all.cc ################## pkglib_LTLIBRARIES += HwTauDecay.la HwTauDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 10:0:0 HwTauDecay_la_SOURCES = \ Tau/TauDecayer.cc ################## pkglib_LTLIBRARIES += HwBaryonDecay.la HwBaryonDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 9:0:0 HwBaryonDecay_la_LIBADD = \ $(top_builddir)/PDT/libHwBaryonWidth.la HwBaryonDecay_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/Baryon nodist_HwBaryonDecay_la_SOURCES = \ Baryon/BaryonDecayer__all.cc ################## pkglib_LTLIBRARIES += HwVMDecay.la HwVMDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 9:0:0 HwVMDecay_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/VectorMeson nodist_HwVMDecay_la_SOURCES = \ VectorMeson/VMDecayer__all.cc ################## pkglib_LTLIBRARIES += HwPerturbativeDecay.la HwPerturbativeDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 10:0:0 HwPerturbativeDecay_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/Perturbative nodist_HwPerturbativeDecay_la_SOURCES = \ Perturbative/Perturbative__all.cc ################## noinst_LTLIBRARIES += libHwWeakCurrent.la libHwWeakCurrent_la_SOURCES = \ WeakCurrents/WeakDecayCurrent.cc \ WeakCurrents/LeptonNeutrinoCurrent.cc \ WeakCurrents/WeakDecayCurrent.fh \ WeakCurrents/WeakDecayCurrent.h \ WeakCurrents/LeptonNeutrinoCurrent.fh \ WeakCurrents/LeptonNeutrinoCurrent.h pkglib_LTLIBRARIES += HwWeakCurrents.la HwWeakCurrents_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 10:0:0 HwWeakCurrents_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/WeakCurrents nodist_HwWeakCurrents_la_SOURCES = \ WeakCurrents/WeakCurrents__all.cc ################## pkglib_LTLIBRARIES += HwSMDecay.la HwSMDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 11:0:0 HwSMDecay_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/ScalarMeson nodist_HwSMDecay_la_SOURCES = \ ScalarMeson/SMDecayer__all.cc ################## pkglib_LTLIBRARIES += HwTMDecay.la HwTMDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 9:0:0 HwTMDecay_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/TensorMeson nodist_HwTMDecay_la_SOURCES = \ TensorMeson/TMDecayer__all.cc ################## pkglib_LTLIBRARIES += HwPartonicDecay.la HwPartonicDecay_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 10:0:0 HwPartonicDecay_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/Partonic nodist_HwPartonicDecay_la_SOURCES = \ Partonic/Partonic__all.cc ################## noinst_LTLIBRARIES += libHwDecRad.la libHwDecRad_la_SOURCES = \ Radiation/DecayRadiationGenerator.cc \ Radiation/QEDRadiationHandler.cc \ Radiation/DecayRadiationGenerator.h \ Radiation/DecayRadiationGenerator.fh \ Radiation/QEDRadiationHandler.fh \ Radiation/QEDRadiationHandler.h pkglib_LTLIBRARIES += HwSOPHTY.la HwSOPHTY_la_LDFLAGS = \ $(AM_LDFLAGS) -module -version-info 4:0:0 HwSOPHTY_la_CPPFLAGS = \ $(AM_CPPFLAGS) -I$(srcdir)/Radiation nodist_HwSOPHTY_la_SOURCES = \ Radiation/Sophty__all.cc ################## diff --git a/Decay/Perturbative/Makefile.am b/Decay/Perturbative/Makefile.am --- a/Decay/Perturbative/Makefile.am +++ b/Decay/Perturbative/Makefile.am @@ -1,29 +1,27 @@ BUILT_SOURCES = Perturbative__all.cc CLEANFILES = Perturbative__all.cc Perturbative__all.cc : $(DIR_H_FILES) $(DIR_CC_FILES) Makefile @echo "Concatenating .cc files into $@" @$(top_srcdir)/cat_with_cpplines $(DIR_CC_FILES) > $@ EXTRA_DIST = $(ALL_H_FILES) $(ALL_CC_FILES) DIR_H_FILES = $(addprefix $(srcdir)/,$(ALL_H_FILES)) ALL_H_FILES = \ - PerturbativeDecayer.h\ SMWDecayer.h\ SMZDecayer.h\ SMTopDecayer.h\ SMHiggsFermionsDecayer.h \ SMHiggsGGHiggsPPDecayer.h\ SMHiggsWWDecayer.h DIR_CC_FILES = $(addprefix $(srcdir)/,$(ALL_CC_FILES)) ALL_CC_FILES = \ - PerturbativeDecayer.cc\ SMWDecayer.cc \ SMZDecayer.cc \ SMTopDecayer.cc \ SMHiggsFermionsDecayer.cc \ SMHiggsGGHiggsPPDecayer.cc \ SMHiggsWWDecayer.cc diff --git a/Decay/Perturbative/SMHiggsFermionsDecayer.h b/Decay/Perturbative/SMHiggsFermionsDecayer.h --- a/Decay/Perturbative/SMHiggsFermionsDecayer.h +++ b/Decay/Perturbative/SMHiggsFermionsDecayer.h @@ -1,311 +1,311 @@ // -*- C++ -*- // // SMHiggsFermionsDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_SMHiggsFermionsDecayer_H #define HERWIG_SMHiggsFermionsDecayer_H // // This is the declaration of the SMHiggsFermionsDecayer class. // -#include "PerturbativeDecayer.h" +#include "Herwig/Decay/PerturbativeDecayer.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.fh" namespace Herwig { using namespace ThePEG; /** * The SMHiggsFermionsDecayer class is designed to decay the Standard Model Higgs * to the Standard Model fermions. * * @see PerturbativeDecayer */ class SMHiggsFermionsDecayer: public PerturbativeDecayer { public: /** * The default constructor. */ SMHiggsFermionsDecayer(); /** * Which of the possible decays is required */ virtual int modeNumber(bool & , tcPDPtr , const tPDVector & ) const {return -1;} /** * Check if this decayer can perfom the decay for a particular mode. * Uses the modeNumber member but can be overridden * @param parent The decaying particle * @param children The decay products */ virtual bool accept(tcPDPtr parent, const tPDVector & children) const; /** * For a given decay mode and a given particle instance, perform the * decay and return the decay products. As this is the base class this * is not implemented. * @return The vector of particles produced in the decay. */ virtual ParticleVector decay(const Particle & parent,const tPDVector & children) const; /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param decay The particles produced in the decay. * @param meopt Option for the calculation of the matrix element * @return The matrix element squared for the phase-space configuration. */ virtual double me2(const int ichan, const Particle & part, const ParticleVector & decay, MEOption meopt) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual void dataBaseOutput(ofstream & os,bool header) const; /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return FSR;} /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** * Calcluate the Kallen function */ double calculateLambda(double x, double y, double z) const; /** * Dipole subtraction term */ InvEnergy2 dipoleSubtractionTerm(double x1, double x2) const; /** * Real emission term */ InvEnergy2 calculateRealEmission(double x1, double x2) const; /** * Virtual term */ double calculateVirtualTerm() const; /** * Non-singlet term */ double calculateNonSingletTerm(double beta, double L) const; /** * Check the sign of the momentum in the \f$z\f$-direction is correct. */ bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT) const; /** * Calculate the Jacobian */ InvEnergy calculateJacobian(double x1, double x2, Energy pT) const; /** * Generate a real emission event */ bool getEvent(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMHiggsFermionsDecayer & operator=(const SMHiggsFermionsDecayer &); private: /** * Pointer to the Higgs vertex */ AbstractFFSVertexPtr _hvertex; /** * maximum weights for the different decay modes */ vector<double> _maxwgt; /** * Spin density matrix */ mutable RhoDMatrix _rho; /** * Scalar wavefunction */ mutable ScalarWaveFunction _swave; /** * Spinor wavefunction */ mutable vector<SpinorWaveFunction> _wave; /** * Barred spinor wavefunction */ mutable vector<SpinorBarWaveFunction> _wavebar; private: /** * The colour factor */ double CF_; /** * The Higgs mass */ mutable Energy mHiggs_; /** * The reduced mass */ mutable double mu_; /** * The square of the reduced mass */ mutable double mu2_; /** * The strong coupling */ mutable double aS_; /** * Stuff for the POWHEG correction */ //@{ /** * Pointer to the object calculating the strong coupling */ ShowerAlphaPtr alphaS_; /** * ParticleData object for the gluon */ tcPDPtr gluon_; /** * The cut off on pt, assuming massless quarks. */ Energy pTmin_; // radiative variables (pt,y) Energy pT_; /** * The ParticleData objects for the fermions */ vector<tcPDPtr> partons_; /** * The fermion momenta */ vector<Lorentz5Momentum> quark_; /** * The momentum of the radiated gauge boson */ Lorentz5Momentum gauge_; /** * The Higgs boson */ PPtr higgs_; /** * Higgs mass squared */ Energy2 mh2_; //@} /** * LO or NLO ? */ bool NLO_; }; } #endif /* HERWIG_SMHiggsFermionsDecayer_H */ diff --git a/Decay/Perturbative/SMHiggsGGHiggsPPDecayer.h b/Decay/Perturbative/SMHiggsGGHiggsPPDecayer.h --- a/Decay/Perturbative/SMHiggsGGHiggsPPDecayer.h +++ b/Decay/Perturbative/SMHiggsGGHiggsPPDecayer.h @@ -1,189 +1,189 @@ // -*- C++ -*- // // SMHiggsGGHiggsPPDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_SMHiggsGGHiggsPPDecayer_H #define HERWIG_SMHiggsGGHiggsPPDecayer_H // // This is the declaration of the SMHiggsGGHiggsPPDecayer class. // -#include "PerturbativeDecayer.h" +#include "Herwig/Decay/PerturbativeDecayer.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The <code>SMHiggsGGHiggsPPDecayer</code> class performs the * of a Standard Model Higgs boson to: a pair * of photons or a pair of gluons, or a \f$Z^0\f$ boson and a photon. * * @see PerturbativeDecayer */ class SMHiggsGGHiggsPPDecayer: public PerturbativeDecayer { public: /** * The default constructor. */ SMHiggsGGHiggsPPDecayer() : _h0wgt(3,1.) {} /** @name Virtual functions required by the Decayer class. */ //@{ /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param decay The particles produced in the decay. * @param meopt Option for the calculation of the matrix element * @return The matrix element squared for the phase-space configuration. */ virtual double me2(const int ichan, const Particle & part, const ParticleVector & decay, MEOption meopt) const; /** * Check if this decayer can perfom the decay for a particular mode. * Uses the modeNumber member but can be overridden * @param parent The decaying particle * @param children The decay products */ virtual bool accept(tcPDPtr parent, const tPDVector & children) const; /** * Which of the possible decays is required */ virtual int modeNumber(bool &, tcPDPtr, const tPDVector & ) const {return -1;} /** * For a given decay mode and a given particle instance, perform the * decay and return the decay products. As this is the base class this * is not implemented. * @return The vector of particles produced in the decay. */ virtual ParticleVector decay(const Particle & parent,const tPDVector & children) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual void dataBaseOutput(ofstream & os,bool header) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving and * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMHiggsGGHiggsPPDecayer & operator=(const SMHiggsGGHiggsPPDecayer &); /** * Pointer to h->gluon,gluon vertex */ AbstractVVSVertexPtr _hggvertex; /** * Pointer to h->gamma,gamma vertex */ AbstractVVSVertexPtr _hppvertex; /** * Pointer to h->gamma,gamma vertex */ AbstractVVSVertexPtr _hzpvertex; /** * Maximum weight for integration */ vector<double> _h0wgt; /** * Spin density matrix */ mutable RhoDMatrix _rho; /** * Scalar wavefunction */ mutable ScalarWaveFunction _swave; /** * Vector wavefunctions */ mutable vector<VectorWaveFunction> _vwave[2]; }; } #endif /* HERWIG_SMHiggsGGHiggsPPDecayer_H */ diff --git a/Decay/Perturbative/SMHiggsWWDecayer.h b/Decay/Perturbative/SMHiggsWWDecayer.h --- a/Decay/Perturbative/SMHiggsWWDecayer.h +++ b/Decay/Perturbative/SMHiggsWWDecayer.h @@ -1,251 +1,251 @@ // -*- C++ -*- // // SMHiggsWWDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_SMHiggsWWDecayer_H #define HERWIG_SMHiggsWWDecayer_H // // This is the declaration of the SMHiggsWWDecayer class. // -#include "PerturbativeDecayer.h" +#include "Herwig/Decay/PerturbativeDecayer.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.fh" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The SMHiggsWWDecayer class performs the decay of the Standard Model * Higgs boson to \f$W^+W^-\f$ and \f$Z^0Z^0\f$ including the decays * of the gauge bosons. * * @see \ref SMHiggsWWDecayerInterfaces "The interfaces" * defined for SMHiggsWWDecayer. */ class SMHiggsWWDecayer: public PerturbativeDecayer { public: /** * A typedef to select the boson decay modes */ typedef Selector<unsigned int> ModeSelector; public: /** * The default constructor. */ SMHiggsWWDecayer(); /** * Check if this decayer can perfom the decay for a particular mode. * Uses the modeNumber member but can be overridden * @param parent The decaying particle * @param children The decay products */ virtual bool accept(tcPDPtr parent, const tPDVector & children) const; /** * For a given decay mode and a given particle instance, perform the * decay and return the decay products. As this is the base class this * is not implemented. * @return The vector of particles produced in the decay. */ virtual ParticleVector decay(const Particle & parent, const tPDVector & children) const; /** * Which of the possible decays is required */ virtual int modeNumber(bool &, tcPDPtr, const tPDVector & ) const {return -1;} /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param decay The particles produced in the decay. * @param meopt Option for the calculation of the matrix element * @return The matrix element squared for the phase-space configuration. */ virtual double me2(const int ichan, const Particle & part, const ParticleVector & decay, MEOption meopt) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual void dataBaseOutput(ofstream & os,bool header) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMHiggsWWDecayer & operator=(const SMHiggsWWDecayer &); private: /** * Pointers to the vertices for the helicity calculations */ //@{ /** * Pointer to the fermion-femion-W vertex */ AbstractFFVVertexPtr _theFFWVertex; /** * Pointer to the fermion-femion-Z vertex */ AbstractFFVVertexPtr _theFFZVertex; /** * Pointer to the higgs-WW/ZZ vertex */ AbstractVVSVertexPtr _theHVVVertex; //@} /** * Selectors for the gauge boson decay modes */ //@{ /** * Selector for the W decays */ ModeSelector _wdecays; /** * Selector for the Z decays */ ModeSelector _zdecays; //@} /** * Product of gauge boson branching ratios for normalisation */ vector<double> _ratio; /** * Maximum weights for the decays */ //@{ /** * Maximum weight for \f$H\to W^+W^-\f$ decays */ vector<double> _wmax; /** * Maximum weight for \f$H\to Z^0Z^0\f$ decays */ vector<double> _zmax; //@} /** * Spin density matrix */ mutable RhoDMatrix _rho; /** * Scalar wavefunction */ mutable ScalarWaveFunction _swave; /** * 1st spinor wavefunction */ mutable vector<SpinorWaveFunction > _awave1; /** * 2nd spinor wavefunction */ mutable vector<SpinorWaveFunction > _awave2; /** * 1st barred spinor wavefunction */ mutable vector<SpinorBarWaveFunction> _fwave1; /** * 2nd barred spinor wavefunction */ mutable vector<SpinorBarWaveFunction> _fwave2; }; } #endif /* HERWIG_SMHiggsWWDecayer_H */ diff --git a/Decay/Perturbative/SMTopDecayer.h b/Decay/Perturbative/SMTopDecayer.h --- a/Decay/Perturbative/SMTopDecayer.h +++ b/Decay/Perturbative/SMTopDecayer.h @@ -1,571 +1,571 @@ // -*- C++ -*- // // SMTopDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_SMTopDecayer_H #define HERWIG_SMTopDecayer_H // // This is the declaration of the SMTopDecayer class. // -#include "PerturbativeDecayer.h" +#include "Herwig/Decay/PerturbativeDecayer.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * \ingroup Decay * * The SMTopDecayer performs decays of the top quark into * the bottom quark and qqbar pairs or to the bottom quark and lepton * neutrino pairs via W boson exchange. */ class SMTopDecayer: public PerturbativeDecayer { public: /** * The default constructor. */ SMTopDecayer(); public: /** * Virtual members to be overridden by inheriting classes * which implement hard corrections */ //@{ /** * Has an old fashioned ME correction */ virtual bool hasMECorrection() {return true;} /** * Initialize the ME correction */ virtual void initializeMECorrection(RealEmissionProcessPtr , double & , double & ); /** * Apply the hard matrix element correction to a given hard process or decay */ virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr); /** * Apply the soft matrix element correction * @param initial The particle from the hard process which started the * shower * @param parent The initial particle in the current branching * @param br The branching struct * @return If true the emission should be vetoed */ virtual bool softMatrixElementVeto(ShowerProgenitorPtr initial, ShowerParticlePtr parent,Branching br); /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return FSR;} /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr); //@} public: /** * Which of the possible decays is required */ virtual int modeNumber(bool & , tcPDPtr , const tPDVector & ) const {return -1;} /** * Check if this decayer can perfom the decay for a particular mode. * Uses the modeNumber member but can be overridden * @param parent The decaying particle * @param children The decay products */ virtual bool accept(tcPDPtr parent, const tPDVector & children) const; /** * For a given decay mode and a given particle instance, perform the * decay and return the decay products. As this is the base class this * is not implemented. * @return The vector of particles produced in the decay. */ virtual ParticleVector decay(const Particle & parent, const tPDVector & children) const; /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param decay The particles produced in the decay. * @param meopt Option for the calculation of the matrix element * @return The matrix element squared for the phase-space configuration. */ virtual double me2(const int ichan, const Particle & part, const ParticleVector & decay, MEOption meopt) const; /** * Method to return an object to calculate the 3 (or higher body) partial width * @param dm The DecayMode * @return A pointer to a WidthCalculatorBase object capable of calculating the width */ virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const; /** * The differential three body decay rate with one integral performed. * @param imode The mode for which the matrix element is needed. * @param q2 The scale, \e i.e. the mass squared of the decaying particle. * @param s The invariant mass which still needs to be integrate over. * @param m1 The mass of the first outgoing particle. * @param m2 The mass of the second outgoing particle. * @param m3 The mass of the third outgoing particle. * @return The differential rate \f$\frac{d\Gamma}{ds}\f$ */ virtual InvEnergy threeBodydGammads(const int imode, const Energy2 q2, const Energy2 s, const Energy m1, const Energy m2, const Energy m3) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual void dataBaseOutput(ofstream & os,bool header) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** * The integrand for the integrate partial width */ Energy6 dGammaIntegrand(Energy2 mffb2, Energy2 mbf2, Energy mt, Energy mb, Energy mf, Energy mfb, Energy mw) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving and * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} protected: /** * Apply the hard matrix element */ vector<Lorentz5Momentum> applyHard(const ParticleVector &p,double,double); /** * Get the weight for hard emission */ double getHard(double, double); /** * This function is auxiliary to the function \f$x_{a}\f$ (hXAB). */ double xgbr(int); /** * This function is auxiliary to the function \f$x_{a}\f$ (hXAB). */ double ktr(double,int); /** * This function determines \f$x_{a}\f$ as a function of \f$x_{g}\f$ * and \f$\kappa\f$ where \f$\kappa\f$ pertains to emissions from the * b. */ double xab(double,double,int); /** * This function determines the point (\f$x_{g}\f$) where the condition that * \f$x_{a}\f$ be real supersedes that due to the external input * \f$\tilde{\kappa}\f$ where, again, \f$\kappa\f$ pertains to emissions from the * b. */ double xgbcut(double); /** * This function determines the minimum value of \f$x_{a}\f$ * for a given \f$\tilde{\kappa}\f$ where \f$\kappa\f$ pertains to * emissions from the c. */ double xaccut(double); /** * This function is auxiliary to the function \f$x_{g}\f$ (hXGC). */ double z(double,double,int,int); /** * This function determines \f$x_{g}\f$ as a function of \f$x_{a}\f$ * and \f$\kappa\f$ where \f$\kappa\f$ pertains to emissions from the * c. It is multivalued, one selects a branch according to the * second to last integer flag (+/-1). The last integer flag * is used to select whether (1) or not (0) you wish to have the * function for the special case of the full phase space, in which * case the fifth argument \f$\kappa\f$ is irrelevant. */ double xgc(double,double,int,int); /** * This function, \f$x_{g,c=0}^{-1}\f$, returns \f$x_{a}\f$ as a function * of \f$x_{g}\f$ for the special case of c=0, for emissions from c * (the b-quark). The third input is \f$\tilde{\kappa}\f$ which pertains * to emissions from c. */ double xginvc0(double,double); /** * For a given value of \f$x_{g}\f$ this returns the maximum value of \f$x_{a}\f$ * in the dead region. */ double approxDeadMaxxa(double,double,double); /** * For a given value of \f$x_{g}\f$ this returns the maximum value of \f$x_{a}\f$ * in the dead region. */ double approxDeadMinxa(double,double,double); /** * This function returns true or false according to whether the values * xg,xa are in the allowed region, the kinematically accessible phase * space. */ bool inTheAllowedRegion(double,double); /** * This function returns true or false according to whether the values * xg,xa are exactly in the approximate dead region. */ bool inTheApproxDeadRegion(double,double, double,double); /** * This function returns true or false according to whether the values * xg,xa are exactly in the dead region. */ bool inTheDeadRegion(double,double, double,double); /** * This function returns values of (\f$x_{g}\f$,\f$x_{a}\f$) distributed * according to \f$\left(1+a-x_{a}\right)^{-1}x_{g}^{-2}\f$ in the * approximate dead region. */ double deadRegionxgxa(double,double); /** * This rotation takes a 5-momentum and returns a rotation matrix * such that it acts on the input 5-momentum so as to * make it point in the +Z direction. Finally it performs a randomn * rotation about the z-axis. */ LorentzRotation rotateToZ(Lorentz5Momentum); /** * Full matrix element with a factor of \f$\frac{\alpha_SC_F}{x_g^2\pi}\f$ removed. * @param xw The momentum fraction of the W boson * @param xg The momentum fraction of the gluon. */ double me(double xw, double xg); /** * Access to the strong coupling */ ShowerAlphaPtr coupling() { return _alpha;} protected: /** * check if event is in dead region */ bool deadZoneCheck(double xw, double xg); protected: /** * Calculate matrix element ratio B/R */ double matrixElementRatio(vector<Lorentz5Momentum> particleMomenta); protected: /** * Calculate momenta of t, b, W, g */ bool calcMomenta(int j, Energy pT, double y, double phi, double& xg, double& xw, double& xb, double& xb_z, vector<Lorentz5Momentum>& particleMomenta); protected: /** * Check the calculated momenta are physical */ bool psCheck(double xg, double xw); protected: /** * Return the momenta including the hard emission */ vector<Lorentz5Momentum> hardMomenta(); private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMTopDecayer & operator=(const SMTopDecayer &); /** *Pointer to the W vertex */ AbstractFFVVertexPtr _wvertex; /** * Max weight for integration */ //@{ /** * Weight \f$W\to q\bar{q}'\f$ */ vector<double> _wquarkwgt; /** * Weight \f$W\to \ell \nu\f$ */ vector<double> _wleptonwgt; //@} /** * Pointer to the \f$W^\pm\f$ */ PDPtr _wplus; /** * Spin density matrix for the decay */ mutable RhoDMatrix _rho; /** * 1st spinor for the decay */ mutable vector<SpinorWaveFunction > _inHalf; /** * 2nd spinor for the decay */ mutable vector<SpinorWaveFunction > _outHalf; /** * 1st barred spinor for the decay */ mutable vector<SpinorBarWaveFunction> _inHalfBar; /** * 2nd barred spinor for the decay */ mutable vector<SpinorBarWaveFunction> _outHalfBar; /** * The mass of the W boson */ Energy _ma; /** * The mass of the bottom quark */ Energy _mc; /** * The top mass */ Energy _mt; /** * The gluon mass. */ Energy _mg; /** * The mass ratio for the W. */ double _a; /** * The mass ratio for the bottom. */ double _c; /** * The mass ratio for the gluon. */ double _g; /** * Two times the energy fraction of a. */ double _ktb; /** * Two times the energy fraction of the gluon. */ double _ktc; /** * Two times the energy fraction of the gluon. */ double _xg; /** * Two times the energy fraction of a. */ double _xa; /** * Two times the energy fraction of c. */ double _xc; /** * This determines the hard matrix element importance * sampling in _xg. _xg_sampling=2.0 samples as 1/xg^2. */ double _xg_sampling; /** * The enhancement factor for initial-state radiation */ double _initialenhance; /** * The enhancement factor for final-state radiation */ double _finalenhance; /** * This flag determines whether the T2 region in the decay shower * (JHEP12(2003)_045) is populated by the ME correction (true) or * the shower from the decaying particle. */ bool _useMEforT2; /** * Pointer to the coupling */ ShowerAlphaPtr _alpha; private: /** * Top quark mass */ Energy mt_; /** * Reduced \f$W^\pm\f$ mass */ double w_; /** * Reduced bottom mass */ double b_; /** * Reduced \f$W^\pm\f$ mass squared */ double w2_; /** * Reduced bottom mass squared */ double b2_; /** * Minimum \f$p_T\f$ */ Energy pTmin_; /** * Transverse momentum of the emission */ Energy pT_; }; } #endif /* HERWIG_SMTopDecayer_H */ diff --git a/Decay/Perturbative/SMWDecayer.h b/Decay/Perturbative/SMWDecayer.h --- a/Decay/Perturbative/SMWDecayer.h +++ b/Decay/Perturbative/SMWDecayer.h @@ -1,546 +1,546 @@ // -*- C++ -*- // // SMWDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_SMWDecayer_H #define HERWIG_SMWDecayer_H // // This is the declaration of the SMWDecayer class. // -#include "PerturbativeDecayer.h" +#include "Herwig/Decay/PerturbativeDecayer.h" #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Decay * * The <code>SMWDecayer</code> is designed to perform the decay of the * W boson to the Standard Model fermions, including the first order * electroweak corrections. * * @see PerturbativeDecayer * */ class SMWDecayer: public PerturbativeDecayer { public: /** * Default constructor. */ SMWDecayer(); public: /** * Virtual members to be overridden by inheriting classes * which implement hard corrections */ //@{ /** * Has an old fashioned ME correction */ virtual bool hasMECorrection() {return true;} /** * Initialize the ME correction */ virtual void initializeMECorrection(RealEmissionProcessPtr , double & , double & ); /** * Apply the hard matrix element correction to a given hard process or decay */ virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr); /** * Apply the soft matrix element correction * @param initial The particle from the hard process which started the * shower * @param parent The initial particle in the current branching * @param br The branching struct * @return If true the emission should be vetoed */ virtual bool softMatrixElementVeto(ShowerProgenitorPtr initial, ShowerParticlePtr parent,Branching br); /** * Virtual members to be overridden by inheriting classes * which implement hard corrections */ //@{ /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return FSR;} /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr); //@} public: /** * Which of the possible decays is required * @param cc Is this mode the charge conjugate * @param parent The decaying particle * @param children The decay products */ virtual int modeNumber(bool & cc, tcPDPtr parent, const tPDVector & children) const; /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param decay The particles produced in the decay. * @param meopt Option for the calculation of the matrix element * @return The matrix element squared for the phase-space configuration. */ virtual double me2(const int ichan, const Particle & part, const ParticleVector & decay,MEOption meopt) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual void dataBaseOutput(ofstream & os,bool header) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving and * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} protected: /** * Apply the hard matrix element */ vector<Lorentz5Momentum> applyHard(const ParticleVector &p); /** * Get the weight for hard emission */ double getHard(double &, double &); /** * Set the \f$\rho\f$ parameter */ void setRho(double); /** * Set the \f$\tilde{\kappa}\f$ parameters symmetrically */ void setKtildeSymm(); /** * Set second \f$\tilde{\kappa}\f$, given the first. */ void setKtilde2(); /** * Translate the variables from \f$x_q,x_{\bar{q}}\f$ to \f$\tilde{\kappa},z\f$ */ //@{ /** * Calculate \f$z\f$. */ double getZfromX(double, double); /** * Calculate \f$\tilde{\kappa}\f$. */ double getKfromX(double, double); //@} /** * Calculate \f$x_{q},x_{\bar{q}}\f$ from \f$\tilde{\kappa},z\f$. * @param kt \f$\tilde{\kappa}\f$ * @param z \f$z\f$ * @param x \f$x_{q}\f$ * @param xbar \f$x_{\bar{q}}\f$ */ void getXXbar(double kt, double z, double & x, double & xbar); /** * Soft weight */ //@{ /** * Soft quark weight calculated from \f$x_{q},x_{\bar{q}}\f$ * @param x \f$x_{q}\f$ * @param xbar \f$x_{\bar{q}}\f$ */ double qWeight(double x, double xbar); /** * Soft antiquark weight calculated from \f$x_{q},x_{\bar{q}}\f$ * @param x \f$x_{q}\f$ * @param xbar \f$x_{\bar{q}}\f$ */ double qbarWeight(double x, double xbar); /** * Soft quark weight calculated from \f$\tilde{q},z\f$ * @param qtilde \f$\tilde{q}\f$ * @param z \f$z\f$ */ double qWeightX(Energy qtilde, double z); /** * Soft antiquark weight calculated from \f$\tilde{q},z\f$ * @param qtilde \f$\tilde{q}\f$ * @param z \f$z\f$ */ double qbarWeightX(Energy qtilde, double z); //@} /** * ???? */ double u(double); /** * Vector and axial vector parts of the matrix element */ //@{ /** * Vector part of the matrix element */ double MEV(double, double); /** * Axial vector part of the matrix element */ double MEA(double, double); /** * The matrix element, given \f$x_1\f$, \f$x_2\f$. * @param x1 \f$x_1\f$ * @param x2 \f$x_2\f$ */ double PS(double x1, double x2); /** * Access to the strong coupling */ ShowerAlphaPtr alphaS() const {return alpha_;} //@} protected: /** * Pointer to the fermion-antifermion W vertex */ AbstractFFVVertexPtr FFWVertex() const {return FFWVertex_;} /** * Pointer to the fermion-antifermion G vertex */ AbstractFFVVertexPtr FFGVertex() const {return FFGVertex_;} /** * Real emission term, for use in generating the hardest emission */ double calculateRealEmission(double x1, double x2, vector<PPtr> hardProcess, double phi, double muj, double muk, int iemit, bool subtract) const; /** * Check the sign of the momentum in the \f$z\f$-direction is correct. */ bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT, double muj, double muk) const; /** * Calculate the Jacobian */ InvEnergy calculateJacobian(double x1, double x2, Energy pT, double muj, double muk) const; /** * Calculate the ratio between NLO & LO ME */ double meRatio(vector<cPDPtr> partons, vector<Lorentz5Momentum> momenta, unsigned int iemitter,bool subtract) const; /** * Calculate the LO ME */ double loME(const vector<cPDPtr> & partons, const vector<Lorentz5Momentum> & momenta) const; /** * Calculate the NLO real emission piece of ME */ InvEnergy2 realME(const vector<cPDPtr> & partons, const vector<Lorentz5Momentum> & momenta) const; /** * Generate a real emission event */ bool getEvent(vector<PPtr> hardProcess); private: /** * Private and non-existent assignment operator. */ SMWDecayer & operator=(const SMWDecayer &); private: /** * Pointer to the fermion-antifermion W vertex */ AbstractFFVVertexPtr FFWVertex_; /** * Pointer to the fermion-antifermion G vertex */ AbstractFFVVertexPtr FFGVertex_; /** * maximum weights for the different integrations */ //@{ /** * Weights for the W to quarks decays. */ vector<double> quarkWeight_; /** * Weights for the W to leptons decays. */ vector<double> leptonWeight_; //@} /** * Spin density matrix for the decay */ mutable RhoDMatrix rho_; /** * Polarization vectors for the decay */ mutable vector<VectorWaveFunction> vectors_; /** * Spinors for the decay */ mutable vector<SpinorWaveFunction> wave_; /** * Barred spinors for the decay */ mutable vector<SpinorBarWaveFunction> wavebar_; private: /** * CM energy */ Energy d_Q_; /** * Quark mass */ Energy d_m_; /** * The rho parameter */ double d_rho_; /** * The v parameter */ double d_v_; /** * The initial kappa-tilde values for radiation from the quark */ double d_kt1_; /** * The initial kappa-tilde values for radiation from the antiquark */ double d_kt2_; /** * Cut-off parameter */ static const double EPS_; /** * Pointer to the coupling */ ShowerAlphaPtr alpha_; private: /** * The colour factor */ double CF_; /** * The W mass */ mutable Energy mW_; // TODO: delete this mutable double mu_; /** * The reduced mass of particle 1 */ mutable double mu1_; /** * The reduced mass of particle 1 squared */ mutable double mu12_; /** * The reduceed mass of particle 2 */ mutable double mu2_; /** * The reduceed mass of particle 2 squared */ mutable double mu22_; /** * The strong coupling */ mutable double aS_; /** * The scale */ mutable Energy2 scale_; /** * Stuff for the POWHEG correction */ //@{ /** * ParticleData object for the gluon */ tcPDPtr gluon_; /** * The cut off on pt, assuming massless quarks. */ Energy pTmin_; // radiative variables (pt,y) Energy pT_; /** * The ParticleData objects for the fermions */ vector<tcPDPtr> partons_; /** * The fermion momenta */ vector<Lorentz5Momentum> quark_; /** * The momentum of the radiated gauge boson */ Lorentz5Momentum gauge_; /** * The W boson */ PPtr wboson_; /** * W mass squared */ Energy2 mw2_; //@} /** * Whether ro return the LO or NLO result */ bool NLO_; }; } #endif /* HERWIG_SMWDecayer_H */ diff --git a/Decay/Perturbative/SMZDecayer.h b/Decay/Perturbative/SMZDecayer.h --- a/Decay/Perturbative/SMZDecayer.h +++ b/Decay/Perturbative/SMZDecayer.h @@ -1,562 +1,562 @@ // -*- C++ -*- // // SMZDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef HERWIG_SMZDecayer_H #define HERWIG_SMZDecayer_H // // This is the declaration of the SMZDecayer class. // -#include "PerturbativeDecayer.h" +#include "Herwig/Decay/PerturbativeDecayer.h" #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Decay * * The <code>SMZDecayer</code> is designed to perform the decay of the * Z boson to the Standard Model fermions. In principle it can also * be used for these decays in any model. * * @see PerturbativeDecayer * */ class SMZDecayer: public PerturbativeDecayer { public: /** * Default constructor. */ SMZDecayer(); /** * Virtual members to be overridden by inheriting classes * which implement hard corrections */ //@{ /** * Has an old fashioned ME correction */ virtual bool hasMECorrection() {return true;} /** * Initialize the ME correction */ virtual void initializeMECorrection(RealEmissionProcessPtr , double & , double & ); /** * Apply the hard matrix element correction to a given hard process or decay */ virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr); /** * Apply the soft matrix element correction * @param initial The particle from the hard process which started the * shower * @param parent The initial particle in the current branching * @param br The branching struct * @return If true the emission should be vetoed */ virtual bool softMatrixElementVeto(ShowerProgenitorPtr initial, ShowerParticlePtr parent,Branching br); /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return FSR;} /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr); //@} public: /** * Which of the possible decays is required * @param cc Is this mode the charge conjugate * @param parent The decaying particle * @param children The decay products */ virtual int modeNumber(bool & cc, tcPDPtr parent, const tPDVector & children) const; /** * Return the matrix element squared for a given mode and phase-space channel. * @param ichan The channel we are calculating the matrix element for. * @param part The decaying Particle. * @param decay The particles produced in the decay. * @param meopt Option for the calculation of the matrix element * @return The matrix element squared for the phase-space configuration. */ virtual double me2(const int ichan, const Particle & part, const ParticleVector & decay,MEOption meopt) const; /** * Output the setup information for the particle database * @param os The stream to output the information to * @param header Whether or not to output the information for MySQL */ virtual void dataBaseOutput(ofstream & os,bool header) const; /** * Members for the generation of QED radiation in the decays */ //@{ /** * The one-loop virtual correction. * @param imode The mode required. * @param part The decaying particle. * @param products The decay products including the radiated photon. * @return Whether the correction is implemented */ virtual double oneLoopVirtualME(unsigned int imode, const Particle & part, const ParticleVector & products); /** * The real emission matrix element * @param imode The mode required * @param part The decaying particle * @param products The decay products including the radiated photon * @param iemitter The particle which emitted the photon * @param ctheta The cosine of the polar angle between the photon and the * emitter * @param stheta The sine of the polar angle between the photon and the * emitter * @param rot1 Rotation from rest frame to frame for real emission * @param rot2 Rotation to place emitting particle along z */ virtual InvEnergy2 realEmissionME(unsigned int imode, const Particle & part, ParticleVector & products, unsigned int iemitter, double ctheta, double stheta, const LorentzRotation & rot1, const LorentzRotation & rot2); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving and * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} protected: /** * Apply the hard matrix element */ vector<Lorentz5Momentum> applyHard(const ParticleVector &p); /** * Get the weight for hard emission */ double getHard(double &, double &); /** * Set the \f$\rho\f$ parameter */ void setRho(double); /** * Set the \f$\tilde{\kappa}\f$ parameters symmetrically */ void setKtildeSymm(); /** * Set second \f$\tilde{\kappa}\f$, given the first. */ void setKtilde2(); /** * Translate the variables from \f$x_q,x_{\bar{q}}\f$ to \f$\tilde{\kappa},z\f$ */ //@{ /** * Calculate \f$z\f$. */ double getZfromX(double, double); /** * Calculate \f$\tilde{\kappa}\f$. */ double getKfromX(double, double); //@} /** * Calculate \f$x_{q},x_{\bar{q}}\f$ from \f$\tilde{\kappa},z\f$. * @param kt \f$\tilde{\kappa}\f$ * @param z \f$z\f$ * @param x \f$x_{q}\f$ * @param xbar \f$x_{\bar{q}}\f$ */ void getXXbar(double kt, double z, double & x, double & xbar); /** * Soft weight */ //@{ /** * Soft quark weight calculated from \f$x_{q},x_{\bar{q}}\f$ * @param x \f$x_{q}\f$ * @param xbar \f$x_{\bar{q}}\f$ */ double qWeight(double x, double xbar); /** * Soft antiquark weight calculated from \f$x_{q},x_{\bar{q}}\f$ * @param x \f$x_{q}\f$ * @param xbar \f$x_{\bar{q}}\f$ */ double qbarWeight(double x, double xbar); /** * Soft quark weight calculated from \f$\tilde{q},z\f$ * @param qtilde \f$\tilde{q}\f$ * @param z \f$z\f$ */ double qWeightX(Energy qtilde, double z); /** * Soft antiquark weight calculated from \f$\tilde{q},z\f$ * @param qtilde \f$\tilde{q}\f$ * @param z \f$z\f$ */ double qbarWeightX(Energy qtilde, double z); //@} /** * ???? */ double u(double); /** * Vector and axial vector parts of the matrix element */ //@{ /** * Vector part of the matrix element */ double MEV(double, double); /** * Axial vector part of the matrix element */ double MEA(double, double); /** * The matrix element, given \f$x_1\f$, \f$x_2\f$. * @param x1 \f$x_1\f$ * @param x2 \f$x_2\f$ */ double PS(double x1, double x2); /** * Access to the strong coupling */ ShowerAlphaPtr alphaS() const {return alpha_;} //@} protected: /** * Real emission term, for use in generating the hardest emission */ double calculateRealEmission(double x1, double x2, vector<PPtr> hardProcess, double phi, bool subtract, int emitter) const; /** * Real emission term, for use in generating the hardest emission */ double calculateRealEmission(double x1, double x2, vector<PPtr> hardProcess, double phi, bool subtract) const; /** * Check the sign of the momentum in the \f$z\f$-direction is correct. */ bool checkZMomenta(double x1, double x2, double x3, double y, Energy pT) const; /** * Calculate the Jacobian */ InvEnergy calculateJacobian(double x1, double x2, Energy pT) const; /** * Calculate the ratio between NLO & LO ME */ double meRatio(vector<cPDPtr> partons, vector<Lorentz5Momentum> momenta, unsigned int iemitter,bool subtract) const; /** * Calculate the LO ME */ double loME(const vector<cPDPtr> & partons, const vector<Lorentz5Momentum> & momenta) const; /** * Calculate the NLO real emission piece of ME */ InvEnergy2 realME(const vector<cPDPtr> & partons, const vector<Lorentz5Momentum> & momenta) const; /** * Generate a real emission event */ bool getEvent(vector<PPtr> hardProcess); private: /** * Private and non-existent assignment operator. */ SMZDecayer & operator=(const SMZDecayer &); private: /** * Pointer to the fermion-antifermion Z vertex */ FFVVertexPtr FFZVertex_; /** * Pointer to the photon vertex */ AbstractFFVVertexPtr FFPVertex_; /** * Pointer to the fermion-antifermion G vertex */ AbstractFFVVertexPtr FFGVertex_; /** * maximum weights for the different integrations */ //@{ /** * Weights for the Z to quarks decays. */ vector<double> quarkWeight_; /** * Weights for the Z to leptons decays. */ vector<double> leptonWeight_; //@} /** * Spin density matrix for the decay */ mutable RhoDMatrix _rho; /** * Polarization vectors for the decay */ mutable vector<VectorWaveFunction> _vectors; /** * Spinors for the decay */ mutable vector<SpinorWaveFunction> _wave; /** * Barred spinors for the decay */ mutable vector<SpinorBarWaveFunction> _wavebar; private: /** * CM energy */ Energy d_Q_; /** * Quark mass */ Energy d_m_; /** * The rho parameter */ double d_rho_; /** * The v parameter */ double d_v_; /** * The initial kappa-tilde values for radiation from the quark */ double d_kt1_; /** * The initial kappa-tilde values for radiation from the antiquark */ double d_kt2_; /** * Cut-off parameter */ static const double EPS_; /** * Pointer to the coupling */ ShowerAlphaPtr alpha_; private: /** * The colour factor */ double CF_; /** * The Z mass */ mutable Energy mZ_; /** * The reduced mass */ mutable double mu_; /** * The square of the reduced mass */ mutable double mu2_; /** * The strong coupling */ mutable double aS_; /** * The scale */ mutable Energy2 scale_; /** * Stuff for the POWHEG correction */ //@{ /** * ParticleData object for the gluon */ tcPDPtr gluon_; /** * The cut off on pt, assuming massless quarks. */ Energy pTmin_; // radiative variables (pt,y) Energy pT_; /** * The ParticleData objects for the fermions */ vector<tcPDPtr> partons_; /** * The fermion momenta */ vector<Lorentz5Momentum> quark_; /** * The momentum of the radiated gauge boson */ Lorentz5Momentum gauge_; /** * The Z boson */ PPtr zboson_; /** * Higgs mass squared */ Energy2 mz2_; //@} /** * Whether or not to give an LO or NLO normalisation */ bool NLO_; }; } #endif /* HERWIG_SMZDecayer_H */ diff --git a/Decay/Perturbative/PerturbativeDecayer.cc b/Decay/PerturbativeDecayer.cc rename from Decay/Perturbative/PerturbativeDecayer.cc rename to Decay/PerturbativeDecayer.cc diff --git a/Decay/Perturbative/PerturbativeDecayer.h b/Decay/PerturbativeDecayer.h rename from Decay/Perturbative/PerturbativeDecayer.h rename to Decay/PerturbativeDecayer.h