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