diff --git a/MatrixElement/DIS/DISBase.h b/MatrixElement/DIS/DISBase.h --- a/MatrixElement/DIS/DISBase.h +++ b/MatrixElement/DIS/DISBase.h @@ -1,434 +1,428 @@ // -*- C++ -*- #ifndef HERWIG_DISBase_H #define HERWIG_DISBase_H // // This is the declaration of the DISBase class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h" namespace Herwig { using namespace ThePEG; /** * The DISBase class is the base class for the implementation * of DIS type processes including corrections in both the old * fashioned matrix element and POWHEG approaches * * @see \ref DISBaseInterfaces "The interfaces" * defined for DISBase. */ class DISBase: public HwMEBase { public: /** * The default constructor. */ DISBase(); /** * The default constructor. */ virtual ~DISBase(); /** * Members for the old-fashioned matrix element correction */ //@{ /** * 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, ShowerParticlePtr,Branching); //@} /** * Members for the POWHEG stype correction */ //@{ /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return Both;} /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() 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 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<DISBase> initDISBase; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DISBase & operator=(const DISBase &); protected: /** * The NLO weight */ double NLOWeight() const; /** * Calculate the coefficient A for the correlations */ virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout, Energy2 scale) const =0; /** * Members for the matrix element correction */ //@{ /** * Generate the values of \f$x_p\f$ and \f$z_p\f$ * @param xp The value of xp, output * @param zp The value of zp, output */ double generateComptonPoint(double &xp, double & zp); /** * Generate the values of \f$x_p\f$ and \f$z_p\f$ * @param xp The value of xp, output * @param zp The value of zp, output */ double generateBGFPoint(double &xp, double & zp); /** * Return the coefficients for the matrix element piece for * the QCD compton case. The output is the \f$a_i\f$ coefficients to * give the function as * \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$ * @param xp \f$x_p\f$ * @param x2 \f$x_2\f$ * @param xperp \f$x_\perp\f$ * @param norm Normalise to the large $l$ value of the ME */ vector<double> ComptonME(double xp, double x2, double xperp, bool norm); /** * Return the coefficients for the matrix element piece for * the QCD compton case. The output is the \f$a_i\f$ coefficients to * give the function as * \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$ * @param xp \f$x_p\f$ * @param x2 \f$x_3\f$ * @param x3 \f$x_2\f$ * @param xperp \f$x_\perp\f$ * @param norm Normalise to the large $l$ value of the ME */ vector<double> BGFME(double xp, double x2, double x3, double xperp, bool norm); //@} /** * Members for the POWHEG correction */ //@{ /** * Generate a Compton process */ void generateCompton(); /** * Generate a BGF process */ void generateBGF(); //@} private: /** * Parameters for the matrix element correction */ //@{ /** * Enchancement factor for ISR */ double initial_; /** * Enchancement factor for FSR */ double final_; /** * Relative fraction of compton and BGF processes to generate */ double procProb_; /** * Integral for compton process */ double comptonInt_; /** * Integral for BGF process */ double bgfInt_; //@} /** * Parameters for the POWHEG correction */ //@{ /** * Weight for the compton channel */ double comptonWeight_; /** * Weight for the BGF channel */ double BGFWeight_; /** * Minimum value of \f$p_T\f$ */ Energy pTmin_; //@} /** * Parameters for the point being generated */ //@{ /** * \f$Q^2\f$ */ Energy2 q2_; /** * */ double l_; /** * Borm momentum fraction */ double xB_; /** * Beam particle */ tcBeamPtr beam_; /** * Partons */ tcPDPtr partons_[2]; /** * Leptons */ tcPDPtr leptons_[2]; /** * PDF object */ tcPDFPtr pdf_; /** * Rotation to the Breit frame */ LorentzRotation rot_; /** * Lepton momenta */ Lorentz5Momentum pl_[2]; /** * Quark momenta */ Lorentz5Momentum pq_[2]; /** * q */ Lorentz5Momentum q_; /** * Compton parameters */ Energy pTCompton_; bool ComptonISFS_; vector<Lorentz5Momentum> ComptonMomenta_; /** * BGF parameters */ Energy pTBGF_; vector<Lorentz5Momentum> BGFMomenta_; //@} /** * The coefficient for the correlations */ double acoeff_; /** * Coupling */ ShowerAlphaPtr alpha_; /** * Gluon particle data object */ PDPtr gluon_; private: /** * The radiative variables */ //@{ /** * The \f$x_p\f$ or \f$z\f$ real integration variable */ double xp_; //@} /** * The hadron */ tcBeamPtr hadron_; /** * Selects a dynamic or fixed factorization scale */ unsigned int scaleOpt_; /** * The factorization scale */ Energy muF_; /** * Prefactor if variable scale used */ double scaleFact_; /** * Whether to generate the positive, negative or leading order contribution */ unsigned int contrib_; /** * Power for sampling \f$x_p\f$ */ double power_; /** * Jacobian for \f$x_p\f$ integral */ double jac_; }; } #endif /* HERWIG_DISBase_H */ diff --git a/MatrixElement/DIS/MEChargedCurrentDIS.h b/MatrixElement/DIS/MEChargedCurrentDIS.h --- a/MatrixElement/DIS/MEChargedCurrentDIS.h +++ b/MatrixElement/DIS/MEChargedCurrentDIS.h @@ -1,228 +1,222 @@ // -*- C++ -*- #ifndef HERWIG_MEChargedCurrentDIS_H #define HERWIG_MEChargedCurrentDIS_H // // This is the declaration of the MEChargedCurrentDIS class. // #include "DISBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; /** * The MEChargedCurrentDIS class provides the matrix elements for * charged current DIS. * * By default both the incoming and outgong quarks are assumed to be massless * although the mass of the outgoing quark can be included if required. This * option should be used if top production is included. * * @see \ref MEChargedCurrentDISInterfaces "The interfaces" * defined for MEChargedCurrentDIS. */ class MEChargedCurrentDIS: public DISBase { public: /** * The default constructor. */ MEChargedCurrentDIS(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$\ell q\to \gamma/Z \to \ell q\f$. * @param f1 Fermion on lepton line * @param a1 Anti-fermion on lepton line * @param f2 Fermion on quark line * @param a2 Anti-fermion on quark line * @param lorder The order of particles on the lepton line * @param qorder The order of particles on the quark line * @param me Whether or not to calculate the matrix element for spin correlations */ double helicityME(vector<SpinorWaveFunction> & f1 , vector<SpinorWaveFunction> & f2, vector<SpinorBarWaveFunction> & a1 , vector<SpinorBarWaveFunction> & a2, bool lorder, bool qorder, bool me) const; /** * Calculate the coefficient A for the correlations in the hard * radiation */ virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout, Energy2 scale) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEChargedCurrentDIS> initMEChargedCurrentDIS; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEChargedCurrentDIS & operator=(const MEChargedCurrentDIS &); private: /** * Pointer to the vertex for the helicity calculations */ AbstractFFVVertexPtr _theFFWVertex; /** * The allowed flavours of the incoming quarks */ unsigned int _maxflavour; /** * Option for the mass of the outgoing quarks */ unsigned int _massopt; /** * Matrix element for spin correlations */ ProductionMatrixElement _me; /** * Pointers to the intermediates resonances */ //@{ /** * Pointer to the \f$W^+\f$ */ tcPDPtr _wp; /** * Pointer to the \f$W^-\f$ */ tcPDPtr _wm; //@} }; } #endif /* HERWIG_MEChargedCurrentDIS_H */ diff --git a/MatrixElement/DIS/MENeutralCurrentDIS.h b/MatrixElement/DIS/MENeutralCurrentDIS.h --- a/MatrixElement/DIS/MENeutralCurrentDIS.h +++ b/MatrixElement/DIS/MENeutralCurrentDIS.h @@ -1,272 +1,266 @@ // -*- C++ -*- #ifndef HERWIG_MENeutralCurrentDIS_H #define HERWIG_MENeutralCurrentDIS_H // // This is the declaration of the MENeutralCurrentDIS class. // #include "DISBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; /** * The MENeutralCurrentDIS class provides the matrix elements for * neutral current DIS. * * For consistency both the incoming and outgoing quarks are assumed to be massless. * * @see \ref MENeutralCurrentDISInterfaces "The interfaces" * defined for MENeutralCurrentDIS. */ class MENeutralCurrentDIS: public DISBase { public: /** * The default constructor. */ MENeutralCurrentDIS(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$\ell q\to \gamma/Z \to \ell q\f$. * @param f1 Fermion on lepton line * @param a1 Anti-fermion on lepton line * @param f2 Fermion on quark line * @param a2 Anti-fermion on quark line * @param lorder The order of particles on the lepton line * @param qorder The order of particles on the quark line * @param me Whether or not to calculate the matrix element for spin correlations */ double helicityME(vector<SpinorWaveFunction> & f1 , vector<SpinorWaveFunction> & f2, vector<SpinorBarWaveFunction> & a1 , vector<SpinorBarWaveFunction> & a2, bool lorder, bool qorder, bool me) const; /** * Option for treatment of \f$\gamma/Z\f$ terms */ inline unsigned int gammaZOption() const {return _gammaZ;} /** * Calculate the coefficient A for the correlations in the hard * radiation */ virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout, Energy2 scale) const; 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MENeutralCurrentDIS> initMENeutralCurrentDIS; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MENeutralCurrentDIS & operator=(const MENeutralCurrentDIS &); private: /** * Pointer to the vertices for the helicity calculations */ //@{ /** * Pointer to the Z vertex */ AbstractFFVVertexPtr _theFFZVertex; /** * Pointer to the photon vertex */ AbstractFFVVertexPtr _theFFPVertex; //@} /** * Pointers to the intermediate resonances */ //@{ /** * Pointer to the Z ParticleData object */ tcPDPtr _z0; /** * Pointer to the photon ParticleData object */ tcPDPtr _gamma; //@} /** * Switches to control the particles in the hard process */ //@{ /** * Minimumflavour of the incoming quarks */ int _minflavour; /** * Maximum flavour of the incoming quarks */ int _maxflavour; /** * Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one */ unsigned int _gammaZ; //@} /** * Matrix element for spin correlations */ ProductionMatrixElement _me; /** * Electroweak parameters */ //@{ /** * \f$\sin\theta_W\f$ */ double _sinW; /** * \f$\cos\theta_W\f$ */ double _cosW; /** * The square of the Z mass */ Energy2 _mz2; //@} }; } #endif /* HERWIG_MENeutralCurrentDIS_H */ diff --git a/MatrixElement/DrellYanBase.h b/MatrixElement/DrellYanBase.h --- a/MatrixElement/DrellYanBase.h +++ b/MatrixElement/DrellYanBase.h @@ -1,311 +1,305 @@ // -*- C++ -*- #ifndef HERWIG_DrellYanBase_H #define HERWIG_DrellYanBase_H // // This is the declaration of the DrellYanBase class. // #include "HwMEBase.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h" namespace Herwig { using namespace ThePEG; /** * The DrellYanBase class class provides a base class for the implemented * of Drell-Yan type processes and provides the matrix element and POWHEG * style hard corrections * * @see \ref DrellYanBaseInterfaces "The interfaces" * defined for DrellYanBase. */ class DrellYanBase: public HwMEBase { public: /** * The default constructor. */ DrellYanBase(); /** * Has a POWHEG style correction */ //virtual bool hasPOWHEGCorrection() {return _alpha;} virtual POWHEGType hasPOWHEGCorrection() {return ISR;} /** * Has an old fashioned ME correction */ virtual bool hasMECorrection() {return _alpha;} /** * Initialize the ME correction */ virtual void initializeMECorrection(RealEmissionProcessPtr, double & initial, double & final) { final = 1.; initial = 1.; } /** * 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); /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction); /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. */ virtual void setKinematics() { HwMEBase::setKinematics(); mb2_ = sHat(); } protected: /** * Return the momenta and type of hard matrix element correction * @param quarks The original incoming particles. * @param beams The BeamParticleData objects * @param boson The momentum of the original outgoing gauge boson * @param iemit Whether the first (0) or second (1) particle emitted * the radiation * @param itype The type of radiated particle (0 is gluon, 1 is quark * and 2 is antiquark) * @param pnew The momenta of the new particles * @param trans The LorentzRotation from the boson rest frame to the new lab * @param xnew The new values of the momentuym fractions * @return Whether or not the matrix element correction needs to be applied */ bool applyHard(ParticleVector & quarks, vector<tcBeamPtr> beams, Lorentz5Momentum boson,unsigned int & iemit, unsigned int & itype,vector<Lorentz5Momentum> & pnew, LorentzRotation & trans, pair<double,double> & xnew); /** * Returns the matrix element for a given type of process, * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$ * @param emis_type the type of emission, * (0 is \f$q\bar{q}\to Vg\f$, 1 is \f$qg\to Vq\f$ and 2 is \f$g\bar{q}\to V\bar{q}\f$) * @param pt The transverse momentum of the jet * @param yj The rapidity of the jet */ double getResult(int emis_type, Energy pt, double yj); /** * generates the hardest emission (yj,p) * @param pnew The momenta of the new particles * @param emissiontype The type of emission, as for getResult * @return Whether not an emission was generated */ bool getEvent(vector<Lorentz5Momentum> & pnew,int & emissiontype); 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 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(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<DrellYanBase> initDrellYanBase; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DrellYanBase & operator=(const DrellYanBase &); private: /** * Mass squared of the vector boson */ Energy2 mb2_; /** * Parameters for the old-style ME correction */ //@{ /** * Relative weight for the \f$q\bar{q}\f$ and \f$q/\bar{q}g\f$ channels */ double _channelwgtA; /** * Relative weight for the \f$qg\f$ and \f$\bar{q}g\f$ channels */ double _channelwgtB; /** * Weights for the channels as a vector */ vector<double> _channelweights; /** * Number of weights greater than 1 */ unsigned int _nover; /** * Maximum weight */ double _maxwgt; //@} /** * Constants for the sampling. The distribution is assumed to have the * form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ */ //@{ /** * The power, \f$n\f$, for the sampling */ double _power; /** * The prefactor, \f$c\f$ for the \f$q\bar{q}\f$ channel */ double _preqqbar; /** * The prefactor, \f$c\f$ for the \f$qg\f$ channel */ double _preqg; /** * The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel */ double _pregqbar; /** * The prefactors as a vector for easy use */ vector<double> _prefactor; //@} /** * Properties of the incoming particles */ //@{ /** * Pointers to the BeamParticleData objects */ vector<tcBeamPtr> _beams; /** * Pointers to the ParticleDataObjects for the partons */ vector<tcPDPtr> _partons; //@} /** * Properties of the boson and jets */ //@{ /** * The rapidity of the gauge boson */ double _yb; /** * The mass of the gauge boson */ Energy _mass; /** * Whether the quark is in the + or - z direction */ bool _quarkplus; /** * the rapidity of the jet */ double _yj; /** * The transverse momentum of the jet */ Energy _pt; //@} /** * The transverse momentum of the jet */ Energy _min_pt; /** * Pointer to the object calculating the strong coupling */ ShowerAlphaPtr _alpha; }; } #endif /* HERWIG_DrellYanBase_H */ diff --git a/MatrixElement/Gamma/MEGammaGamma2WW.h b/MatrixElement/Gamma/MEGammaGamma2WW.h --- a/MatrixElement/Gamma/MEGammaGamma2WW.h +++ b/MatrixElement/Gamma/MEGammaGamma2WW.h @@ -1,203 +1,197 @@ // -*- C++ -*- #ifndef HERWIG_MEGammaGamma2WW_H #define HERWIG_MEGammaGamma2WW_H // // This is the declaration of the MEGammaGamma2WW class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.fh" #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.fh" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEGammaGamma2WW class provides the matrix elements for * \f$\gamma\gamma\to f \bar{f}\f$. * * @see \ref MEGammaGamma2WWInterfaces "The interfaces" * defined for MEGammaGamma2WW. */ class MEGammaGamma2WW : public HwMEBase { public: /** * The default constructor. */ MEGammaGamma2WW(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$ * @param p1 The wavefunctions for the first incoming photon * @param p2 The wavefunctions for the second incoming photon * @param w1 The wavefunctions for the first outgoing W * @param w2 The wavefunctions for the second outgoing W * @param calc Whether or not to calculate the matrix element */ double helicityME(vector<VectorWaveFunction> & p1, vector<VectorWaveFunction> & p2, vector<VectorWaveFunction> & w1, vector<VectorWaveFunction> & w2, bool calc) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEGammaGamma2WW> initMEGammaGamma2WW; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEGammaGamma2WW & operator=(const MEGammaGamma2WW &); private: /** * Treatment of the the W mass */ unsigned int massOption_; /** * Pointer to the gammaWW vertex */ AbstractVVVVertexPtr WWWVertex_; /** * Pointer to the gammagammaWW vertex */ AbstractVVVVVertexPtr WWWWVertex_; /** * Matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEGammaGamma2WW_H */ diff --git a/MatrixElement/Gamma/MEGammaGamma2ff.h b/MatrixElement/Gamma/MEGammaGamma2ff.h --- a/MatrixElement/Gamma/MEGammaGamma2ff.h +++ b/MatrixElement/Gamma/MEGammaGamma2ff.h @@ -1,197 +1,191 @@ // -*- C++ -*- #ifndef HERWIG_MEGammaGamma2ff_H #define HERWIG_MEGammaGamma2ff_H // // This is the declaration of the MEGammaGamma2ff class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" namespace Herwig { using namespace ThePEG; /** * The MEGammaGamma2ff class provides the matrix elements for * \f$\gamma\gamma\to f \bar{f}\f$. * * @see \ref MEGammaGamma2ffInterfaces "The interfaces" * defined for MEGammaGamma2ff. */ class MEGammaGamma2ff: public HwMEBase { public: /** * The default constructor. */ MEGammaGamma2ff(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$ * @param p1 The wavefunctions for the first incoming photon * @param p2 The wavefunctions for the second incoming photon * @param f The wavefunction for the outgoing fermion * @param fbar The wavefunction for the outgoing antifermion * @param calc Whether or not to calculate the matrix element */ double helicityME(vector<VectorWaveFunction> &p1,vector<VectorWaveFunction> &p2, vector<SpinorBarWaveFunction> & f, vector<SpinorWaveFunction> & fbar, bool calc) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEGammaGamma2ff> initMEGammaGamma2ff; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEGammaGamma2ff & operator=(const MEGammaGamma2ff &); private: /** * Which processes to include */ int process_; /** * Pointer to the photon vertex */ AbstractFFVVertexPtr vertex_; /** * Matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEGammaGamma2ff_H */ diff --git a/MatrixElement/Gamma/MEGammaP2Jets.h b/MatrixElement/Gamma/MEGammaP2Jets.h --- a/MatrixElement/Gamma/MEGammaP2Jets.h +++ b/MatrixElement/Gamma/MEGammaP2Jets.h @@ -1,243 +1,237 @@ // -*- C++ -*- #ifndef HERWIG_MEGammaP2Jets_H #define HERWIG_MEGammaP2Jets_H // // This is the declaration of the MEGammaP2Jets class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; /** * The MEGammaP2Jets class implements the matrix elements for * pointlike gamma+hadron -> jets. * * @see \ref MEGammaP2JetsInterfaces "The interfaces" * defined for MEGammaP2Jets. */ class MEGammaP2Jets: public HwMEBase { public: /** * The default constructor. */ MEGammaP2Jets(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; //@} protected: /** * Members to calculate the matrix elements */ //@{ /** * Matrix element for \f$\gamma g\to q \bar{q}\f$. * @param gmin Polarization vectors for the incoming photon * @param glin Polarization vectors for the incoming gluon * @param fout Spinors for the outgoing quark * @param aout Spinors for the outgoing antiquark * @param calc Whether or not to calculate the matrix element for spin correlations */ double gammagluonME(vector<VectorWaveFunction> & gmin, vector<VectorWaveFunction> & glin, vector<SpinorBarWaveFunction> & fout, vector<SpinorWaveFunction> & aout, bool calc) const; /** * Matrix element for \f$\gamma q\to g q\f$. * @param gmin Polarization vectors for the incoming photon * @param fin Spinors for the incoming quark * @param gout Polarization vectors for the outgong gluon * @param fout Spinors for the outgoing quark * @param calc Whether or not to calculate the matrix element for spin correlations */ double gammaquarkME(vector<VectorWaveFunction> & gmin, vector<SpinorWaveFunction> & fin, vector<VectorWaveFunction> & gout, vector<SpinorBarWaveFunction> & fout, bool calc) const; /** * Matrix element for \f$\gamma q\to g q\f$. * @param gmin Polarization vectors for the incoming photon * @param fin Spinors for the incoming antiquark * @param gout Polarization vectors for the outgong gluon * @param fout Spinors for the outgoing antiquark * @param calc Whether or not to calculate the matrix element for spin correlations */ double gammaantiquarkME(vector<VectorWaveFunction> & gmin, vector<SpinorBarWaveFunction> & fin, vector<VectorWaveFunction> & gout, vector<SpinorWaveFunction> & fout, bool calc) 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEGammaP2Jets> initMEGammaP2Jets; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEGammaP2Jets & operator=(const MEGammaP2Jets &); private: /** * Pointer to the quark-antiquark-gluon vertex */ AbstractFFVVertexPtr _gluonvertex; /** * Pointer to the quark-antiquark-photon vertex */ AbstractFFVVertexPtr _photonvertex; /** * Allowed processes */ unsigned int _process; /** * Minimum flavour */ int _minflavour; /** * Maximum flavour */ int _maxflavour; /** * Matrix element for spin correlations */ ProductionMatrixElement _me; }; } #endif /* HERWIG_MEGammaP2Jets_H */ diff --git a/MatrixElement/General/GeneralHardME.h b/MatrixElement/General/GeneralHardME.h --- a/MatrixElement/General/GeneralHardME.h +++ b/MatrixElement/General/GeneralHardME.h @@ -1,495 +1,489 @@ // -*- C++ -*- // // GeneralHardME.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_GeneralHardME_H #define HERWIG_GeneralHardME_H // // This is the declaration of the GeneralHardME class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "Herwig/Models/General/HPDiagram.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "Herwig/MatrixElement/HardVertex.h" #include "ThePEG/EventRecord/SpinInfo.h" #include "ThePEG/PDF/PolarizedBeamParticleData.h" #include "GeneralHardME.fh" namespace Herwig { using namespace ThePEG; using Helicity::VertexBasePtr; /** * This defines the GeneralHardME class that is designed to serve as a * base class for matrix elements of specific spin structures when those * structures are created by a a general model, i.e. a SUSY production * ME. It stores a vector of diagram structures that contain the required * to calculate the matrix element. * * @see HwMEBase */ class GeneralHardME: public HwMEBase { public: /** * Convenient typedef for size_type of HPDiagram vector */ typedef vector<HPDiagram>::size_type HPCount; /** * Enum for the possible colour structures */ enum ColourStructure {UNDEFINED, Colour11to11,Colour11to33bar,Colour11to88, Colour33to33,Colour33barto11,Colour33barto33bar, Colour33barto66bar, Colour33barto6bar6, Colour33to61, Colour3bar3barto6bar1, Colour33to16, Colour3bar3barto16bar, Colour38to3bar6, Colour38to63bar, Colour33barto18,Colour33barto81,Colour33barto88, Colour38to13,Colour38to31, Colour38to83,Colour38to38, Colour3bar3barto3bar3bar, Colour3bar8to13bar,Colour3bar8to3bar1, Colour3bar8to83bar,Colour3bar8to3bar8, Colour88to11,Colour88to33bar, Colour88to66bar,Colour88to88, Colour88to18,Colour88to81}; public: /** * The default constructor. */ GeneralHardME(); public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const = 0; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const { if(scaleChoice_==0) { return scaleFactor_*sHat(); } else if(scaleChoice_==1) { Energy2 mbar = 0.5*(meMomenta()[2].mass2()+meMomenta()[3].mass2()); Energy2 t = 0.5*(tHat()-mbar); Energy2 u = 0.5*(uHat()-mbar); Energy2 s = 0.5*sHat(); return scaleFactor_*4.*s*t*u/(s*s+t*t+u*u); } else if(scaleChoice_ ==2) { Energy2 scale1 = meMomenta()[2].mass2()+meMomenta()[2].perp2(); Energy2 scale2 = meMomenta()[3].mass2()+meMomenta()[3].perp2(); return scaleFactor_*max(scale1,scale2); } else assert(false); } /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; //@} /** * Set the diagrams and matrix of colour factors. * @param process vector of MEDiagram with information that * will allow the diagrams to be created in the specific matrix element * @param colour The colour structure for the process * @param debug Whether to compare the numerical answer to an analytical * formula (This is only stored for certain processes. It is intended * for quick checks of the matrix elements). * @param scaleOption The option of what scale to use * @param scaleFactor The prefactor for the scale */ void setProcessInfo(const vector<HPDiagram> & process, ColourStructure colour, bool debug, unsigned int scaleOption, double scaleFactor); 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 Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} protected: /** * A debugging function to test the value of me2 against an * analytic function. This is to be overidden in an inheriting class. */ virtual void debug(double ) const {} protected: /** * Access the HPDiagrams that store the required information * to create the diagrams */ const vector<HPDiagram> & getProcessInfo() const { return diagrams_; } /** * Return the incoming pair * @return Pair of particle ids for the incoming particles */ pair<long, long> getIncoming() const { return incoming_; } /** * Return the outgoing pair * @return Pair of particle ids for the outgoing particles */ pair<long, long> getOutgoing() const { return outgoing_; } /** * Return the matrix of colour factors */ const vector<DVector> & getColourFactors() const { return colour_; } /** * Get the number of diagrams in this process */ HPCount numberOfDiags() const { return numberOfDiagrams_; } /** * Access number of colour flows */ size_t numberOfFlows() const { return numberOfFlows_; } /** * Whether to print the debug information */ bool debugME() const { return debug_; } /** * Set/Get Info on the selected diagram and colour flow */ //@{ /** * Colour flow */ unsigned int colourFlow() const {return flow_;} /** * Colour flow */ void colourFlow(unsigned int flow) const {flow_=flow;} /** * Diagram */ unsigned int diagram() const {return diagram_;} /** * Diagram */ void diagram(unsigned int diag) const {diagram_=diag;} //@} /** * Calculate weight and select colour flow */ double selectColourFlow(vector<double> & flow, vector<double> & me,double average) const; /** * Access to the colour flow matrix element */ vector<ProductionMatrixElement> & flowME() const { return flowME_; } /** * Access to the diagram matrix element */ vector<ProductionMatrixElement> & diagramME() const { return diagramME_; } /** * Access to the colour structure */ ColourStructure colour() const {return colourStructure_;} /** * Extract the paricles from the subprocess */ ParticleVector hardParticles(tSubProPtr subp) { ParticleVector output(4); output[0] = subp->incoming().first; output[1] = subp->incoming().second; output[2] = subp->outgoing()[0]; output[3] = subp->outgoing()[1]; //ensure particle ordering is the same as it was when //the diagrams were created if( output[0]->id() != getIncoming().first ) swap(output[0], output[1]); if( output[2]->id() != getOutgoing().first ) swap(output[2], output[3]); // return answer return output; } /** * Set the rescaled momenta */ void setRescaledMomenta(const ParticleVector & external) { cPDVector data(4); vector<Lorentz5Momentum> momenta(4); for( size_t i = 0; i < 4; ++i ) { data[i] = external[i]->dataPtr(); momenta[i] = external[i]->momentum(); } rescaleMomenta(momenta, data); } /** * Create the vertes */ void createVertex(ProductionMatrixElement & me, ParticleVector & external) { HardVertexPtr hardvertex = new_ptr(HardVertex()); hardvertex->ME(me); for(ParticleVector::size_type i = 0; i < 4; ++i) { tSpinPtr spin = external[i]->spinInfo(); if(i<2) { tcPolarizedBeamPDPtr beam = dynamic_ptr_cast<tcPolarizedBeamPDPtr>(external[i]->dataPtr()); if(beam) spin->rhoMatrix() = beam->rhoMatrix(); } spin->productionVertex(hardvertex); } } /** * Initialize the storage of the helicity matrix elements */ void initializeMatrixElements(PDT::Spin in1, PDT::Spin in2, PDT::Spin out1, PDT::Spin out2) { flowME().resize(numberOfFlows(), ProductionMatrixElement(in1,in2,out1,out2)); diagramME().resize(numberOfDiags(), ProductionMatrixElement(in1,in2,out1,out2)); } private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<GeneralHardME> initGeneralHardME; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GeneralHardME & operator=(const GeneralHardME &); private: /** * External particles */ //@{ /** * Store incoming particles */ pair<long, long> incoming_; /** * Store the outgoing particles */ pair<long, long> outgoing_; //@} /** * Diagrams */ //@{ /** * Store all diagrams as a vector of structures */ vector<HPDiagram> diagrams_; /** * Store the number of diagrams for fast retrieval */ HPCount numberOfDiagrams_; //@} /** * Colour information */ //@{ /** * The colour structure */ ColourStructure colourStructure_; /** * Store colour factors for ME calc. */ vector<DVector> colour_; /** * The number of colourflows. */ unsigned int numberOfFlows_; //@} /** * Whether to test the value of me2 against the analytical function */ bool debug_; /** * The scale chocie */ unsigned int scaleChoice_; /** * The scale factor */ double scaleFactor_; /** * Info on the selected diagram and colour flow */ //@{ /** * Colour flow */ mutable unsigned int flow_; /** * Diagram */ mutable unsigned int diagram_; //@} /** * Storage of the matrix elements */ //@{ /** * Matrix elements for the different colour flows */ mutable vector<ProductionMatrixElement> flowME_; /** * Matrix elements for the different Feynman diagrams */ mutable vector<ProductionMatrixElement> diagramME_; //@} }; /** Exception class to indicate a problem has occurred with setting up to matrix element.*/ class MEException : public Exception {}; } #endif /* HERWIG_GeneralHardME_H */ diff --git a/MatrixElement/General/GeneralQQHiggs.h b/MatrixElement/General/GeneralQQHiggs.h --- a/MatrixElement/General/GeneralQQHiggs.h +++ b/MatrixElement/General/GeneralQQHiggs.h @@ -1,369 +1,363 @@ // -*- C++ -*- #ifndef HERWIG_GeneralQQHiggs_H #define HERWIG_GeneralQQHiggs_H // // This is the declaration of the GeneralQQHiggs class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/PDT/GenericMassGenerator.h" #include "GeneralQQHiggs.fh" namespace Herwig { using namespace ThePEG; /** * The GeneralQQHiggs class implements the matrix elements for * \f$gg\to Q \bar Q h^0\f$ and \f$q\bar q\to Q \bar Q h^0\f$. * * @see \ref GeneralQQHiggsInterfaces "The interfaces" * defined for GeneralQQHiggs. */ class GeneralQQHiggs: public HwMEBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ GeneralQQHiggs(); //@} /** * Initialisation if used in a general model */ /** * Set up the matrix element */ void setProcessInfo(unsigned int quark, PDPtr higgs, AbstractFFSVertexPtr vertex, unsigned int shapeOpt, unsigned int proc); public: /** @name Virtual functions required by the HwMEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} protected: /** * Members to calculate the matrix elements */ //@{ /** * Matrix element for \f$gg\to Q\bar{Q}h^0\f$ * @param g1 The wavefunctions for the first incoming gluon * @param g2 The wavefunctions for the second incoming gluon * @param q The wavefunction for the outgoing quark * @param qbar The wavefunction for the outgoing antiquark * @param h The wavefunction for the outgoing Higgs boson * @param flow The colour flow */ double ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar, ScalarWaveFunction & h, unsigned int flow) const; /** * Matrix element for \f$q\bar{q}\to Q\bar{Q}h^0\f$ * @param q1 The wavefunction for the incoming quark * @param q2 The wavefunction for the incoming antiquark * @param q3 The wavefunction for the outgoing quark * @param q4 The wavefunction for the outgoing antiquark * @param h The wavefunction for the outgoing Higgs boson * @param flow The colour flow */ double qqME(vector<SpinorWaveFunction> & q1, vector<SpinorBarWaveFunction> & q2, vector<SpinorBarWaveFunction> & q3, vector<SpinorWaveFunction> & q4, ScalarWaveFunction & h, unsigned int flow) 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<GeneralQQHiggs> initGeneralQQHiggs; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GeneralQQHiggs & operator=(const GeneralQQHiggs &); private: /** * Switches to control the subprocess */ //@{ /** * Quark Flavour */ unsigned int quarkFlavour_; /** * Processes to include */ unsigned int process_; //@} /** * Switches etc for the Higgs mass generation */ //@{ /** * Defines the Higgs resonance shape */ unsigned int shapeOpt_; /** * On-shell mass for the higgs */ Energy mh_; /** * On-shell width for the higgs */ Energy wh_; /** * The mass generator for the Higgs */ GenericMassGeneratorPtr hmass_; //@} /** * Vertices needed to compute the diagrams */ //@{ /** * \f$ggg\f$ vertex */ AbstractVVVVertexPtr GGGVertex_; /** * \f$q\bar{q}g\f$ vertex */ AbstractFFVVertexPtr QQGVertex_; /** * \f$q\bar q h^0\f$ vertex */ AbstractFFSVertexPtr QQHVertex_; //@} /** * ParticleData objects of the particles */ //@{ /** * The gluon */ PDPtr gluon_; /** * The Higgs boson */ PDPtr higgs_; /** * the quarks */ vector<PDPtr> quark_; /** * the antiquarks */ vector<PDPtr> antiquark_; //@} /** * Parameters for the phase-space generation */ //@{ /** * Power for the phase-space mapping */ double alpha_; //@} /** * Colour flow */ mutable unsigned int flow_; /** * Diagram */ mutable unsigned int diagram_; /** * Matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_GeneralQQHiggs_H */ diff --git a/MatrixElement/General/GeneralfftoVH.h b/MatrixElement/General/GeneralfftoVH.h --- a/MatrixElement/General/GeneralfftoVH.h +++ b/MatrixElement/General/GeneralfftoVH.h @@ -1,120 +1,114 @@ // -*- C++ -*- #ifndef HERWIG_GeneralfftoVH_H #define HERWIG_GeneralfftoVH_H // // This is the declaration of the GeneralfftoVH class. // #include "Herwig/MatrixElement/MEfftoVH.h" #include "GeneralfftoVH.fh" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the GeneralfftoVH class. * * @see \ref GeneralfftoVHInterfaces "The interfaces" * defined for GeneralfftoVH. */ class GeneralfftoVH: public MEfftoVH { public: /** * Type of process */ enum Process {Lepton,HadronWplus,HadronWminus,HadronZ}; public: /** * The default constructor. */ GeneralfftoVH(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; //@} /** * Set up the matrix element */ void setProcessInfo(Process proc, PDPtr higgs, AbstractVVSVertexPtr vertex, unsigned int shapeOpt); 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<GeneralfftoVH> initGeneralfftoVH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GeneralfftoVH & operator=(const GeneralfftoVH &); private: /** * The vector boson */ Process process_; }; } #endif /* HERWIG_GeneralfftoVH_H */ diff --git a/MatrixElement/General/GeneralfftoffH.h b/MatrixElement/General/GeneralfftoffH.h --- a/MatrixElement/General/GeneralfftoffH.h +++ b/MatrixElement/General/GeneralfftoffH.h @@ -1,121 +1,115 @@ // -*- C++ -*- #ifndef HERWIG_GeneralfftoffH_H #define HERWIG_GeneralfftoffH_H // // This is the declaration of the GeneralfftoffH class. // #include "Herwig/MatrixElement/MEfftoffH.h" #include "GeneralfftoffH.fh" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the GeneralfftoffH class. * * @see \ref GeneralfftoffHInterfaces "The interfaces" * defined for GeneralfftoffH. */ class GeneralfftoffH: public MEfftoffH { public: /** * Type of process */ enum Process {Lepton,Hadron}; public: /** * The default constructor. */ GeneralfftoffH(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; //@} /** * Set up the matrix element */ void setProcessInfo(Process proc, PDPtr higgs, AbstractVVSVertexPtr vertex, unsigned int shapeOpt, unsigned int process); 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<GeneralfftoffH> initGeneralfftoffH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GeneralfftoffH & operator=(const GeneralfftoffH &); private: /** * The type of process */ Process _proc; }; } #endif /* HERWIG_GeneralfftoffH_H */ diff --git a/MatrixElement/General/MEff2ff.h b/MatrixElement/General/MEff2ff.h --- a/MatrixElement/General/MEff2ff.h +++ b/MatrixElement/General/MEff2ff.h @@ -1,230 +1,224 @@ // -*- C++ -*- // // MEff2ff.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_MEff2ff_H #define HERWIG_MEff2ff_H // // This is the declaration of the MEff2ff class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" namespace Herwig { using namespace ThePEG; using Helicity::SpinorWaveFunction; using Helicity::SpinorBarWaveFunction; /** * This is the implementation of the \f$ 2\to 2\f$ matrix element for * a \f$ \Psi \Psi \to \Psi \Psi\f$ process. It inherits from * GeneralHardME and implements the appropriate virtual functions. * * @see \ref MEff2ffInterfaces "The Interfaces" * defined for MEff2ff. * @see GeneralHardME */ class MEff2ff: public GeneralHardME { public: /** Vector of SpinorWaveFunctions. */ typedef vector<SpinorWaveFunction> SpinorVector; /** Vector of SpinorBarWaveFunctions. */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; public: /** * The default constructor. */ MEff2ff() : scalar_(0), vector_(0), tensor_(0), spin_(4), sbar_(4) {} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} private: /** @name Functions to compute the ProductionMatrixElement. */ //@{ /** * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$ * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement ffb2ffbHeME(double & me2, bool first) const; /** * Compute the matrix element for \f$\Psi\Psi\to\Psi\Psi\f$ * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement ff2ffHeME(double & me2, bool first) const; /** * Compute the matrix element for * \f$\bar{\Psi}\bar{\Psi}\to\bar{\Psi}\bar{\Psi}\f$ * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement fbfb2fbfbHeME(double & me2, bool first) const; /** * Compute the matrix element for \f$\Psi\bar{\Psi}\to\lambda\lambda\f$ * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement ffb2mfmfHeME(double & me2, bool first) const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEff2ff> initMEff2ff; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEff2ff & operator=(const MEff2ff &); private: /** * Store the vector of FFSVertex pairs */ vector<pair<AbstractFFSVertexPtr, AbstractFFSVertexPtr> > scalar_; /** * Store the vector of FFVVertex pairs */ vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > vector_; /** * Store the vector of FFTVertex pairs */ vector<pair<AbstractFFTVertexPtr, AbstractFFTVertexPtr> > tensor_; /** * Spinors */ mutable vector<vector<SpinorWaveFunction> > spin_; /** * Barred spinors */ mutable vector<vector<SpinorBarWaveFunction> > sbar_; }; } #endif /* HERWIG_MEff2ff_H */ diff --git a/MatrixElement/General/MEff2ss.h b/MatrixElement/General/MEff2ss.h --- a/MatrixElement/General/MEff2ss.h +++ b/MatrixElement/General/MEff2ss.h @@ -1,201 +1,195 @@ // -*- C++ -*- // // MEff2ss.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_MEff2ss_H #define HERWIG_MEff2ss_H // // This is the declaration of the MEff2ss class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::SpinorWaveFunction; using ThePEG::Helicity::SpinorBarWaveFunction; using ThePEG::Helicity::ScalarWaveFunction; /** * The MEff2ss class is designed to implement the matrix element for a * fermion-antifermion to scalar-scalar hard process. It inherits from * GeneralHardME and implements the appropriate virtual functions for this * specific spin combination. * * @see \ref MEff2ssInterfaces "The interfaces" * defined for MEff2ss. * @see GeneralHardME */ class MEff2ss: public GeneralHardME { public: /** Vector of SpinorWaveFunctions objects */ typedef vector<SpinorWaveFunction> SpinorVector; /** Vector of SpinorBarWaveFunction objects. */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; public: /** * The default constructor. */ MEff2ss() : fermion_(0), vector_(0), tensor_(0) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEff2ss> initMEff2ss; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEff2ss & operator=(const MEff2ss &); private: /** * Calculate the matrix element * @param sp A vector of SpinorWaveFunction objects * @param sbar A vector of SpinorBarWaveFunction objects * @param sca1 A ScalarWaveFunction for an outgoing scalar * @param sca2 A ScalarWaveFunction for the other outgoing scalar * @param me2 The spin averaged matrix element * @param first Whether or not first call to decide if colour decomposition etc * should be calculated */ ProductionMatrixElement ff2ssME(const SpinorVector & sp, const SpinorBarVector & sbar, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, double & me2, bool first) const; private: /** * Storage for dynamically cast vertices for a diagram with intermediate * fermion */ vector<pair<AbstractFFSVertexPtr, AbstractFFSVertexPtr> > fermion_; /** * Storage for dynamically cast vertices for a diagram with intermediate * vector */ vector<pair<AbstractFFSVertexPtr, AbstractSSSVertexPtr> > scalar_; /** * Storage for dynamically cast vertices for a diagram with intermediate * vector */ vector<pair<AbstractFFVVertexPtr, AbstractVSSVertexPtr> > vector_; /** * Storage for dynamically cast vertices for a diagram with intermediate * tensor */ vector<pair<AbstractFFTVertexPtr, AbstractSSTVertexPtr> > tensor_; }; } #endif /* HERWIG_MEff2ss_H */ diff --git a/MatrixElement/General/MEff2sv.h b/MatrixElement/General/MEff2sv.h --- a/MatrixElement/General/MEff2sv.h +++ b/MatrixElement/General/MEff2sv.h @@ -1,205 +1,199 @@ // -*- C++ -*- // // MEff2sv.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_MEff2sv_H #define HERWIG_MEff2sv_H // // This is the declaration of the MEff2sv class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using Helicity::SpinorWaveFunction; using Helicity::SpinorBarWaveFunction; using Helicity::VectorWaveFunction; using Helicity::ScalarWaveFunction; /** * The MEff2sv class is designed to implement the matrix element for a * fermion-antifermion to vector-scalar hard process. It inherits from * GeneralHardME and implements the appropriate virtual functions for this * specific spin combination. * * @see \ref MEff2svInterfaces "The interfaces" * defined for MEff2sv. * @see GeneralHardME */ class MEff2sv: public GeneralHardME { public: /** @name Typedefs */ //@{ /** * A vector of SpinorWaveFunctions */ typedef vector<SpinorWaveFunction> SpinorVector; /** * A vector of SpinorWaveBarFunctions */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; /** * A vector of VectorWaveFunctions */ typedef vector<VectorWaveFunction> VBVector; //@} public: /** * The default constructor. */ MEff2sv() : scalar_(0), vector_(0), fermion_(0) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEff2sv> initMEff2sv; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEff2sv & operator=(const MEff2sv &); private: /** @name Functions to compute the ProductionMatrixElement. */ //@{ /** * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$ * @param sp Spinors for first incoming particle * @param spbar SpinorBar Wavefunctions for second incoming particle * @param vec VectorWaveFunctions for outgoing vector * @param sca Outgoing ScalarWaveFunction * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement ffb2svHeME(SpinorVector & sp, SpinorBarVector & spbar, ScalarWaveFunction & sca, VBVector & vec, double & me2,bool first) const; //@} private: /** * Storage for dynamically cast vertices for a diagram with intermediate * scalar */ vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_; /** * Storage for dynamically cast vertices for a diagram with intermediate * vector */ vector<pair<AbstractFFVVertexPtr, AbstractVVSVertexPtr> > vector_; /** * Storage for dynamically cast vertices for a diagram with intermediate * fermion */ vector<pair<AbstractFFSVertexPtr, AbstractFFVVertexPtr> > fermion_; }; } #endif /* HERWIG_MEff2sv_H */ diff --git a/MatrixElement/General/MEff2tv.h b/MatrixElement/General/MEff2tv.h --- a/MatrixElement/General/MEff2tv.h +++ b/MatrixElement/General/MEff2tv.h @@ -1,200 +1,194 @@ // -*- C++ -*- #ifndef HERWIG_MEff2tv_H #define HERWIG_MEff2tv_H // // This is the declaration of the MEff2tv class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h" namespace Herwig { using namespace ThePEG; using Helicity::SpinorWaveFunction; using Helicity::SpinorBarWaveFunction; using Helicity::VectorWaveFunction; using Helicity::TensorWaveFunction; /** * Here is the documentation of the MEff2tv class. * * @see \ref MEff2tvInterfaces "The interfaces" * defined for MEff2tv. */ class MEff2tv: public GeneralHardME { public: /** @name Typedefs */ //@{ /** * A vector of SpinorWaveFunctions */ typedef vector<SpinorWaveFunction> SpinorVector; /** * A vector of SpinorWaveBarFunctions */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; /** * A vector of VectorWaveFunctions */ typedef vector<VectorWaveFunction> VBVector; /** * A vector of VectorWaveFunctions */ typedef vector<TensorWaveFunction> TBVector; //@} public: /** * The default constructor. */ MEff2tv() : fermion_(0), vector_(0), fourPoint_(0) {} /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); 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; /** 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; //@} 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. */ void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEff2tv> initMEff2tv; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEff2tv & operator=(const MEff2tv &); private: /** @name Functions to compute the ProductionMatrixElement. */ //@{ /** * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$ * @param sp Spinors for first incoming particle * @param spbar SpinorBar Wavefunctions for second incoming particle * @param vec VectorWaveFunctions for outgoing vector * @param ten Outgoing TensorWaveFunction * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement ffb2tvHeME(SpinorVector & sp, SpinorBarVector & spbar, TBVector & ten, VBVector & vec, double & me2,bool first) const; //@} /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) const; private: /** * Store a pair of FFTVertex and FFVVertex pointers */ vector<pair<AbstractFFTVertexPtr, AbstractFFVVertexPtr> > fermion_; /** * Store a pair of FFTVertex and VVTVertex pointers */ vector<pair<AbstractFFVVertexPtr, AbstractVVTVertexPtr> > vector_; /** * The four point vertex */ vector<AbstractFFVTVertexPtr> fourPoint_; }; } #endif /* HERWIG_MEff2tv_H */ diff --git a/MatrixElement/General/MEff2vs.h b/MatrixElement/General/MEff2vs.h --- a/MatrixElement/General/MEff2vs.h +++ b/MatrixElement/General/MEff2vs.h @@ -1,205 +1,199 @@ // -*- C++ -*- // // MEff2vs.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_MEff2vs_H #define HERWIG_MEff2vs_H // // This is the declaration of the MEff2vs class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using Helicity::SpinorWaveFunction; using Helicity::SpinorBarWaveFunction; using Helicity::VectorWaveFunction; using Helicity::ScalarWaveFunction; /** * The MEff2vs class is designed to implement the matrix element for a * fermion-antifermion to vector-scalar hard process. It inherits from * GeneralHardME and implements the appropriate virtual functions for this * specific spin combination. * * @see \ref MEff2vsInterfaces "The interfaces" * defined for MEff2vs. * @see GeneralHardME */ class MEff2vs: public GeneralHardME { public: /** @name Typedefs */ //@{ /** * A vector of SpinorWaveFunctions */ typedef vector<SpinorWaveFunction> SpinorVector; /** * A vector of SpinorWaveBarFunctions */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; /** * A vector of VectorWaveFunctions */ typedef vector<VectorWaveFunction> VBVector; //@} public: /** * The default constructor. */ MEff2vs() : scalar_(0), vector_(0), fermion_(0) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEff2vs> initMEff2vs; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEff2vs & operator=(const MEff2vs &); private: /** @name Functions to compute the ProductionMatrixElement. */ //@{ /** * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$ * @param sp Spinors for first incoming particle * @param spbar SpinorBar Wavefunctions for second incoming particle * @param vec VectorWaveFunctions for outgoing vector * @param sca Outgoing ScalarWaveFunction * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement ffb2vsHeME(SpinorVector & sp, SpinorBarVector & spbar, VBVector & vec, ScalarWaveFunction & sca, double & me2,bool first) const; //@} private: /** * Storage for dynamically cast vertices for a diagram with intermediate * scalar */ vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_; /** * Storage for dynamically cast vertices for a diagram with intermediate * vector */ vector<pair<AbstractFFVVertexPtr, AbstractVVSVertexPtr> > vector_; /** * Storage for dynamically cast vertices for a diagram with intermediate * fermion */ vector<pair<AbstractFFVVertexPtr, AbstractFFSVertexPtr> > fermion_; }; } #endif /* HERWIG_MEff2vs_H */ diff --git a/MatrixElement/General/MEff2vv.h b/MatrixElement/General/MEff2vv.h --- a/MatrixElement/General/MEff2vv.h +++ b/MatrixElement/General/MEff2vv.h @@ -1,204 +1,198 @@ // -*- C++ -*- // // MEff2vv.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_MEff2vv_H #define HERWIG_MEff2vv_H // // This is the declaration of the MEff2vv class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::SpinorWaveFunction; using ThePEG::Helicity::SpinorBarWaveFunction; using ThePEG::Helicity::VectorWaveFunction; /** * This class implements the matrix element calculation for a generic * \f$\Psi \Psi \rightarrow V^{\mu} V^{\nu}\f$ process. * * @see \ref MEff2vvInterfaces "The interfaces" * defined for MEff2vv. */ class MEff2vv: public GeneralHardME { public: /** Vector of SpinorWaveFunctions objects */ typedef vector<SpinorWaveFunction> SpinorVector; /** Vector of SpinorBarWaveFunction objects. */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; /** Vector of VectorWaveFunction objects. */ typedef vector<VectorWaveFunction> VBVector; public: /** * The default constructor. */ MEff2vv() : vector_(0), tensor_(0), scalar_(0) {} /** @name Virtual functions required by the GeneralHardME class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) const; private: /** * Compute the production matrix element. * @param sp Spinors for first incoming fermion * @param sbar SpinorBar Wavefunctions for incoming anti-fermion * @param v1 A vector of VectorWaveFunction objects for the first vector * @param m1 Whether v1 is massless or not * @param v2 A vector of VectorWaveFunction objects for the second vector * @param m2 Whether v2 is massless or not * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ ProductionMatrixElement ff2vvME(const SpinorVector & sp, const SpinorBarVector sbar, const VBVector & v1, bool m1, const VBVector & v2, bool m2, double & me2, bool first) 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEff2vv> initMEff2vv; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEff2vv & operator=(const MEff2vv &); private: /** * Storage for a dynamically cast vertices for a tchannel vector * intermediate */ vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fermion_; /** * Storage for a dynamically cast vertices for a schannel vector * intermediate */ vector<pair<AbstractFFVVertexPtr, AbstractVVVVertexPtr> > vector_; /** * Storage for a dynamically cast vertices for a schannel scalar * intermediate */ vector<pair<AbstractFFTVertexPtr, AbstractVVTVertexPtr> > tensor_; /** * Storage for a dynamically cast vertices for a schannel scalar * intermediate for massless external vector bosons */ vector<pair<AbstractFFSVertexPtr, AbstractVVSVertexPtr> > scalar_; }; } #endif /* HERWIG_MEff2vv_H */ diff --git a/MatrixElement/General/MEfv2fs.h b/MatrixElement/General/MEfv2fs.h --- a/MatrixElement/General/MEfv2fs.h +++ b/MatrixElement/General/MEfv2fs.h @@ -1,211 +1,205 @@ // -*- C++ -*- // // MEfv2fs.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_MEfv2fs_H #define HERWIG_MEfv2fs_H // // This is the declaration of the MEfv2fs class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::SpinorWaveFunction; using ThePEG::Helicity::SpinorBarWaveFunction; using ThePEG::Helicity::VectorWaveFunction; using ThePEG::Helicity::ScalarWaveFunction; /** * This class is designed to implement the matrix element for * fermion-vector to fermion scalar. It inherits from GeneralHardME * and implements the required virtual functions. * * @see @see \ref MEfv2fsInterfaces "The Interfaces" * defined for MEfv2fs. * @see GeneralHardME */ class MEfv2fs: public GeneralHardME { /** Vector of SpinorWaveFunctions. */ typedef vector<SpinorWaveFunction> SpinorVector; /** Vector of SpinorBarWaveFunctions. */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; /** Vector of VectorWaveFunctions. */ typedef vector<VectorWaveFunction> VecWFVector; public: /** * The default constructor. */ MEfv2fs() : scalar_(0), fermion_(0) {} public: /** @name Virtual functions required by the GeneralHardME class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param subp Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr subp); private: /** @name Functions to calculate production matrix elements and me2. */ //@{ /** * Calculate me2 and the production matrix element for the normal mode. * @param spIn Vector of SpinorWaveFunction for the incoming fermion * @param vecIn Vector of VectorWaveFunction for incoming boson * @param spbOut Vector of SpinorBarWaveFunction for outgoing fermion * @param scaOut ScalarWaveFunction for outgoing scalar. * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param full_me The value of me2 calculation */ ProductionMatrixElement fv2fbsHeME(const SpinorVector & spIn, const VecWFVector & vecIn, const SpinorBarVector & spbOut, const ScalarWaveFunction & scaOut, double & full_me, bool first) const; /** * Calculate me2 and the production matrix element for the cc mode. * @param spbIn Vector of SpinorBarWaveFunction for the incoming fermion * @param vecIn Vector of VectorWaveFunction for incoming boson * @param spOut Vector of SpinorWaveFunction for outgoing fermion * @param scaOut ScalarWaveFunction for outgoing scalar. * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param full_me The value of me2 calculation */ ProductionMatrixElement fbv2fsHeME(const SpinorBarVector & spbIn, const VecWFVector & vecIn, const SpinorVector & spOut, const ScalarWaveFunction & scaOut, double & full_me, bool first) const; //@} protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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 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. */ void doinit(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEfv2fs> initMEfv2fs; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEfv2fs & operator=(const MEfv2fs &); private: /** * Store a pair of FFSVertex and VSSVertex pointers */ vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_; /** * Store a pair of FFSVertex and FFVVertex pointers */ vector<pair<AbstractFFSVertexPtr, AbstractFFVVertexPtr> > fermion_; }; } #endif /* HERWIG_MEfv2fs_H */ diff --git a/MatrixElement/General/MEfv2tf.h b/MatrixElement/General/MEfv2tf.h --- a/MatrixElement/General/MEfv2tf.h +++ b/MatrixElement/General/MEfv2tf.h @@ -1,202 +1,196 @@ // -*- C++ -*- #ifndef HERWIG_MEfv2tf_H #define HERWIG_MEfv2tf_H // // This is the declaration of the MEfv2tf class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::SpinorWaveFunction; using ThePEG::Helicity::SpinorBarWaveFunction; using ThePEG::Helicity::VectorWaveFunction; using ThePEG::Helicity::TensorWaveFunction; /** * Here is the documentation of the MEfv2tf class. * * @see \ref MEfv2tfInterfaces "The interfaces" * defined for MEfv2tf. */ class MEfv2tf: public GeneralHardME { /** Vector of SpinorWaveFunctions. */ typedef vector<SpinorWaveFunction> SpinorVector; /** Vector of SpinorBarWaveFunctions. */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; /** Vector of VectorWaveFunctions. */ typedef vector<VectorWaveFunction> VBVector; /** Vector of TensorWaveFunctions. */ typedef vector<TensorWaveFunction> TBVector; public: /** * The default constructor. */ MEfv2tf() : fermion_(0), vector_(0), fourPoint_(0) {} /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); 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; /** 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; //@} 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. */ void doinit(); //@} private: /** @name Functions to calculate production matrix elements and me2. */ //@{ /** * Calculate me2 and the production matrix element for the normal mode. * @param spIn Vector of SpinorWaveFunction for the incoming fermion * @param vecIn Vector of VectorWaveFunction for incoming boson * @param spbOut Vector of SpinorBarWaveFunction for outgoing fermion * @param tenOut TensorWaveFunction for outgoing tensor. * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param full_me The value of me2 calculation */ ProductionMatrixElement fv2tfHeME(const SpinorVector & spIn, const VBVector & vecIn, const TBVector & tenOut, const SpinorBarVector & spbOut, double & full_me, bool first) const; /** * Calculate me2 and the production matrix element for the cc mode. * @param spbIn Vector of SpinorBarWaveFunction for the incoming fermion * @param vecIn Vector of VectorWaveFunction for incoming boson * @param spOut Vector of SpinorWaveFunction for outgoing fermion * @param tenOut TensorWaveFunction for outgoing tensor. * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param full_me The value of me2 calculation */ ProductionMatrixElement fbv2tfbHeME(const SpinorBarVector & spbIn, const VBVector & vecIn, const TBVector & tenOut, const SpinorVector & spOut, double & full_me, bool first) const; //@} /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEfv2tf> initMEfv2tf; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEfv2tf & operator=(const MEfv2tf &); private: /** * Store a pair of FFTVertex and FFVVertex pointers */ vector<pair<AbstractFFTVertexPtr, AbstractFFVVertexPtr> > fermion_; /** * Store a pair of FFTVertex and VVTVertex pointers */ vector<pair<AbstractFFVVertexPtr, AbstractVVTVertexPtr> > vector_; /** * The four point vertex */ vector<AbstractFFVTVertexPtr> fourPoint_; }; } #endif /* HERWIG_MEfv2tf_H */ diff --git a/MatrixElement/General/MEfv2vf.h b/MatrixElement/General/MEfv2vf.h --- a/MatrixElement/General/MEfv2vf.h +++ b/MatrixElement/General/MEfv2vf.h @@ -1,204 +1,198 @@ // -*- C++ -*- // // MEfv2vf.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_MEfv2vf_H #define HERWIG_MEfv2vf_H // // This is the declaration of the MEfv2vf class. // #include "GeneralHardME.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" namespace Herwig { using namespace ThePEG; /** * This class implements the matrix element for a fermion and a vector * boson to a fermion and a vector boson. It inherits from GeneralHardME * and implements the appropriate virtual functions. * * @see \ref MEfv2vfInterfaces "The interfaces" * defined for MEfv2vf. */ class MEfv2vf: public GeneralHardME { public: /** A vector of SpinorWaveFunctions. */ typedef vector<Helicity::SpinorWaveFunction> SpinorVector; /** A vector of SpinorBarWaveFunctions. */ typedef vector<Helicity::SpinorBarWaveFunction> SpinorBarVector; /** A vector of VectorWaveFunctions. */ typedef vector<Helicity::VectorWaveFunction> VBVector; public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); private: /** @name Functions to calculate the Helicity MatrixElement.*/ //@{ /** * Calculate the matrix element for an incoming fermion * @param spIn A vector of spinors for the incoming fermion * @param vecIn A vector of VectorWaveFunctions for the incoming boson * @param spbOut A vector of SpinorBarWaveFunctions for the outgoing fermion * @param vecOut A vector of VectorWaveFunctions for the outgoing boson * @param mc If the outgoing vector is massless or not * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param mesq The matrix element squared */ ProductionMatrixElement fv2vfHeME(const SpinorVector & spIn, const VBVector & vecIn, const VBVector & vecOut, bool mc, const SpinorBarVector & spbOut, double & mesq, bool first) const; /** * Calculate the matrix element for an incoming anti-fermion * @param spbIn A vector of SpinorBarWaveFunctions for the incoming anti-fermion * @param vecIn A vector of VectorWaveFunctions for the incoming boson * @param spOut A vector of Spinors for the outgoing antifermion * @param vecOut A vector of VectorWaveFunctions for the outgoing boson * @param mc If the outgoing vector is massless or not * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param mesq The matrix element squared */ ProductionMatrixElement fbv2vfbHeME(const SpinorBarVector & spbIn, const VBVector & vecIn, const VBVector & vecOut, bool mc, const SpinorVector & spOut, double & mesq, bool first) const; //@} protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEfv2vf> initMEfv2vf; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEfv2vf & operator=(const MEfv2vf &); private: /** @name Store dynamically casted vertices. */ //@{ /** * A pair off FFVVertex pointers */ vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fermion_; /** * A pair of FFVVertex, VVVertex pointers */ vector<pair<AbstractFFVVertexPtr, AbstractVVVVertexPtr> > vector_; //@} }; } #endif /* HERWIG_MEfv2vf_H */ diff --git a/MatrixElement/General/MEvv2ff.h b/MatrixElement/General/MEvv2ff.h --- a/MatrixElement/General/MEvv2ff.h +++ b/MatrixElement/General/MEvv2ff.h @@ -1,193 +1,187 @@ // -*- C++ -*- // // MEvv2ff.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_MEvv2ff_H #define HERWIG_MEvv2ff_H // // This is the declaration of the MEvv2ff class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::SpinorWaveFunction; using ThePEG::Helicity::SpinorBarWaveFunction; using ThePEG::Helicity::VectorWaveFunction; /** * This class is designed to implement the matrix element for the * \f$2 \rightarrow 2\f$ process vector-vector to fermion-antifermion pair. It * inherits from GeneralHardME and implements the me2() virtual function. * * @see \ref MEvv2ffInterfaces "The Interfaces" * defined for MEvv2ff. * @see GeneralHardME * */ class MEvv2ff: public GeneralHardME { public: /** A Vector of VectorWaveFunction objects. */ typedef vector<VectorWaveFunction> VBVector; /** A vector of SpinorBarWaveFunction objects. */ typedef vector<SpinorWaveFunction> SpinorVector; /** A vector of SpinorBarWaveFunction objects. */ typedef vector<SpinorBarWaveFunction> SpinorBarVector; public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); private: /** * Calculate the value of the matrix element */ ProductionMatrixElement vv2ffME(const VBVector & v1, const VBVector & v2, const SpinorBarVector & sbar, const SpinorVector & sp, double & me2, bool first) const; protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEvv2ff> initMEvv2ff; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEvv2ff & operator=(const MEvv2ff &); private: /** @name Dynamically casted vertices. */ //@{ /** * Intermediate scalar */ vector<pair<AbstractVVSVertexPtr, AbstractFFSVertexPtr > > scalar_; /** * Intermediate fermion */ vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fermion_; /** * Intermediate vector */ vector<pair<AbstractVVVVertexPtr, AbstractFFVVertexPtr> > vector_; /** * Intermediate tensor */ vector<pair<AbstractVVTVertexPtr, AbstractFFTVertexPtr> > tensor_; //@} }; } #endif /* HERWIG_MEvv2ff_H */ diff --git a/MatrixElement/General/MEvv2ss.h b/MatrixElement/General/MEvv2ss.h --- a/MatrixElement/General/MEvv2ss.h +++ b/MatrixElement/General/MEvv2ss.h @@ -1,205 +1,199 @@ // -*- C++ -*- // // MEvv2ss.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_MEvv2ss_H #define HERWIG_MEvv2ss_H // // This is the declaration of the MEvv2ss class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::VectorWaveFunction; using ThePEG::Helicity::ScalarWaveFunction; /** * This is the implementation of the matrix element for the process * vector-vector to scalar-scalar. It inherits from GeneralHardME and * implements the required virtual functions. * * @see \ref MEff2ffInterfaces "The Interfaces" * defined for MEff2ff. * @see GeneralHardME */ class MEvv2ss: public GeneralHardME { public: /** A vector of VectorWaveFunction objects*/ typedef vector<VectorWaveFunction> VBVector; public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Set the Hardvertex for the spin correlations * @param sub */ virtual void constructVertex(tSubProPtr sub); private: /** * Calculate the matrix element. * @param v1 A vector of VectorWaveFunction objects for the first boson * @param v2 A vector of VectorWaveFunction objects for the second boson * @param sca1 A ScalarWaveFunction for the first outgoing * @param sca2 A ScalarWaveFunction for the second outgoing * @param me2 The value of the spin-summed matrix element squared * (to be calculated) * @param first Whether or not first call to decide if colour decomposition etc * should be calculated */ ProductionMatrixElement vv2ssME(const VBVector & v1, const VBVector & v2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, double & me2, bool first) const; protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEvv2ss> initMEvv2ss; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEvv2ss & operator=(const MEvv2ss &); private: /** @name The dynamically casted vertices. */ //@{ /** * Intermediate s-channel scalar */ vector<pair<AbstractVVSVertexPtr, AbstractSSSVertexPtr> > scalar1_; /** * Intermediate t-channel scalar */ vector<pair<AbstractVSSVertexPtr, AbstractVSSVertexPtr> > scalar2_; /** * Intermediate t-channel scalar */ vector<pair<AbstractVVSVertexPtr, AbstractVVSVertexPtr> > scalar3_; /** * Intermediate s-channel vector */ vector<pair<AbstractVVVVertexPtr, AbstractVSSVertexPtr> > vector_; /** * Intermediate s-channel tensor */ vector<pair<AbstractVVTVertexPtr, AbstractSSTVertexPtr> > tensor_; /** * The contact vertex */ AbstractVVSSVertexPtr contact_; //@} }; } #endif /* HERWIG_MEvv2ss_H */ diff --git a/MatrixElement/General/MEvv2tv.h b/MatrixElement/General/MEvv2tv.h --- a/MatrixElement/General/MEvv2tv.h +++ b/MatrixElement/General/MEvv2tv.h @@ -1,169 +1,163 @@ // -*- C++ -*- #ifndef HERWIG_MEvv2tv_H #define HERWIG_MEvv2tv_H // // This is the declaration of the MEvv2tv class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::VectorWaveFunction; using ThePEG::Helicity::TensorWaveFunction; /** * Here is the documentation of the MEvv2tv class. * * @see \ref MEvv2tvInterfaces "The interfaces" * defined for MEvv2tv. */ class MEvv2tv: public GeneralHardME { /** Vector of VectorWaveFunctions. */ typedef vector<VectorWaveFunction> VBVector; /** Vector of TensorWaveFunctions. */ typedef vector<TensorWaveFunction> TBVector; public: /** * The default constructor. */ MEvv2tv() : vector_(0), fourPoint_(0) {} /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); 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; /** 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; //@} 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. */ void doinit(); //@} private: /** @name Functions to calculate production matrix elements and me2. */ //@{ /** * Calculate me2 and the production matrix element for the normal mode. * @param vec1 Vector of VectorWaveFunction for the 1st incoming boson * @param vec2 Vector of VectorWaveFunction for the 2nd incoming boson * @param ten TensorWaveFunction for outgoing tensor. * @param vec3 Vector of VectorWaveFunction for the outgoing boson * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @param full_me The value of me2 calculation */ ProductionMatrixElement vv2tvHeME(const VBVector & vec1, const VBVector & vec2, const TBVector & ten, const VBVector & vec3, double & full_me, bool first) const; /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEvv2tv> initMEvv2tv; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEvv2tv & operator=(const MEvv2tv &); private: /** * Store a pair of FFTVertex and FFVVertex pointers */ vector<pair<AbstractVVVVertexPtr, AbstractVVTVertexPtr> > vector_; /** * The four point vertex */ vector<AbstractVVVTVertexPtr> fourPoint_; }; } #endif /* HERWIG_MEvv2tv_H */ diff --git a/MatrixElement/General/MEvv2vs.h b/MatrixElement/General/MEvv2vs.h --- a/MatrixElement/General/MEvv2vs.h +++ b/MatrixElement/General/MEvv2vs.h @@ -1,169 +1,163 @@ // -*- C++ -*- #ifndef HERWIG_MEvv2vs_H #define HERWIG_MEvv2vs_H // // This is the declaration of the MEvv2vs class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVSVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using Helicity::VectorWaveFunction; using Helicity::ScalarWaveFunction; /** * This is the implementation of the matrix element for * \f$2\to 2\f$ massless vector-boson pair to a vector and scalar boson. * It inherits from GeneralHardME and implements the appropriate virtual * member functions. * * @see \ref MEvv2vsInterfaces "The interfaces" * defined for MEvv2vs. */ class MEvv2vs: public GeneralHardME { public: /** * Typedef for VectorWaveFunction */ typedef vector<VectorWaveFunction> VBVector; public: /** @name Virtual functions required by the GeneralHardME class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); private: /** * Compute the matrix element for \f$V\, V\to V\, V\f$ * @param vin1 VectorWaveFunctions for first incoming particle * @param vin2 VectorWaveFunctions for second incoming particle * @param vout1 VectorWaveFunctions for first outgoing particle * @param mc Whether vout1 is massless or not * @param sout2 ScalarWaveFunction for outgoing particle * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement vv2vsHeME(VBVector & vin1, VBVector & vin2, VBVector & vout1, bool mc, ScalarWaveFunction & sout2, double & me2, bool first ) 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEvv2vs> initMEvv2vs; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEvv2vs & operator=(const MEvv2vs &); private: /** * Store the dynamically casted VVSVertex and VSSVertex pointers */ vector<pair<AbstractVVSVertexPtr, AbstractVSSVertexPtr> > scalar_; /** * Store the dynamically casted VVVVertex and VVSVertex pointers */ vector<pair<AbstractVVVVertexPtr, AbstractVVSVertexPtr> > vector_; /** * Store the dynamically casted VVVSVertex pointer */ AbstractVVVSVertexPtr fourPointVertex_; }; } #endif /* HERWIG_MEvv2vs_H */ diff --git a/MatrixElement/General/MEvv2vv.h b/MatrixElement/General/MEvv2vv.h --- a/MatrixElement/General/MEvv2vv.h +++ b/MatrixElement/General/MEvv2vv.h @@ -1,189 +1,183 @@ // -*- C++ -*- // // MEvv2vv.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_MEvv2vv_H #define HERWIG_MEvv2vv_H // // This is the declaration of the MEvv2vv class. // #include "GeneralHardME.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using Helicity::VectorWaveFunction; /** * This is the implementation of the matrix element for * \f$2\to 2\f$ massless vector-boson pair to vector-boson pair. It inherits from * GeneralHardME and implements the appropriate virtual member functions. * * @see \ref MEvv2vvInterfaces "The interfaces" * defined for MEvv2vv. */ class MEvv2vv: public GeneralHardME { public: /** * Typedef for VectorWaveFunction */ typedef vector<VectorWaveFunction> VBVector; public: /** @name Virtual functions required by the GeneralHardME class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; //@} /** * Construct the vertex information for the spin correlations * @param sub Pointer to the relevent SubProcess */ virtual void constructVertex(tSubProPtr sub); private: /** * Compute the matrix element for \f$V\, V\to V\, V\f$ * @param vin1 VectorWaveFunctions for first incoming particle * @param vin2 VectorWaveFunctions for second incoming particle * @param vout1 VectorWaveFunctions for first outgoing particle * @param mc Whether vout1 is massless or not * @param vout2 VectorWaveFunctions for outgoing particle * @param md Whether vout2 is massless or not * @param me2 colour averaged, spin summed ME * @param first Whether or not first call to decide if colour decomposition etc * should be calculated * @return ProductionMatrixElement containing results of * helicity calculations */ ProductionMatrixElement vv2vvHeME(VBVector & vin1, VBVector & vin2, VBVector & vout1, bool mc, VBVector & vout2, bool md, double & me2, bool first ) const; protected: /** * A debugging function to test the value of me2 against an * analytic function. * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ */ virtual void debug(double me2) 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEvv2vv> initMEvv2vv; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEvv2vv & operator=(const MEvv2vv &); private: /** * Store the dynamically casted VVSVertex pointers */ vector<pair<AbstractVVSVertexPtr, AbstractVVSVertexPtr> > scalar_; /** * Store the dynamically casted VVVVertex pointers */ vector<pair<AbstractVVVVertexPtr, AbstractVVVVertexPtr> > vector_; /** * Store the dynamically casted VVTVertex pointers */ vector<pair<AbstractVVTVertexPtr, AbstractVVTVertexPtr> > tensor_; /** * Store the dynamically casted VVVVVertex pointer */ AbstractVVVVVertexPtr fourPointVertex_; }; } #endif /* HERWIG_MEvv2vv_H */ diff --git a/MatrixElement/Hadron/MEDiffraction.h b/MatrixElement/Hadron/MEDiffraction.h --- a/MatrixElement/Hadron/MEDiffraction.h +++ b/MatrixElement/Hadron/MEDiffraction.h @@ -1,309 +1,303 @@ // -*- C++ -*- #ifndef HERWIG_MEDiffraction_H #define HERWIG_MEDiffraction_H // // This is the declaration of the MEDiffraction class. // #include "Herwig/MatrixElement/HwMEBase.h" namespace Herwig { using namespace ThePEG; /** * The MEDiffraction class provides a simple colour singlet exchange matrix element * to be used in the soft component of the multiple scattering model of the * underlying event * * @see \ref MEDiffractionInterfaces "The interfaces" * defined for MEDiffraction. */ class MEDiffraction: public HwMEBase { public: MEDiffraction(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; //@} /** * Expect the incoming partons in the laboratory frame */ /* virtual bool wantCMS() const { return false; } */ 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 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(); //@} /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} private: /* The matrix element squared */ double theme2; /* Use only delta as excited state */ bool deltaOnly; /* Direction of the excited proton */ unsigned int diffDirection; /* Number of clusters the dissociated proton decays into */ unsigned int dissociationDecay; /* The mass of the consitutent quark */ Energy mq() const {return Energy(0.325*GeV);} /* The mass of the constituent diquark */ Energy mqq() const {return Energy(0.650*GeV);} /* The proton-pomeron slope */ double theprotonPomeronSlope; /* The soft pomeron intercept */ double thesoftPomeronIntercept; /* The soft pomeron slope */ double thesoftPomeronSlope; /** * Sample the diffractive mass squared M2 and the momentum transfer t */ pair<pair<Energy2,Energy2>,Energy2> diffractiveMassAndMomentumTransfer() const; /** * Random value for the diffractive mass squared M2 according to (M2/s0)^(-intercept) */ Energy2 randomM2() const; /** * Random value for t according to exp(diffSlope*t) */ Energy2 randomt(Energy2 M2) const; /** * Random value for t according to exp(diffSlope*t) for double diffraction */ Energy2 doublediffrandomt(Energy2 M12, Energy2 M22) const; /** * Returns the momenta of the two-body decay of momentum pp */ pair<Lorentz5Momentum,Lorentz5Momentum> twoBodyDecayMomenta(Lorentz5Momentum pp) const; /** * Returns the proton-pomeron slope */ InvEnergy2 protonPomeronSlope() const; /** * Returns the soft pomeron intercept */ double softPomeronIntercept() const; //M12 and M22 are masses squared of //outgoing particles /** * Returns the minimal possible value of momentum transfer t given the center * of mass energy and diffractive masses */ Energy2 tminfun(Energy2 s, Energy2 M12, Energy2 M22) const; /** * Returns the maximal possible value of momentum transfer t given the center * of mass energy and diffractive masses */ Energy2 tmaxfun(Energy2 s , Energy2 M12, Energy2 M22) const; /** * Returns the minimal possible value of diffractive mass */ //lowest possible mass given the constituent masses of quark and diquark Energy2 M2min() const{return sqr(getParticleData(2212)->mass()+mq()+mqq());} /** * Returns the maximal possible value of diffractive mass */ Energy2 M2max() const{ return sqr(generator()->maximumCMEnergy()-getParticleData(2212)->mass()); }//TODO:modify to get proper parameters InvEnergy2 softPomeronSlope() const; /* Kallen function */ template<int L, int E, int Q, int DL, int DE, int DQ> Qty<2*L,2*E,2*Q,DL,DE,DQ> kallen(Qty<L,E,Q,DL,DE,DQ> a, Qty<L,E,Q,DL,DE,DQ> b, Qty<L,E,Q,DL,DE,DQ> c) const { return a*a + b*b + c*c - 2.0*(a*b + b*c + c*a); } /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEDiffraction> initMEDiffraction; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEDiffraction & operator=(const MEDiffraction &); bool isInRunPhase; /* The proton mass */ Energy theProtonMass; }; } #endif /* HERWIG_MEDiffraction_H */ diff --git a/MatrixElement/Hadron/MEMinBias.h b/MatrixElement/Hadron/MEMinBias.h --- a/MatrixElement/Hadron/MEMinBias.h +++ b/MatrixElement/Hadron/MEMinBias.h @@ -1,196 +1,190 @@ // -*- C++ -*- #ifndef HERWIG_MEMinBias_H #define HERWIG_MEMinBias_H // // This is the declaration of the MEMinBias class. // #include "Herwig/MatrixElement/HwMEBase.h" namespace Herwig { using namespace ThePEG; /** * The MEMinBias class provides a simple colour singlet exchange matrix element * to be used in the soft component of the multiple scattering model of the * underlying event * * @see \ref MEMinBiasInterfaces "The interfaces" * defined for MEMinBias. */ class MEMinBias: public HwMEBase { public: /** * The default constructor. */ MEMinBias() : csNorm_(1.) {} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) 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. */ /** * 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; /** 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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * Normalization of the min-bias cross section */ double csNorm_; /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEMinBias> initMEMinBias; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEMinBias & operator=(const MEMinBias &); }; } #endif /* HERWIG_MEMinBias_H */ diff --git a/MatrixElement/Hadron/MEPP2GammaGamma.h b/MatrixElement/Hadron/MEPP2GammaGamma.h --- a/MatrixElement/Hadron/MEPP2GammaGamma.h +++ b/MatrixElement/Hadron/MEPP2GammaGamma.h @@ -1,257 +1,251 @@ // -*- C++ -*- // // MEPP2GammaGamma.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_MEPP2GammaGamma_H #define HERWIG_MEPP2GammaGamma_H // // This is the declaration of the MEPP2GammaGamma class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2GammaGamma class implements the production of photon pairs in * hadron hadron collisions. * * @see \ref MEPP2GammaGammaInterfaces "The interfaces" * defined for MEPP2GammaGamma. */ class MEPP2GammaGamma: public HwMEBase { public: /** * The default constructor. */ MEPP2GammaGamma() : _maxflavour(5),_process(0), scalePreFactor_(1.) { massOption(vector<unsigned int>(2,0)); } /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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; /** 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; //@} 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(); //@} private: /** * Members to return the matrix elements for the different subprocesses */ //@{ /** * Matrix element for \f$q\bar{q}\to \gamma\gamma\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param p1 Polarization vectors for the first outgoing photon * @param p2 Polarization vectors for the second outgoing photon * @param me Whether or not to calculate the matrix element for spin correlations */ double qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain, vector<VectorWaveFunction> & p1 , vector<VectorWaveFunction> & p2 , bool me) const; /** * Matrix element for \f$gg \to \gamma\gamma\f$. * @param g1 Polarization vectors for the first incoming gluon * @param g2 Polarization vectors for the second incoming gluon * @param p1 Polarization vectors for the first outgoing photon * @param p2 Polarization vectors for the second outgoing photon * @param me Whether or not to calculate the matrix element for spin correlations */ double ggME(vector<VectorWaveFunction> & g1 , vector<VectorWaveFunction> & g2 , vector<VectorWaveFunction> & p1 , vector<VectorWaveFunction> & p2 , bool me) const; //@} /** * \f$gg\to\gamma\gamma\f$ matrix element for the \f$++++\f$ helicity configuration. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant */ Complex ggme(Energy2 s,Energy2 t,Energy2 u) const { double ltu(log(abs(t/u))); double frac1((t-u)/s),frac2((sqr(t)+sqr(u))/sqr(s)); double thetatu = (t/u<0) ? 0 : 1; double thetat = (t<ZERO) ? 0 : 1; double thetau = (u<ZERO) ? 0 : 1; using Constants::pi; return Complex(1.+frac1*ltu+0.5*frac2*(sqr(ltu)+sqr(pi)*thetatu), -pi*(thetat-thetau)*(frac1+frac2*ltu)); } private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2GammaGamma> initMEPP2GammaGamma; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2GammaGamma & operator=(const MEPP2GammaGamma &); private: /** * Pointer to the quark-antiquark-photon vertex */ AbstractFFVVertexPtr _photonvertex; /** * Maximum PDG code of the quarks allowed */ unsigned int _maxflavour; /** * Option for which processes to include */ unsigned int _process; /** * Matrix element for spin correlations */ ProductionMatrixElement _me; /** * weights for the different quark annhilation diagrams */ mutable double _diagwgt[2]; /** * Scale prefactor */ double scalePreFactor_; }; } #endif /* HERWIG_MEPP2GammaGamma_H */ diff --git a/MatrixElement/Hadron/MEPP2GammaJet.h b/MatrixElement/Hadron/MEPP2GammaJet.h --- a/MatrixElement/Hadron/MEPP2GammaJet.h +++ b/MatrixElement/Hadron/MEPP2GammaJet.h @@ -1,269 +1,263 @@ // -*- C++ -*- // // MEPP2GammaJet.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_MEPP2GammaJet_H #define HERWIG_MEPP2GammaJet_H // // This is the declaration of the MEPP2GammaJet class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup MatrixElements * The MEPP2GammaJet class implements the matrix element for photon+jet * production in hadron-hadron collisions. * * @see \ref MEPP2GammaJetInterfaces "The interfaces" * defined for MEPP2GammaJet. */ class MEPP2GammaJet: public HwMEBase { public: /** * The default constructor. */ MEPP2GammaJet(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** * Members to return the matrix elements for the different subprocesses */ //@{ /** * Matrix element for \f$q\bar{q}\to g\gamma\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param gout Polarization vectors for the outgoing gluon * @param pout Polarization vectors for the outgoing photon * @param me Whether or not to calculate the matrix element for spin correlations */ double qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain, vector<VectorWaveFunction> & gout, vector<VectorWaveFunction> & pout, bool me) const; /** * Matrix element for \f$qg\to \gamma q\f$. * @param fin Spinors for incoming quark * @param gin Polarization vectors for the incoming gluon * @param pout Polarization vectors for the outgoing photon * @param fout Spinors for outgoing quark * @param me Whether or not to calculate the matrix element for spin correlations */ double qgME(vector<SpinorWaveFunction> & fin,vector<VectorWaveFunction> & gin, vector<VectorWaveFunction> & pout,vector<SpinorBarWaveFunction> & fout, bool me) const; /** * Matrix element for \f$\bar{q}g\to \gamma \bar{q}\f$. * @param ain Spinors for the incoming antiquark * @param gin Polarization vectors for the incoming gluon * @param pout Polarization vectors for the outgoing photon * @param aout Spinors for the outgoing antiquark * @param me Whether or not to calculate the matrix element for spin correlations */ double qbargME(vector<SpinorBarWaveFunction> & ain, vector<VectorWaveFunction> & gin, vector<VectorWaveFunction> & pout, vector<SpinorWaveFunction> & aout, bool me) const; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2GammaJet> initMEPP2GammaJet; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2GammaJet & operator=(const MEPP2GammaJet &); private: /** * Pointer to the quark-antiquark-gluon vertex */ AbstractFFVVertexPtr _gluonvertex; /** * Pointer to the quark-antiquark-photon vertex */ AbstractFFVVertexPtr _photonvertex; /** * Maximum PDG code of the quarks allowed */ int _maxflavour; /** * Option for which processes to include */ unsigned int _processopt; /** * Matrix element for spin correlations */ ProductionMatrixElement _me; /** * Scale prefactor */ double scalePreFactor_; }; } #endif /* HERWIG_MEPP2GammaJet_H */ diff --git a/MatrixElement/Hadron/MEPP2Higgs.h b/MatrixElement/Hadron/MEPP2Higgs.h --- a/MatrixElement/Hadron/MEPP2Higgs.h +++ b/MatrixElement/Hadron/MEPP2Higgs.h @@ -1,708 +1,702 @@ // -*- C++ -*- // // MEPP2Higgs.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_MEPP2Higgs_H #define HERWIG_MEPP2Higgs_H // // This is the declaration of the MEPP2Higgs class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "Herwig/PDT/GenericMassGenerator.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2Higgs class implements the matrix element for the process * pp->Higgs with different Higgs shape prescriptions (see details in hep-ph/9505211) * and the NLL corrected Higgs width (see details in the FORTRAN HERWIG manual). * * @see \ref MEPP2HiggsInterfaces "The interfaces" * defined for MEPP2Higgs. */ class MEPP2Higgs: public HwMEBase { public: /** * The default constructor. */ MEPP2Higgs(); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. */ virtual void setKinematics() { HwMEBase::setKinematics(); mh2_ = sHat(); } public: /** @name Member functions for the generation of hard QCD radiation */ //@{ /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return ISR;} /** * 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); /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} protected: /** * Members to calculate the real emission matrix elements */ //@{ /** * The leading-order matrix element for \f$gg\to H\f$ */ Energy4 loME() const; /** * The matrix element for \f$gg\to H g\f$ */ Energy2 ggME(Energy2 s, Energy2 t, Energy2 u); /** * The matrix element for \f$qg\to H q\f$ */ Energy2 qgME(Energy2 s, Energy2 t, Energy2 u); /** * The matrix element for \f$qbarg\to H qbar\f$ */ Energy2 qbargME(Energy2 s, Energy2 t, Energy2 u); //@} /** * Members to calculate the functions for the loop diagrams */ //@{ /** * The \f$B(s)\f$ function of NBP339 (1990) 38-66 * @param s The scale * @param mf2 The fermion mass squared. */ Complex B(Energy2 s,Energy2 mf2) const; /** * The \f$C(s)\f$ function of NBP339 (1990) 38-66 * @param s The scale * @param mf2 The fermion mass squared. */ complex<InvEnergy2> C(Energy2 s,Energy2 mf2) const; /** * The \f$C(s)\f$ function of NBP339 (1990) 38-66 * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared */ complex<InvEnergy4> D(Energy2 s,Energy2 t, Energy2 u,Energy2 mf2) const; /** * The integral \f$\int\frac{dy}{y-y_0}\log(a-i\epsilon-b y(1-y))\f$ * from NBP339 (1990) 38-66. * @param a The parameter \f$a\f$. * @param b The parameter \f$b\f$. * @param y0 The parameter \f$y_0\f$. */ Complex dIntegral(Energy2 a, Energy2 b, double y0) const; /** * The \f$M_{+++}\f$ matrix element of NBP339 (1990) 38-66. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared. * @param i Which of the stored values to use for \f$D(u,t)\f$. * @param j Which of the stored values to use for \f$D(u,s)\f$. * @param k Which of the stored values to use for \f$D(s,t)\f$. * @param i1 Which of the stored values to use for \f$C_1(s)\f$. * @param j1 Which of the stored values to use for \f$C_1(t)\f$. * @param k1 Which of the stored values to use for \f$C_1(u)\f$. */ complex<Energy> me1(Energy2 s,Energy2 t,Energy2 u, Energy2 mf2, unsigned int i,unsigned int j, unsigned int k, unsigned int i1,unsigned int j1, unsigned int k1) const; /** * The \f$M_{++-}\f$ matrix element of NBP339 (1990) 38-66. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared. */ complex<Energy> me2(Energy2 s,Energy2 t,Energy2 u, Energy2 mf2) const; /** * The \f$F(x)\f$ function for the leading-order result */ Complex F(double x) const; //@} /** * Method to extract the PDF weight for quark/antiquark * initiated processes and select the quark flavour */ tPDPtr quarkFlavour(tcPDFPtr pdf, Energy2 scale, double x, tcBeamPtr beam, double & pdfweight, bool anti); /** * Return the momenta and type of hard matrix element correction * @param gluons The original incoming particles. * @param beams The BeamParticleData objects * @param higgs The original outgoing higgs * @param iemit Whether the first (0) or second (1) particle emitted * the radiation * @param itype The type of radiated particle (0 is gluon, 1 is quark * and 2 is antiquark) * @param pnew The momenta of the new particles * @param xnew The new values of the momentuym fractions * @param out The ParticleData object for the outgoing parton * @return Whether or not the matrix element correction needs to be applied */ bool applyHard(ParticleVector gluons, vector<tcBeamPtr> beams, PPtr higgs,unsigned int & iemit, unsigned int & itype,vector<Lorentz5Momentum> & pnew, pair<double,double> & xnew, tPDPtr & out); /** * generates the hardest emission (yj,p) * @param pnew The momenta of the new particles * @param emissiontype The type of emission, as for getResult * @return Whether not an emission was generated */ bool getEvent(vector<Lorentz5Momentum> & pnew,int & emissiontype); /** * Returns the matrix element for a given type of process, * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$ * @param emis_type the type of emission, * (0 is \f$gg\to h^0g\f$, 1 is \f$qg\to h^0q\f$ and 2 is \f$g\bar{q}\to h^0\bar{q}\f$) * @param pt The transverse momentum of the jet * @param yj The rapidity of the jet * @param outParton the outgoing parton */ double getResult(int emis_type, Energy pt, double yj,tcPDPtr & outParton); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2Higgs> initMEPP2Higgs; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2Higgs & operator=(const MEPP2Higgs &); //@} /** * Members to return the matrix elements for the different subprocesses */ //@{ /** * Calculates the matrix element for the process g,g->h (via quark loops) * @param g1 a vector of wave functions of the first incoming gluon * @param g2 a vector of wave functions of the second incoming gluon * @param calc Whether or not to calculate the matrix element for spin correlations * @return the amlitude value. */ double ggME(vector<VectorWaveFunction> g1, vector<VectorWaveFunction> g2, ScalarWaveFunction &, bool calc) const; /** * Calculates the matrix element for the process q,qbar->h * @param fin a vector of quark spinors * @param ain a vector of anti-quark spinors * @param calc Whether or not to calculate the matrix element for spin correlations * @return the amlitude value. */ double qqME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain, ScalarWaveFunction &, bool calc) const; //@} private: /** * Selects a dynamic (sHat) or fixed factorization scale */ unsigned int scaleopt_; /** * The value associated to the fixed factorization scale option */ Energy mu_F_; /** * Defines the Higgs resonance shape */ unsigned int shapeOption_; /** * The processes to be included (GG->H and/or qq->H) */ unsigned int processOption_; /** * Minimum flavour of incoming quarks */ int minFlavour_; /** * Maximum flavour of incoming quarks */ int maxFlavour_; /** * Matrix element for spin correlations */ ProductionMatrixElement me_; /** * Pointer to the H-> 2 gluon vertex (used in gg->H) */ AbstractVVSVertexPtr HGGVertex_; /** * Pointer to the fermion-fermion Higgs vertex (used in qq->H) */ AbstractFFSVertexPtr HFFVertex_; /** * The mass generator for the Higgs */ GenericMassGeneratorPtr hmass_; /** * On-shell mass for the higgs */ Energy mh_; /** * On-shell width for the higgs */ Energy wh_; /** * Stuff for the ME correction */ //@{ /** * Parameters for the evaluation of the loops for the * matrix elements */ //@{ /** * Minimum flavour of quarks to include in the loops */ unsigned int minLoop_; /** * Maximum flavour of quarks to include in the loops */ unsigned int maxLoop_; /** * Option for treatment of the fermion loops */ unsigned int massOption_; /** * Option for dynamic scale choice in alpha_S (0=mT,>0=pT) */ unsigned int mu_R_opt_; /** * Option for dynamic scale choice in PDFs (0=mT,>0=pT) */ unsigned int mu_F_opt_; //@} //@} /** * Small complex number to regularize some integrals */ static const complex<Energy2> epsi_; /** * Storage of the loop functions */ //@{ /** * B functions */ mutable Complex bi_[5]; /** * C functions */ mutable complex<InvEnergy2> ci_[8]; /** * D functions */ mutable complex<InvEnergy4> di_[4]; //@} /** * Pointer to the object calculating the strong coupling */ ShowerAlphaPtr alpha_; /** * Mass squared of Higgs */ Energy2 mh2_; /** * Relative weight of the \f$qg\f$ to the \f$gg\f$ channel */ double channelwgtA_; /** * Relative weight for the \f$\bar{q}g\f$ to the \f$gg\f$ channel */ double channelwgtB_; /** * Weights for the channels as a vector */ vector<double> channelWeights_; /** * Power for the \f$\frac{{\rm d}\hat{s}}{\hat{s}^n}\f$ importance sampling * of the \f$gg\f$ component */ double ggPow_; /** * Power for the \f$\frac{{\rm d}\hat{s}}{\hat{s}^n}\f$ importance sampling * of the \f$qg\f$ and \f$\bar{q}g\f$ components */ double qgPow_; /** * The enhancement factor for initial-state radiation */ double enhance_; /** * Number of weights greater than 1 */ unsigned int nover_; /** * Number of attempts */ unsigned int ntry_; /** * Number which suceed */ unsigned int ngen_; /** * Maximum weight */ double maxwgt_; //@} /** * Constants for the sampling. The distribution is assumed to have the * form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ */ //@{ /** * The power, \f$n\f$, for the sampling */ double power_; /** * The prefactor, \f$c\f$ for the \f$gg\f$ channel */ double pregg_; /** * The prefactor, \f$c\f$ for the \f$qg\f$ channel */ double preqg_; /** * The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel */ double pregqbar_; /** * The prefactors as a vector for easy use */ vector<double> prefactor_; //@} /** * The transverse momentum of the jet */ Energy minpT_; /** * Properties of the incoming particles */ //@{ /** * Pointers to the BeamParticleData objects */ vector<tcBeamPtr> beams_; /** * Pointers to the ParticleDataObjects for the partons */ vector<tcPDPtr> partons_; //@} /** * Properties of the boson and jets */ //@{ /** * The rapidity of the Higgs boson */ double yh_; /** * The mass of the Higgs boson */ Energy mass_; /** * the rapidity of the jet */ double yj_; /** * The transverse momentum of the jet */ Energy pt_; /** * The outgoing parton */ tcPDPtr out_; //@} /** * Whether of not to construct the vertex for spin correlations */ bool spinCorrelations_; }; } #endif /* HERWIG_MEPP2Higgs_H */ diff --git a/MatrixElement/Hadron/MEPP2HiggsJet.h b/MatrixElement/Hadron/MEPP2HiggsJet.h --- a/MatrixElement/Hadron/MEPP2HiggsJet.h +++ b/MatrixElement/Hadron/MEPP2HiggsJet.h @@ -1,455 +1,449 @@ // -*- C++ -*- // // MEPP2HiggsJet.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_MEPP2HiggsJet_H #define HERWIG_MEPP2HiggsJet_H // // This is the declaration of the MEPP2HiggsJet class. // #include "ThePEG/MatrixElement/ME2to2Base.h" #include "Herwig/Utilities/Maths.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/PDT/GenericMassGenerator.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2HiggsJet class implements the matrix element for Higgs+jet production. * * @see \ref MEPP2HiggsJetInterfaces "The interfaces" * defined for MEPP2HiggsJet. */ class MEPP2HiggsJet: public ME2to2Base { public: /** * The default constructor. */ MEPP2HiggsJet() : _shapeopt(2),_maxflavour(5), _process(0), _minloop(6),_maxloop(6),_massopt(0) , _mh(ZERO),_wh(ZERO) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() const; /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const; /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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; /** 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; //@} 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(); //@} private: /** * Members to return the matrix elements for the different subprocesses */ //@{ /** * Matrix element for \f$q\bar{q}\to Hg\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param hout Wavefunction for the outgoing higgs * @param gout Polarization vectors for the outgoing gluon * @param me Whether or not to calculate the matrix element for spin correlations **/ double qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain, ScalarWaveFunction & hout, vector<VectorWaveFunction> & gout, bool me) const; /** * Matrix element for \f$qg\to Hq\f$. * @param fin Spinors for incoming quark * @param gin Polarization vectors for the incoming gluon * @param hout Wavefunction for the outgoing higgs * @param fout Spinors for outgoing quark * @param me Whether or not to calculate the matrix element for spin correlations **/ double qgME(vector<SpinorWaveFunction> & fin,vector<VectorWaveFunction> & gin, ScalarWaveFunction & hout, vector<SpinorBarWaveFunction> & fout, bool me) const; /** * Matrix element for \f$\bar{q}g\to H\bar{q}\f$. * @param fin Spinors for incoming antiquark * @param gin Polarization vectors for the incoming gluon * @param hout Wavefunction for the outgoing higgs * @param fout Spinors for outgoing antiquark * @param me Whether or not to calculate the matrix element for spin correlations **/ double qbargME(vector<SpinorBarWaveFunction> & fin,vector<VectorWaveFunction> & gin, ScalarWaveFunction & hout, vector<SpinorWaveFunction> & fout, bool me) const; /** * Matrix element for \f$gg\to Hg\f$. * @param g1 Polarization vectors for the first incoming gluon * @param g2 Polarization vectors for the second incoming gluon * @param hout Wavefunction for the outgoing higgs * @param g4 Polarization vectors for the outgoing gluon * @param me Whether or not to calculate the matrix element for spin correlations **/ double ggME(vector<VectorWaveFunction> g1, vector<VectorWaveFunction> g2, ScalarWaveFunction & hout, vector<VectorWaveFunction> g4, bool me) const; //@} private: /** * Members to calculate the functions for the loop diagrams */ //@{ /** * The \f$W_1(s)\f$ function of NPB297 (1988) 221-243. * @param s The invariant * @param mf2 The fermion mass squared */ Complex W1(Energy2 s,Energy2 mf2) const { double root = sqrt(abs(1.-4.*mf2/s)); if(s<ZERO) return 2.*root*asinh(0.5*sqrt(-s/mf2)); else if(s<4.*mf2) return 2.*root*asin(0.5*sqrt( s/mf2)); else return root*(2.*acosh(0.5*sqrt(s/mf2)) -Constants::pi*Complex(0.,1.)); } /** * The \f$W_2(s)\f$ function of NPB297 (1988) 221-243. * @param s The invariant * @param mf2 The fermion mass squared */ Complex W2(Energy2 s,Energy2 mf2) const { double root=0.5*sqrt(abs(s)/mf2); if(s<ZERO) return 4.*sqr(asinh(root)); else if(s<4.*mf2) return -4.*sqr(asin(root)); else return 4.*sqr(acosh(root))-sqr(Constants::pi) -4.*Constants::pi*acosh(root)*Complex(0.,1.); } /** * The \f$W_3(s,t,u,v)\f$ function of NPB297 (1988) 221-243. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param v The \f$u\f$ invariant * @param mf2 The fermion mass squared. */ Complex W3(Energy2 s, Energy2 t, Energy2 u, Energy2 v, Energy2 mf2) const { return I3(s,t,u,v,mf2)-I3(s,t,u,s,mf2)-I3(s,t,u,u,mf2); } /** * The \f$I_3(s,t,u,v)\f$ function of NPB297 (1988) 221-243. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param v The \f$v\f$ invariant * @param mf2 The fermion mass squared */ Complex I3(Energy2 s, Energy2 t, Energy2 u, Energy2 v, Energy2 mf2) const { double ratio=(4.*mf2*t/(u*s)),root(sqrt(1+ratio)); if(v==ZERO) return 0.; Complex y=0.5*(1.+sqrt(1.-4.*(mf2+_epsi*MeV*MeV)/v)); Complex xp=0.5*(1.+root),xm=0.5*(1.-root); Complex output = Math::Li2(xm/(xm-y))-Math::Li2(xp/(xp-y))+ Math::Li2(xm/(y-xp))-Math::Li2(xp/(y-xm))+ log(-xm/xp)*log(1.-_epsi-v/mf2*xp*xm); return output*2./root; } /** * The \f$b_2(s,t,u)\f$ function of NPB297 (1988) 221-243. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared. */ Complex b2(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const { Energy2 mh2(s+u+t); complex<Energy2> output=s*(u-s)/(s+u)+2.*u*t*(u+2.*s)/sqr(s+u)*(W1(t,mf2)-W1(mh2,mf2)) +(mf2-0.25*s)*(0.5*(W2(s,mf2)+W2(mh2,mf2))-W2(t,mf2)+W3(s,t,u,mh2,mf2)) +sqr(s)*(2.*mf2/sqr(s+u)-0.5/(s+u))*(W2(t,mf2)-W2(mh2,mf2)) +0.5*u*t/s*(W2(mh2,mf2)-2.*W2(t,mf2)) +0.125*(s-12.*mf2-4.*u*t/s)*W3(t,s,u,mh2,mf2); return output*mf2/sqr(mh2); } /** * The \f$b_2(s,t,u)\f$ function of NPB297 (1988) 221-243. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared. */ Complex b4(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const { Energy2 mh2(s+t+u); return mf2/mh2*(-2./3.+(mf2/mh2-0.25)*(W2(t,mf2)-W2(mh2,mf2)+W3(s,t,u,mh2,mf2))); } /** * The \f$A_2(s,t,u)\f$ function of NPB297 (1988) 221-243. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared. */ Complex A2(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const { return b2(s,t,u,mf2)+b2(s,u,t,mf2); } /** * The \f$A_4(s,t,u)\f$ function of NPB297 (1988) 221-243. * @param s The \f$s\f$ invariant * @param t The \f$t\f$ invariant * @param u The \f$u\f$ invariant * @param mf2 The fermion mass squared. */ Complex A4(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const { return b4(s,t,u,mf2)+b4(u,s,t,mf2)+b4(t,u,s,mf2); } //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2HiggsJet> initMEPP2HiggsJet; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2HiggsJet & operator=(const MEPP2HiggsJet &); private: /** * Defines the Higgs resonance shape */ unsigned int _shapeopt; /** * Maximum PDG code of the quarks allowed */ unsigned int _maxflavour; /** * Option for which processes to include */ unsigned int _process; /** * Matrix element for spin correlations */ ProductionMatrixElement _me; /** * Minimum flavour of quarks to include in the loops */ int _minloop; /** * Maximum flavour of quarks to include in the loops */ int _maxloop; /** * Option for treatment of the fermion loops */ unsigned int _massopt; /** * Small complex number to regularize some integrals */ static const Complex _epsi; /** * On-shell mass for the higgs */ Energy _mh; /** * On-shell width for the higgs */ Energy _wh; /** * The mass generator for the Higgs */ GenericMassGeneratorPtr _hmass; /** * Storage of the loop functions */ //@{ /** * B functions */ mutable Complex _bi[5]; /** * C functions */ mutable Complex _ci[8]; /** * D functions */ mutable Complex _di[4]; //@} /** * Storage of the diagram weights for the \f$gg\to Hg\f$ subprocess */ mutable double _diagwgt[3]; }; } #endif /* HERWIG_MEPP2HiggsJet_H */ diff --git a/MatrixElement/Hadron/MEPP2HiggsVBF.h b/MatrixElement/Hadron/MEPP2HiggsVBF.h --- a/MatrixElement/Hadron/MEPP2HiggsVBF.h +++ b/MatrixElement/Hadron/MEPP2HiggsVBF.h @@ -1,467 +1,461 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2HiggsVBF_H #define HERWIG_MEPP2HiggsVBF_H // // This is the declaration of the MEPP2HiggsVBF class. // #include "Herwig/MatrixElement/MEfftoffH.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2HiggsVBF class provides the matrix elements for the * production of the Higgs boson via the vector boson fusion mechanism * in hadron collisions * * @see \ref MEPP2HiggsVBFInterfaces "The interfaces" * defined for MEPP2HiggsVBF. */ class MEPP2HiggsVBF: public MEfftoffH { /** * Struct to contain the hadronic system */ struct tChannelPair{ /** * The hadron */ PPtr hadron; /** * The beam particle data object */ tcBeamPtr beam; /** * The incoming particle */ PPtr incoming; /** * The outgoing particle */ PPtr outgoing; /** * The PDF */ tcPDFPtr pdf; }; public: /** * The default constructor. */ MEPP2HiggsVBF(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; //@} /** * Virtual members to be overridden by inheriting classes * which implement hard corrections */ //@{ /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return Both;} /** * 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, ShowerParticlePtr,Branching); /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction); //@} 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: /** * Generate the hardest emission in the POWHEG approach */ //@{ /** * Generate a Compton process */ void generateCompton(unsigned int system); /** * Generate a BGF process */ void generateBGF(unsigned int system); /** * Matrix element piece for the Compton process */ double comptonME(unsigned int system, double xT,double xp, double zp, double phi); /** * Matrix element piece for the Compton process */ double BGFME(unsigned int system, double xT,double xp, double zp, double phi); /** * Leading order matrix element */ Energy4 loMatrixElement(const Lorentz5Momentum &p1, const Lorentz5Momentum &p2, const Lorentz5Momentum &q1, const Lorentz5Momentum &q2, double G1, double G2) const; //@} /** * Generate the hard emission in the old-fashioned matrix element correction approach */ //@{ /** * Generate the values of \f$x_p\f$ and \f$z_p\f$ * @param xp The value of xp, output * @param zp The value of zp, output */ double generateComptonPoint(double &xp, double & zp); /** * Generate the values of \f$x_p\f$ and \f$z_p\f$ * @param xp The value of xp, output * @param zp The value of zp, output */ double generateBGFPoint(double &xp, double & zp); /** * Return the coefficients for the matrix element piece for * the QCD compton case. The output is the \f$a_i\f$ coefficients to * give the function as * \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$ * @param xp \f$x_p\f$ * @param x2 \f$x_2\f$ * @param xperp \f$x_\perp\f$ * @param l Scaled momentum of incoming spectator * @param m Scaled momentum of outgoing spectator * */ vector<double> ComptonME(double xp, double x2, double xperp, LorentzVector<double> l, LorentzVector<double> m); /** * Return the coefficients for the matrix element piece for * the QCD compton case. The output is the \f$a_i\f$ coefficients to * give the function as * \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$ * @param xp \f$x_p\f$ * @param x2 \f$x_3\f$ * @param x3 \f$x_2\f$ * @param xperp \f$x_\perp\f$ * @param l Scaled momentum of incoming spectator * @param m Scaled momentum of outgoing spectator * */ vector<double> BGFME(double xp, double x2, double x3, double xperp, LorentzVector<double> l, LorentzVector<double> m); /** * Calculate the coefficient A for the correlations */ double A(tcPDPtr qin1, tcPDPtr qout1, tcPDPtr qin2, tcPDPtr qout2); //@} 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(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} 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); } //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2HiggsVBF> initMEPP2HiggsVBF; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2HiggsVBF & operator=(const MEPP2HiggsVBF &); private: /** * Parameters for the hard POWHEG emission */ //@{ /** * Pointer to the object calculating the strong coupling */ ShowerAlphaPtr alpha_; /** * Weight for the compton channel */ double comptonWeight_; /** * Weight for the BGF channel */ double BGFWeight_; /** * Minimum value of \f$p_T\f$ */ Energy pTmin_; /** * Gluon particle data object */ PDPtr gluon_; //@} /** * Properties of the emission */ //@{ /** * Beam particle */ tcBeamPtr beam_[2]; /** * PDF object */ tcPDFPtr pdf_[2]; /** * Partons */ tcPDPtr partons_[2][4]; /** * q */ Lorentz5Momentum q_[2]; /** * \f$Q^2\f$ */ Energy2 q2_[2]; /** * Coupling factor */ double acoeff_; /** * Lorentz vectors for the matrix element */ LorentzVector<double> l_; /** * Lorentz vectors for the matrix element */ LorentzVector<double> m_; /** * Born momentum fraction */ double xB_[2]; /** * Rotation to the Breit frame */ LorentzRotation rot_[2]; /** * Quark momenta for spectator system */ Lorentz5Momentum pother_[2][2]; /** * Quark momenta for emitting system */ Lorentz5Momentum psystem_[2][2]; /** * Higgs momenta */ Lorentz5Momentum phiggs_[2]; /** * Transverse momenta for the compton emissions */ Energy pTCompton_[2]; /** * Transverse momenta for the BGF emissions */ Energy pTBGF_[2]; /** * Whether the Compton radiation is ISR or FSR */ bool ComptonISFS_[2]; /** * Momenta of the particles for a compton emission */ vector<Lorentz5Momentum> ComptonMomenta_[2]; /** * Momenta of the particles for a BGF emission */ vector<Lorentz5Momentum> BGFMomenta_[2]; /** * the systems */ vector<tChannelPair> systems_; /** * Higgs boson */ PPtr higgs_; //@} /** * Parameters for the matrix element correction */ //@{ /** * Enchancement factor for ISR */ double initial_; /** * Enchancement factor for FSR */ double final_; /** * Relative fraction of compton and BGF processes to generate */ double procProb_; /** * Integral for compton process */ double comptonInt_; /** * Integral for BGF process */ double bgfInt_; /** * Number of weights greater than 1 */ unsigned int nover_; /** * Maximum weight */ pair<double,double> maxwgt_; //@} }; } #endif /* HERWIG_MEPP2HiggsVBF_H */ diff --git a/MatrixElement/Hadron/MEPP2QQ.h b/MatrixElement/Hadron/MEPP2QQ.h --- a/MatrixElement/Hadron/MEPP2QQ.h +++ b/MatrixElement/Hadron/MEPP2QQ.h @@ -1,357 +1,351 @@ // -*- C++ -*- // // MEPP2QQ.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_MEPP2QQ_H #define HERWIG_MEPP2QQ_H // // This is the declaration of the MEPP2QQ class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2QQ class implements the production of a heavy quark-antiquark * pair via QCD. * * @see \ref MEPP2QQInterfaces "The interfaces" * defined for MEPP2QQ. */ class MEPP2QQ: public HwMEBase { public: /** * The default constructor. */ MEPP2QQ(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Members to calculate the matrix elements */ //@{ /** * Matrix element for \f$gg\to q\bar{q}\f$ * @param g1 The wavefunctions for the first incoming gluon * @param g2 The wavefunctions for the second incoming gluon * @param q The wavefunction for the outgoing quark * @param qbar The wavefunction for the outgoing antiquark * @param flow The colour flow */ double gg2qqbarME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar, unsigned int flow) const; /** * Matrix element for \f$q\bar{q}\to q\bar{q}\f$ * @param q1 The wavefunction for the incoming quark * @param q2 The wavefunction for the incoming antiquark * @param q3 The wavefunction for the outgoing quark * @param q4 The wavefunction for the outgoing antiquark * @param flow The colour flow */ double qqbar2qqbarME(vector<SpinorWaveFunction> & q1, vector<SpinorBarWaveFunction> & q2, vector<SpinorBarWaveFunction> & q3, vector<SpinorWaveFunction> & q4, unsigned int flow) const; /** * Matrix element for \f$qq\to qq\f$ * @param q1 The wavefunction for the first incoming quark * @param q2 The wavefunction for the second incoming quark * @param q3 The wavefunction for the first outgoing quark * @param q4 The wavefunction for the second outgoing quark * @param flow The colour flow */ double qq2qqME(vector<SpinorWaveFunction> & q1, vector<SpinorWaveFunction> & q2, vector<SpinorBarWaveFunction> & q3, vector<SpinorBarWaveFunction> & q4, unsigned int flow) const; /** * Matrix element for \f$\bar{q}\bar{q}\to \bar{q}\bar{q}\f$ * @param q1 The wavefunction for the first incoming antiquark * @param q2 The wavefunction for the second incoming antiquark * @param q3 The wavefunction for the first outgoing antiquark * @param q4 The wavefunction for the second outgoing antiquark * @param flow The colour flow */ double qbarqbar2qbarqbarME(vector<SpinorBarWaveFunction> & q1, vector<SpinorBarWaveFunction> & q2, vector<SpinorWaveFunction> & q3, vector<SpinorWaveFunction> & q4, unsigned int flow) const; /** * Matrix element for \f$qg\to qg\f$ * @param qin The wavefunction for the incoming quark * @param g2 The wavefunction for the incoming gluon * @param qout The wavefunction for the outgoing quark * @param g4 The wavefunction for the outgoing gluon * @param flow The colour flow */ double qg2qgME(vector<SpinorWaveFunction> & qin,vector<VectorWaveFunction> &g2, vector<SpinorBarWaveFunction> & qout,vector<VectorWaveFunction> &g4, unsigned int flow) const; /** * Matrix elements for \f$\bar{q}g\to \bar{q}g\f$. * @param qin The wavefunction for the incoming antiquark * @param g2 The wavefunction for the incoming gluon * @param qout The wavefunction for the outgoing antiquark * @param g4 The wavefunction for the outgoing gluon * @param flow The colour flow */ double qbarg2qbargME(vector<SpinorBarWaveFunction> & qin, vector<VectorWaveFunction> &g2, vector<SpinorWaveFunction> & qout,vector<VectorWaveFunction> &g4, unsigned int flow) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2QQ> initMEPP2QQ; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2QQ & operator=(const MEPP2QQ &); private: /** * Vertices needed to compute the diagrams */ //@{ /** * \f$ggg\f$ vertex */ AbstractVVVVertexPtr _gggvertex; /** * \f$q\bar{q}g\f$ vertex */ AbstractFFVVertexPtr _qqgvertex; //@} /** * Quark Flavour */ unsigned int _quarkflavour; /** * Processes to include */ unsigned int _process; /** * Option for the treatment of bottom and lighter * quark masses */ unsigned int _bottomopt; /** * Option for the treatment of top quark masses */ unsigned int _topopt; /** * Maximum numbere of quark flavours to include */ unsigned int _maxflavour; /** * Colour flow */ mutable unsigned int _flow; /** * Diagram */ mutable unsigned int _diagram; /** * Matrix element */ mutable ProductionMatrixElement _me; /** * ParticleData objects of the partons */ //@{ /** * The gluon */ PDPtr _gluon; /** * the quarks */ vector<PDPtr> _quark; /** * the antiquarks */ vector<PDPtr> _antiquark; //@} }; } #endif /* HERWIG_MEPP2QQ_H */ diff --git a/MatrixElement/Hadron/MEPP2QQHiggs.h b/MatrixElement/Hadron/MEPP2QQHiggs.h --- a/MatrixElement/Hadron/MEPP2QQHiggs.h +++ b/MatrixElement/Hadron/MEPP2QQHiggs.h @@ -1,356 +1,350 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2QQHiggs_H #define HERWIG_MEPP2QQHiggs_H // // This is the declaration of the MEPP2QQHiggs class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/PDT/GenericMassGenerator.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2QQHiggs class implements the matrix elements for * \f$gg\to Q \bar Q h^0\f$ and \f$q\bar q\to Q \bar Q h^0\f$. * * @see \ref MEPP2QQHiggsInterfaces "The interfaces" * defined for MEPP2QQHiggs. */ class MEPP2QQHiggs: public HwMEBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ MEPP2QQHiggs(); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} protected: /** * Members to calculate the matrix elements */ //@{ /** * Matrix element for \f$gg\to Q\bar{Q}h^0\f$ * @param g1 The wavefunctions for the first incoming gluon * @param g2 The wavefunctions for the second incoming gluon * @param q The wavefunction for the outgoing quark * @param qbar The wavefunction for the outgoing antiquark * @param h The wavefunction for the outgoing Higgs boson * @param flow The colour flow */ double ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar, ScalarWaveFunction & h, unsigned int flow) const; /** * Matrix element for \f$q\bar{q}\to Q\bar{Q}h^0\f$ * @param q1 The wavefunction for the incoming quark * @param q2 The wavefunction for the incoming antiquark * @param q3 The wavefunction for the outgoing quark * @param q4 The wavefunction for the outgoing antiquark * @param h The wavefunction for the outgoing Higgs boson * @param flow The colour flow */ double qqME(vector<SpinorWaveFunction> & q1, vector<SpinorBarWaveFunction> & q2, vector<SpinorBarWaveFunction> & q3, vector<SpinorWaveFunction> & q4, ScalarWaveFunction & h, unsigned int flow) 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2QQHiggs> initMEPP2QQHiggs; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2QQHiggs & operator=(const MEPP2QQHiggs &); private: /** * Switches to control the subprocess */ //@{ /** * Quark Flavour */ unsigned int quarkFlavour_; /** * Processes to include */ unsigned int process_; //@} /** * Switches etc for the Higgs mass generation */ //@{ /** * Defines the Higgs resonance shape */ unsigned int shapeOpt_; /** * On-shell mass for the higgs */ Energy mh_; /** * On-shell width for the higgs */ Energy wh_; /** * The mass generator for the Higgs */ GenericMassGeneratorPtr hmass_; //@} /** * Vertices needed to compute the diagrams */ //@{ /** * \f$ggg\f$ vertex */ AbstractVVVVertexPtr GGGVertex_; /** * \f$q\bar{q}g\f$ vertex */ AbstractFFVVertexPtr QQGVertex_; /** * \f$q\bar q h^0\f$ vertex */ AbstractFFSVertexPtr QQHVertex_; //@} /** * ParticleData objects of the particles */ //@{ /** * The gluon */ PDPtr gluon_; /** * The Higgs boson */ PDPtr higgs_; /** * the quarks */ vector<PDPtr> quark_; /** * the antiquarks */ vector<PDPtr> antiquark_; //@} /** * Parameters for the phase-space generation */ //@{ /** * Power for the phase-space mapping */ double alpha_; //@} /** * Colour flow */ mutable unsigned int flow_; /** * Diagram */ mutable unsigned int diagram_; /** * Matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEPP2QQHiggs_H */ diff --git a/MatrixElement/Hadron/MEPP2SingleTop.h b/MatrixElement/Hadron/MEPP2SingleTop.h --- a/MatrixElement/Hadron/MEPP2SingleTop.h +++ b/MatrixElement/Hadron/MEPP2SingleTop.h @@ -1,255 +1,249 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2SingleTop_H #define HERWIG_MEPP2SingleTop_H // // This is the declaration of the MEPP2SingleTop class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2SingleTop class implements the matrix element for the * production of a single top quark. * * @see \ref MEPP2SingleTopInterfaces "The interfaces" * defined for MEPP2SingleTop. */ class MEPP2SingleTop: public HwMEBase { public: /** * The default constructor. */ MEPP2SingleTop(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix Elements ofr the different processes */ //@{ /** * Matrix element for \f$q\bar{q}\to W \to t\bar{f}\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param fout Spinors for incoming quark * @param aout Spinors for incoming antiquark * @param me Whether or not to calculate the matrix element for spin correlations */ double sChannelME(vector<SpinorWaveFunction> & fin , vector<SpinorBarWaveFunction> & ain , vector<SpinorBarWaveFunction> & fout, vector<SpinorWaveFunction> & aout, bool me) const; /** * Matrix element for \f$qq\to t q\f$. * @param f1 Spinors for incoming quark * @param a1 Spinors for incoming antiquark * @param f2 Spinors for incoming quark * @param a2 Spinors for incoming antiquark * @param me Whether or not to calculate the matrix element for spin correlations */ double tChannelME(vector<SpinorWaveFunction> & f1 , vector<SpinorBarWaveFunction> & a1 , vector<SpinorWaveFunction> & f2, vector<SpinorBarWaveFunction> & a2, bool me) const; /** * Matrix element for \f$qg\to t W\f$. * @param fin Spinors for incoming quark * @param gin Polarization vectors for the incoming gluon * @param fout Spinors for outgoing quark * @param Wout Polarization vectors for the outgoing W * @param me Whether or not to calculate the matrix element for spin correlations */ double tWME(vector<SpinorWaveFunction> & fin, vector<VectorWaveFunction> & gin, vector<SpinorBarWaveFunction> & fout, vector<VectorWaveFunction> & Wout, bool me) const; //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2SingleTop> initMEPP2SingleTop; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2SingleTop & operator=(const MEPP2SingleTop &); private: /** * Vertices */ //@{ /** * FFWVertex */ AbstractFFVVertexPtr FFWvertex_; /** * FFGVertex */ AbstractFFVVertexPtr FFGvertex_; //@} /** * Which processes to include */ unsigned int process_; /** * Allowed flavours of the incoming quarks */ int maxflavour_; /** * Treatment of the top quark mass */ int topOption_; /** * Treatment of the W mass */ int wOption_; /** * The matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEPP2SingleTop_H */ diff --git a/MatrixElement/Hadron/MEPP2VGamma.h b/MatrixElement/Hadron/MEPP2VGamma.h --- a/MatrixElement/Hadron/MEPP2VGamma.h +++ b/MatrixElement/Hadron/MEPP2VGamma.h @@ -1,241 +1,235 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2VGamma_H #define HERWIG_MEPP2VGamma_H // // This is the declaration of the MEPP2VGamma class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2VGamma class implements the . * * @see \ref MEPP2VGammaInterfaces "The interfaces" * defined for MEPP2VGamma. */ class MEPP2VGamma: public HwMEBase { public: /** * The default constructor. */ MEPP2VGamma(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$f\bar{f}\to W^\pm \gamma\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 \f$W^\pm\f$ wavefunction * @param v2 \f$\gamma\f$ wavefunction * @param me Whether or not to calculate the matrix element for spin correlations */ double WGammaME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2, bool me) const; /** * Matrix element for \f$f\bar{f}\to Z^0 \gamma\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 \f$Z^0\f$ wavefunction * @param v2 \f$\gamma\f$ wavefunction * @param me Whether or not to calculate the matrix element for spin correlations */ double ZGammaME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2, bool me) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2VGamma> initMEPP2VGamma; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2VGamma & operator=(const MEPP2VGamma &); private: /** * Vertices */ //@{ /** * FFPVertex */ AbstractFFVVertexPtr FFPvertex_; /** * FFWVertex */ AbstractFFVVertexPtr FFWvertex_; /** * FFZVertex */ AbstractFFVVertexPtr FFZvertex_; /** * WWW Vertex */ AbstractVVVVertexPtr WWWvertex_; //@} /** * Processes */ unsigned int process_; /** * Allowed flavours of the incoming quarks */ int maxflavour_; /** * Treatment of the the boson masses */ unsigned int massOption_; /** * The matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEPP2VGamma_H */ diff --git a/MatrixElement/Hadron/MEPP2VV.h b/MatrixElement/Hadron/MEPP2VV.h --- a/MatrixElement/Hadron/MEPP2VV.h +++ b/MatrixElement/Hadron/MEPP2VV.h @@ -1,268 +1,262 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2VV_H #define HERWIG_MEPP2VV_H // // This is the declaration of the MEPP2VV class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2VV class implements the production of \f$W^+W^-\f$, * \f$W^\pm Z^0\f$ and \f$Z^0Z^o\f$ in hadron-hadron collisions. * * @see \ref MEPP2VVInterfaces "The interfaces" * defined for MEPP2VV. */ class MEPP2VV: public HwMEBase { public: /** * The default constructor. */ MEPP2VV(); public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Return the process being run (WW/ZZ/WZ). */ virtual int process() const { return process_; } /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Used internally by generateKinematics, after calculating the * limits on cos(theta). */ virtual double getCosTheta(double cthmin, double cthmax, const double r); /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$f\bar{f}\to W^+W^-\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 The first outgoing W polarization vectors * @param v2 The second outgoing W polarization vectors * @param me Whether or not to calculate the matrix element for spin correlations */ double WWME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2, bool me) const; /** * Matrix element for \f$f\bar{f}\to W^\pm Z^0\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 The outgoing W polarization vectors * @param v2 The outgoing Z polarization vectors * @param me Whether or not to calculate the matrix element for spin correlations */ double WZME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2, bool me) const; /** * Matrix element for \f$f\bar{f}\to Z^0Z^0\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 The first outgoing Z polarization vectors * @param v2 The second outgoing Z polarization vectors * @param me Whether or not to calculate the matrix element for spin correlations */ double ZZME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2, bool me) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2VV> initMEPP2VV; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2VV & operator=(const MEPP2VV &); private: /** * Vertices */ //@{ /** * FFPVertex */ AbstractFFVVertexPtr FFPvertex_; /** * FFWVertex */ AbstractFFVVertexPtr FFWvertex_; /** * FFZVertex */ AbstractFFVVertexPtr FFZvertex_; /** * WWW Vertex */ AbstractVVVVertexPtr WWWvertex_; //@} /** * Processes */ unsigned int process_; /** * Allowed flavours of the incoming quarks */ int maxflavour_; /** * Treatment of the the boson masses */ unsigned int massOption_; /** * The matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEPP2VV_H */ diff --git a/MatrixElement/Hadron/MEPP2WH.h b/MatrixElement/Hadron/MEPP2WH.h --- a/MatrixElement/Hadron/MEPP2WH.h +++ b/MatrixElement/Hadron/MEPP2WH.h @@ -1,119 +1,113 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2WH_H #define HERWIG_MEPP2WH_H // // This is the declaration of the MEPP2WH class. // #include "Herwig/MatrixElement/MEfftoVH.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2WH class provides the matrix elements for the production of * the \f$W^\pm\f$ boson in association with the Higgs in hadron collisions. * * @see \ref MEPP2WHInterfaces "The interfaces" * defined for MEPP2WH. */ class MEPP2WH: public MEfftoVH { public: /** * Default constructor */ MEPP2WH(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2WH> initMEPP2WH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2WH & operator=(const MEPP2WH &); private: /** * Which intermediate \f$W^\pm\f$ bosons to include */ unsigned int _plusminus; }; } #endif /* HERWIG_MEPP2WH_H */ diff --git a/MatrixElement/Hadron/MEPP2WJet.h b/MatrixElement/Hadron/MEPP2WJet.h --- a/MatrixElement/Hadron/MEPP2WJet.h +++ b/MatrixElement/Hadron/MEPP2WJet.h @@ -1,322 +1,316 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2WJet_H #define HERWIG_MEPP2WJet_H // // This is the declaration of the MEPP2WJet class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2WJet class implements the matrix element for the production of * a W boson and a jet including the decay of the W. * * @see \ref MEPP2WJetInterfaces "The interfaces" * defined for MEPP2WJet. */ class MEPP2WJet: public HwMEBase { public: /** * The default constructor. */ MEPP2WJet(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix elements for the different subprocesses */ //@{ /** * Matrix element for \f$q\bar{q}\to W^\pm g\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param gout Polarization vectors for the outgoing gluon * @param lm Spinors for outgoing lepton * @param lp Spinors for outgoing antilepton * @param me Whether or not to calculate the matrix element for spin correlations **/ InvEnergy2 qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain, vector<VectorWaveFunction> & gout, vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, bool me=false) const; /** * Matrix element for \f$qg\to W^\pm q\f$. * @param fin Spinors for incoming quark * @param gin Polarization vectors for the incoming gluon * @param fout Spinors for outgoing quark * @param lm Spinors for outgoing lepton * @param lp Spinors for outgoing antilepton * @param me Whether or not to calculate the matrix element for spin correlations **/ InvEnergy2 qgME(vector<SpinorWaveFunction> & fin, vector<VectorWaveFunction> & gin, vector<SpinorBarWaveFunction> & fout, vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, bool me=false) const; /** * Matrix element for \f$\bar{q}g\to W^\pm\bar{q}\f$. * @param fin Spinors for incoming antiquark * @param gin Polarization vectors for the incoming gluon * @param fout Spinors for outgoing antiquark * @param lm Spinors for outgoing lepton * @param lp Spinors for outgoing antilepton * @param me Whether or not to calculate the matrix element for spin correlations **/ InvEnergy2 qbargME(vector<SpinorBarWaveFunction> & fin, vector<VectorWaveFunction> & gin, vector<SpinorWaveFunction> & fout, vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, bool me=false) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2WJet> initMEPP2WJet; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2WJet & operator=(const MEPP2WJet &); private: /** * Vertices for the helicity amplitude calculation */ //@{ /** * Pointer to the W vertex */ AbstractFFVVertexPtr _theFFWVertex; /** * Pointer to the \f$qqg\f$ vertex */ AbstractFFVVertexPtr _theQQGVertex; //@} /** * @name Pointers to the W ParticleData objects */ //@{ /** * The \f$W^+\f$ data pointer */ tcPDPtr _wplus; /** * The \f$W^-\f$ data pointer */ tcPDPtr _wminus; //@} /** * @name Switches to control the particles in the hard process */ //@{ /** * Subprocesses to include */ unsigned int _process; /** * Allowed flavours for the incoming quarks */ unsigned int _maxflavour; /** * Which charge states to include */ unsigned int _plusminus; /** * W decay modes */ unsigned int _wdec; /** * Option for the treatment of the W off-shell effects */ unsigned int _widthopt; //@} /** * Matrix element for spin correlations */ mutable ProductionMatrixElement _me; /** * Storage of the scale to avoid the need to recalculate */ Energy2 _scale; /** * Storage of the off-shell W mass to avoid the need to recalculate */ Energy2 _mw2; }; } #endif /* HERWIG_MEPP2WJet_H */ diff --git a/MatrixElement/Hadron/MEPP2ZH.h b/MatrixElement/Hadron/MEPP2ZH.h --- a/MatrixElement/Hadron/MEPP2ZH.h +++ b/MatrixElement/Hadron/MEPP2ZH.h @@ -1,117 +1,111 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2ZH_H #define HERWIG_MEPP2ZH_H // // This is the declaration of the MEPP2ZH class. // #include "Herwig/MatrixElement/MEfftoVH.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2ZH class implements the matrix element * for \f$q\bar{q}\to Z^0h^0\f$. * * @see \ref MEPP2ZHInterfaces "The interfaces" * defined for MEPP2ZH. */ class MEPP2ZH: public MEfftoVH { public: /** * The default constructor. */ MEPP2ZH(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2ZH> initMEPP2ZH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2ZH & operator=(const MEPP2ZH &); private: /** * The allowed flavours of the incoming quarks */ int _maxflavour; }; } #endif /* HERWIG_MEPP2ZH_H */ diff --git a/MatrixElement/Hadron/MEPP2ZJet.h b/MatrixElement/Hadron/MEPP2ZJet.h --- a/MatrixElement/Hadron/MEPP2ZJet.h +++ b/MatrixElement/Hadron/MEPP2ZJet.h @@ -1,329 +1,323 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2ZJet_H #define HERWIG_MEPP2ZJet_H // // This is the declaration of the MEPP2ZJet class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2ZJet class implements the matrix element for the production * of a Z boson + a jet including the decay of the Z including \f$Z/\gamma\f$ * interference * * @see \ref MEPP2ZJetInterfaces "The interfaces" * defined for MEPP2ZJet. */ class MEPP2ZJet: public HwMEBase { public: /** * The default constructor. */ MEPP2ZJet(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix elements for the different subprocesses */ //@{ /** * Matrix element for \f$q\bar{q}\to Z/\gamma g\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param gout Polarization vectors for the outgoing gluon * @param lm Spinors for outgoing lepton * @param lp Spinors for outgoing antilepton * @param me Whether or not to calculate the matrix element for spin correlations **/ InvEnergy2 qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain, vector<VectorWaveFunction> & gout, vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, bool me=false) const; /** * Matrix element for \f$qg\to Z/\gamma q\f$. * @param fin Spinors for incoming quark * @param gin Polarization vectors for the incoming gluon * @param fout Spinors for outgoing quark * @param lm Spinors for outgoing lepton * @param lp Spinors for outgoing antilepton * @param me Whether or not to calculate the matrix element for spin correlations **/ InvEnergy2 qgME(vector<SpinorWaveFunction> & fin,vector<VectorWaveFunction> & gin, vector<SpinorBarWaveFunction> & fout, vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, bool me=false) const; /** * Matrix element for \f$\bar{q}g\to Z/\gamma\bar{q}\f$. * @param fin Spinors for incoming antiquark * @param gin Polarization vectors for the incoming gluon * @param fout Spinors for outgoing antiquark * @param lm Spinors for outgoing lepton * @param lp Spinors for outgoing antilepton * @param me Whether or not to calculate the matrix element for spin correlations **/ InvEnergy2 qbargME(vector<SpinorBarWaveFunction> & fin, vector<VectorWaveFunction> & gin, vector<SpinorWaveFunction> & fout, vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp, bool me=false) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2ZJet> initMEPP2ZJet; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2ZJet & operator=(const MEPP2ZJet &); private: /** * Vertices for the helicity amplitude calculation */ //@{ /** * Pointer to the Z vertex */ AbstractFFVVertexPtr _theFFZVertex; /** * Pointer to the photon vertex */ AbstractFFVVertexPtr _theFFPVertex; /** * Pointer to the \f$qqg\f$ vertex */ AbstractFFVVertexPtr _theQQGVertex; //@} /** * @name Pointers to the \f$Z^0\f$ and \f$\gamma\f$ ParticleData objects */ //@{ /** * Pointer to the Z ParticleData object */ tcPDPtr _z0; /** * Pointer to the photon ParticleData object */ tcPDPtr _gamma; //@} /** * @name Switches to control the particles in the hard process */ //@{ /** * Subprocesses to include */ unsigned int _process; /** * Allowed flavours for the incoming quarks */ int _maxflavour; /** * Control over which Z decay modes to include */ int _zdec; /** * Which terms to include */ unsigned int _gammaZ; /** * Option for the treatment of the W off-shell effects */ unsigned int _widthopt; //@} /** * Probability of selecting \f$1/s^2\f$ for the jacobian * transformation of the boson mass */ double _pprob; /** * Matrix element for spin correlations */ mutable ProductionMatrixElement _me; /** * Storage of the scale to avoid the need to recalculate */ Energy2 _scale; /** * Storage of the off-shell Z mass to avoid the need to recalculate */ Energy2 _mz2; }; } #endif /* HERWIG_MEPP2ZJet_H */ diff --git a/MatrixElement/Hadron/MEQCD2to2.h b/MatrixElement/Hadron/MEQCD2to2.h --- a/MatrixElement/Hadron/MEQCD2to2.h +++ b/MatrixElement/Hadron/MEQCD2to2.h @@ -1,370 +1,364 @@ // -*- C++ -*- // // MEQCD2to2.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_MEQCD2to2_H #define HERWIG_MEQCD2to2_H // // This is the declaration of the MEQCD2to2 class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEQCD2to2 class provides the matrix elements for \f$2\to2\f$ * QCD scattering processes in hadron-hadron collisions. * * @see \ref MEQCD2to2Interfaces "The interfaces" * defined for MEQCD2to2. */ class MEQCD2to2: public HwMEBase { public: /** * The default constructor. */ MEQCD2to2(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Members to calculate the matrix elements */ //@{ /** * Matrix element for \f$gg\to gg\f$. * @param g1 The wavefunctions for the first incoming gluon * @param g2 The wavefunctions for the second incoming gluon * @param g3 The wavefunctions for the first outgoing gluon * @param g4 The wavefunctions for the second outgoing gluon * @param flow The colour flow */ double gg2ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, vector<VectorWaveFunction> &g3,vector<VectorWaveFunction> &g4, unsigned int flow) const; /** * Matrix element for \f$gg\to q\bar{q}\f$ * @param g1 The wavefunctions for the first incoming gluon * @param g2 The wavefunctions for the second incoming gluon * @param q The wavefunction for the outgoing quark * @param qbar The wavefunction for the outgoing antiquark * @param flow The colour flow */ double gg2qqbarME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar, unsigned int flow) const; /** * Matrix element for \f$q\bar{q}\to gg\f$ * @param q The wavefunction for the incoming quark * @param qbar The wavefunction for the incoming antiquark * @param g1 The wavefunctions for the first outgoing gluon * @param g2 The wavefunctions for the second outgoing gluon * @param flow The colour flow */ double qqbar2ggME(vector<SpinorWaveFunction> & q,vector<SpinorBarWaveFunction> & qbar, vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, unsigned int flow) const; /** * Matrix element for \f$qg\to qg\f$ * @param qin The wavefunction for the incoming quark * @param g2 The wavefunction for the incoming gluon * @param qout The wavefunction for the outgoing quark * @param g4 The wavefunction for the outgoing gluon * @param flow The colour flow */ double qg2qgME(vector<SpinorWaveFunction> & qin,vector<VectorWaveFunction> &g2, vector<SpinorBarWaveFunction> & qout,vector<VectorWaveFunction> &g4, unsigned int flow) const; /** * Matrix elements for \f$\bar{q}g\to \bar{q}g\f$. * @param qin The wavefunction for the incoming antiquark * @param g2 The wavefunction for the incoming gluon * @param qout The wavefunction for the outgoing antiquark * @param g4 The wavefunction for the outgoing gluon * @param flow The colour flow */ double qbarg2qbargME(vector<SpinorBarWaveFunction> & qin, vector<VectorWaveFunction> &g2, vector<SpinorWaveFunction> & qout,vector<VectorWaveFunction> &g4, unsigned int flow) const; /** * Matrix element for \f$qq\to qq\f$ * @param q1 The wavefunction for the first incoming quark * @param q2 The wavefunction for the second incoming quark * @param q3 The wavefunction for the first outgoing quark * @param q4 The wavefunction for the second outgoing quark * @param flow The colour flow */ double qq2qqME(vector<SpinorWaveFunction> & q1, vector<SpinorWaveFunction> & q2, vector<SpinorBarWaveFunction> & q3, vector<SpinorBarWaveFunction> & q4, unsigned int flow) const; /** * Matrix element for \f$\bar{q}\bar{q}\to \bar{q}\bar{q}\f$ * @param q1 The wavefunction for the first incoming antiquark * @param q2 The wavefunction for the second incoming antiquark * @param q3 The wavefunction for the first outgoing antiquark * @param q4 The wavefunction for the second outgoing antiquark * @param flow The colour flow */ double qbarqbar2qbarqbarME(vector<SpinorBarWaveFunction> & q1, vector<SpinorBarWaveFunction> & q2, vector<SpinorWaveFunction> & q3, vector<SpinorWaveFunction> & q4, unsigned int flow) const; /** * Matrix element for \f$q\bar{q}\to q\bar{q}\f$ * @param q1 The wavefunction for the incoming quark * @param q2 The wavefunction for the incoming antiquark * @param q3 The wavefunction for the outgoing quark * @param q4 The wavefunction for the outgoing antiquark * @param flow The colour flow */ double qqbar2qqbarME(vector<SpinorWaveFunction> & q1, vector<SpinorBarWaveFunction> & q2, vector<SpinorBarWaveFunction> & q3, vector<SpinorWaveFunction> & q4, unsigned int flow) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEQCD2to2> initMEQCD2to2; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEQCD2to2 & operator=(const MEQCD2to2 &); private: /** * Vertices needed to compute the diagrams */ //@{ /** * \f$gggg\f$ vertex */ AbstractVVVVVertexPtr _ggggvertex; /** * \f$ggg\f$ vertex */ AbstractVVVVertexPtr _gggvertex; /** * \f$q\bar{q}g\f$ vertex */ AbstractFFVVertexPtr _qqgvertex; //@} /** * Maximum numbere of quark flavours to include */ unsigned int _maxflavour; /** * Processes to include */ unsigned int _process; /** * Colour flow */ mutable unsigned int _flow; /** * Diagram */ mutable unsigned int _diagram; /** * Matrix element */ mutable ProductionMatrixElement _me; /** * ParticleData objects of the partons */ //@{ /** * The gluon */ PDPtr _gluon; /** * the quarks */ vector<PDPtr> _quark; /** * the antiquarks */ vector<PDPtr> _antiquark; //@} }; } #endif /* HERWIG_MEQCD2to2_H */ diff --git a/MatrixElement/Hadron/MEQCD2to2Fast.h b/MatrixElement/Hadron/MEQCD2to2Fast.h --- a/MatrixElement/Hadron/MEQCD2to2Fast.h +++ b/MatrixElement/Hadron/MEQCD2to2Fast.h @@ -1,347 +1,341 @@ // -*- C++ -*- // // MEQCD2to2Fast.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_MEQCD2to2Fast_H #define HERWIG_MEQCD2to2Fast_H // // This is the declaration of the MEQCD2to2Fast class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Repository/UseRandom.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEQCD2to2Fast class implements the matrix elements for * QCD \f$2\to2\f$ scattering processes using hard coded formulae and * as such can not include spin correlations. It is designed to be a faster * replacement for MEQCD2to2 for use in the underlying event. * * @see \ref MEQCD2to2FastInterfaces "The interfaces" * defined for MEQCD2to2Fast. */ class MEQCD2to2Fast: public HwMEBase { public: /** * The default constructor. */ MEQCD2to2Fast() :_maxflavour(5),_process(0),_strictFlavourScheme(false) { massOption(vector<unsigned int>(2,0)); } /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) 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: /** * Members to calculate the matrix elements */ //@{ /** * Matrix element for \f$gg\to gg\f$. */ double gg2ggME() const { Energy2 u(uHat()),t(tHat()),s(sHat()); double output = 9./4.*(3.-t*u/s/s-s*u/t/t-s*t/u/u); double flow[3]={(1.-u*t/s/s-s*t/u/u+t*t/s/u), (1.-t*u/s/s-s*u/t/t+u*u/s/t), (1.-t*s/u/u-u*s/t/t+s*s/u/t)}; _flow = 1+UseRandom::rnd3(flow[0],flow[1],flow[2]); double diag[3]={(sqr(u)+sqr(t))/sqr(s), (sqr(s)+sqr(u))/sqr(t), (sqr(s)+sqr(t))/sqr(u)}; if(_flow==1) diag[1]=0; else if(_flow==2) diag[2]=0; else if(_flow==3) diag[0]=0; _diagram=1+UseRandom::rnd3(diag[0],diag[1],diag[2]); return output; } /** * Matrix element for \f$gg\to q\bar{q}\f$ */ double gg2qqbarME() const { Energy2 u(uHat()),t(tHat()),s(sHat()); Energy4 u2(sqr(u)),t2(sqr(t)),s2(sqr(s)); double output =(1./6./u/t-3./8./s2)*(t2+u2); double flow[2]={u2/(u2+t2),t2/(u2+t2)}; _flow = 1+UseRandom::rnd2(flow[0],flow[1]); _diagram=3+_flow; return output; } /** * Matrix element for \f$q\bar{q}\to gg\f$ */ double qqbar2ggME() const { Energy2 u(uHat()),t(tHat()),s(sHat()); Energy4 s2(sqr(s)),u2(sqr(u)),t2(sqr(t)); double output = 0.5*(32./27./u/t-8./3./s2)*(t2+u2); double flow[2] = {u2/(u2+t2),t2/(t2+u2)}; _flow=1+UseRandom::rnd2(flow[0],flow[1]); _diagram=6+_flow; return output; } /** * Matrix element for \f$qg\to qg\f$ */ double qg2qgME() const { Energy2 u(uHat()),t(tHat()),s(sHat()); Energy4 s2(sqr(s)),u2(sqr(u)),t2(sqr(t)); double output = (-4./9./s/u+1./t2)*(s2+u2); double flow[2]={u2/(s2+u2),s2/(s2+u2)}; _flow=1+UseRandom::rnd2(flow[0],flow[1]); _diagram=9+_flow; return output; } /** * Matrix elements for \f$\bar{q}g\to \bar{q}g\f$. */ double qbarg2qbargME() const { // scale Energy2 u(uHat()),t(tHat()),s(sHat()); Energy4 u2(sqr(u)),s2(sqr(s)); // t2(sqr(t)) double flow[2]={u2/(s2+u2),s2/(s2+u2)}; _flow=1+UseRandom::rnd2(flow[0],flow[1]); _diagram=12+_flow; return (-4./9./s/u+1./t/t)*(s*s+u*u); } /** * Matrix element for \f$qq\to qq\f$ */ double qq2qqME() const { Energy2 u(uHat()),t(tHat()); Energy4 s2(sqr(sHat())),u2(sqr(u)),t2(sqr(t)); double output; if(mePartonData()[0]->id()==mePartonData()[1]->id()) { output = 0.5*(4./9.*((s2+u2)/t2+(s2+t2)/u2) -8./27.*s2/u/t); double flow[2]={(s2+u2)/t2,(s2+t2)/u2}; _flow=1+UseRandom::rnd2(flow[0],flow[1]); } else { output = 4./9.*(s2+u2)/t2; _flow=2; } _diagram = 15+_flow; return output; } /** * Matrix element for \f$\bar{q}\bar{q}\to \bar{q}\bar{q}\f$ */ double qbarqbar2qbarqbarME() const { Energy2 u(uHat()),t(tHat()); Energy4 u2(sqr(u)),t2(sqr(t)),s2(sqr(sHat())); double output; if(mePartonData()[0]->id()==mePartonData()[1]->id()) { output = 0.5*(4./9.*((s2+u2)/t2+(s2+t2)/u2) -8./27.*s2/u/t); double flow[2]={(s2+u2)/t2,(s2+t2)/u2}; _flow=1+UseRandom::rnd2(flow[0],flow[1]); } else { output = 4./9.*(s2+u2)/t2; _flow = 2; } _diagram = 17+_flow; // final part of colour and spin factors return output; } /** * Matrix element for \f$q\bar{q}\to q\bar{q}\f$ */ double qqbar2qqbarME() const { // type of process bool diagon[2]={mePartonData()[0]->id()== -mePartonData()[1]->id(), mePartonData()[0]->id()== mePartonData()[2]->id()}; // scale Energy2 u(uHat()),t(tHat()),s(sHat()); Energy4 s2(sqr(s)),t2(sqr(t)),u2(sqr(u)); double output; if(diagon[0]&&diagon[1]) { output= (4./9.*((s2+u2)/t2+(u2+t2)/s2) -8./27.*u2/s/t); double flow[2]={(t2+u2)/s2,(s2+u2)/t2}; _flow=1+UseRandom::rnd2(flow[0],flow[1]); } else if(diagon[0]) { output = (4./9.*(t2+u2)/s2); _flow=1; } else { output = (4./9.*(s2+u2)/t2); _flow=2; } _diagram=19+_flow; return output; } //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} protected: /** * 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEQCD2to2Fast> initMEQCD2to2Fast; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEQCD2to2Fast & operator=(const MEQCD2to2Fast &); private: /** * Maximum numbere of quark flavours to include */ unsigned int _maxflavour; /** * Processes to include */ unsigned int _process; /** * Colour flow */ mutable unsigned int _flow; /** * Diagram */ mutable unsigned int _diagram; /** * Exclude contributions with massive incominbg quarks */ bool _strictFlavourScheme; }; } #endif /* HERWIG_MEQCD2to2Fast_H */ diff --git a/MatrixElement/Hadron/MEqq2W2ff.h b/MatrixElement/Hadron/MEqq2W2ff.h --- a/MatrixElement/Hadron/MEqq2W2ff.h +++ b/MatrixElement/Hadron/MEqq2W2ff.h @@ -1,237 +1,231 @@ // -*- C++ -*- // // MEqq2W2ff.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_MEqq2W2ff_H #define HERWIG_MEqq2W2ff_H // // This is the declaration of the MEqq2W2ff class. // #include "Herwig/MatrixElement/DrellYanBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEqq2W2ff class implements the matrix element for \f$q\bar{q'}\to W^\pm\f$ * including the decay of the \f$W^\pm\f$ to Standard Model fermions. * * @see \ref MEqq2W2ffInterfaces "The interfaces" * defined for MEqq2W2ff. */ class MEqq2W2ff: public DrellYanBase { public: /** * The default constructor. */ MEqq2W2ff(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param fout Spinors for incoming quark * @param aout Spinors for incoming antiquark * @param me Whether or not to calculate the matrix element for spin correlations */ double qqbarME(vector<SpinorWaveFunction> & fin , vector<SpinorBarWaveFunction> & ain , vector<SpinorBarWaveFunction> & fout, vector<SpinorWaveFunction> & aout, bool me) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEqq2W2ff> initMEqq2W2ff; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEqq2W2ff & operator=(const MEqq2W2ff &); private: /** * Pointer to the W vertex */ AbstractFFVVertexPtr _theFFWVertex; /** * Pointers to the intermediates resonances */ //@{ /** * Pointer to the \f$W^+\f$ */ tcPDPtr _wp; /** * Pointer to the \f$W^-\f$ */ tcPDPtr _wm; //@} /** * Switches to control the particles in the hard process */ //@{ /** * The allowed flavours of the incoming quarks */ unsigned int _maxflavour; /** * Which intermediate \f$W^\pm\f$ bosons to include */ unsigned int _plusminus; /** * Which decay products of the \f$W^\pm\f$ to include */ unsigned int _process; //@} /** * Matrix element for spin correlations */ ProductionMatrixElement _me; }; } #endif /* HERWIG_MEqq2W2ff_H */ diff --git a/MatrixElement/Hadron/MEqq2gZ2ff.h b/MatrixElement/Hadron/MEqq2gZ2ff.h --- a/MatrixElement/Hadron/MEqq2gZ2ff.h +++ b/MatrixElement/Hadron/MEqq2gZ2ff.h @@ -1,258 +1,252 @@ // -*- C++ -*- // // MEqq2gZ2ff.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_MEqq2gZ2ff_H #define HERWIG_MEqq2gZ2ff_H // // This is the declaration of the MEqq2gZ2ff class. // #include "Herwig/MatrixElement/DrellYanBase.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEqq2gZ2ff class implements the products of Standard Model * fermion antifermion pairs via the \f$Z^0\f$ resonance including * photon interference terms. * * @see \ref MEqq2gZ2ffInterfaces "The interfaces" * defined for MEqq2gZ2ff. */ class MEqq2gZ2ff: public DrellYanBase { public: /** * The default constructor. */ MEqq2gZ2ff(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$. * @param fin Spinors for incoming quark * @param ain Spinors for incoming antiquark * @param fout Spinors for incoming quark * @param aout Spinors for incoming antiquark * @param me Whether or not to calculate the matrix element for spin correlations */ double qqbarME(vector<SpinorWaveFunction> & fin , vector<SpinorBarWaveFunction> & ain , vector<SpinorBarWaveFunction> & fout, vector<SpinorWaveFunction> & aout, bool me) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEqq2gZ2ff> initMEqq2gZ2ff; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEqq2gZ2ff & operator=(const MEqq2gZ2ff &); private: /** * Pointer to the vertices for the helicity calculations */ //@{ /** * Pointer to the Z vertex */ AbstractFFVVertexPtr _theFFZVertex; /** * Pointer to the photon vertex */ AbstractFFVVertexPtr _theFFPVertex; //@} /** * Pointers to the intermediate resonances */ //@{ /** * Pointer to the Z ParticleData object */ tcPDPtr _z0; /** * Pointer to the photon ParticleData object */ tcPDPtr _gamma; //@} /** * Switches to control the particles in the hard process */ //@{ /** * Minimum allowed flavour for the incoming quarks */ int _minflavour; /** * Maximum allowed flavour for the incoming quarks */ int _maxflavour; /** * Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one */ unsigned int _gammaZ; /** * Which processes to include */ int _process; //@} /** * Matrix element for spin correlations */ ProductionMatrixElement _me; /** * Whether of not to construct the vertex for spin correlations */ bool spinCorrelations_; }; } #endif /* HERWIG_MEqq2gZ2ff_H */ diff --git a/MatrixElement/HardVertex.h b/MatrixElement/HardVertex.h --- a/MatrixElement/HardVertex.h +++ b/MatrixElement/HardVertex.h @@ -1,104 +1,99 @@ // -*- C++ -*- // // HardVertex.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_HardVertex_H #define HERWIG_HardVertex_H // // This is the declaration of the HardVertex class. #include "ThePEG/EventRecord/HelicityVertex.h" #include "ProductionMatrixElement.h" #include "HardVertex.fh" // #include "HardVertex.xh" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * \author Peter Richardson * * The HardVertex class is designed to implement the vertex for a * hard interaction for the Herwig spin correlation algorithm. * It inherits from the HelicityVertex class of ThePEG and implements * the methods to calculate the \f$\rho\f$ and \f$D\f$ matrices. * * The ProductionMatrixElement class is used to store the matrix element * and this class performs the calculations of the matrices. * * @see HelicityVertex * @see ProductionMatrixElement */ class HardVertex: public HelicityVertex { public: /** * Access to the matrix element */ //@{ /** * Get the matrix element */ const ProductionMatrixElement & ME() const { return _matrixelement; } /** * Set the matrix element */ void ME(const ProductionMatrixElement & in) const { _matrixelement.reset(in); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Method to calculate the \f$\rho\f$ matrix for one of the outgoing particles * @param iout The outgoing particle we are calculating the \f$\rho\f$ matrix for. */ virtual RhoDMatrix getRhoMatrix(int iout,bool) const; /** * Method to calculate the \f$D\f$ matrix for an incoming particle. * @param in The incoming particle we are calculating the \f$D\f$ matrix for. */ virtual RhoDMatrix getDMatrix(int in) const; private: /** - * Describe a concrete class without persistent data. - */ - static NoPIOClassDescription<HardVertex> initHardVertex; - - /** * Private and non-existent assignment operator. */ HardVertex & operator=(const HardVertex &); private: /** * Storage of the matrix element. */ ProductionMatrixElement _matrixelement; }; } #endif /* HERWIG_HardVertex_H */ diff --git a/MatrixElement/HwMEBase.h b/MatrixElement/HwMEBase.h --- a/MatrixElement/HwMEBase.h +++ b/MatrixElement/HwMEBase.h @@ -1,292 +1,286 @@ // -*- C++ -*- #ifndef HERWIG_HwMEBase_H #define HERWIG_HwMEBase_H // // This is the declaration of the HwMEBase class. // #include "ThePEG/MatrixElement/MEBase.h" #include "Herwig/Shower/Core/Base/ShowerParticle.fh" #include "Herwig/Shower/Core/Base/ShowerProgenitor.fh" #include "Herwig/Shower/RealEmissionProcess.fh" #include "Herwig/Shower/Core/ShowerInteraction.h" #include "ThePEG/PDF/BeamParticleData.h" #include "HwMEBase.fh" namespace Herwig { struct Branching; using namespace ThePEG; typedef Ptr<BeamParticleData>::transient_const_pointer tcBeamPtr; /** * The HwMEBase class serves a number of purposes * - it implements the phase space for \f$2\to2\f$ scattering processes * - it provides virtual members for the implementation of hard radiation * - it gives us greater control over the masses of the outgoing * particles so that they can be * - set massless where required by gauge invariance * - have their off-shell masses generated using the sophisticated approaches * available in Herwig. * * @see \ref HwMEBaseInterfaces "The interfaces" * defined for HwMEBase. */ class HwMEBase: public MEBase { public: /** * Default constructor. */ HwMEBase() : lastTHat_(ZERO), lastUHat_(ZERO), lastPhi_(0.0), rescaleOption_(1) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given 'nDim()' uniform * random numbers in the interval ]0,1[. To help the phase space * generator, the 'dSigHatDR()' should be a smooth function of these * numbers, although this is not strictly necessary. Return * false if the chosen points failed the kinematical cuts. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. */ virtual void setKinematics(); //@} /** * Virtual members to be overridden by inheriting classes * which implement hard corrections */ //@{ /** * Type of POWHEG correction */ enum POWHEGType {No, ISR, FSR, Both}; /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return No;} /** * Has an old fashioned ME correction */ virtual bool hasMECorrection() {return false;} /** * 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); /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction); //@} 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 Access cached values in of the last set phase space point. */ //@{ /** * Return the \f$\hat{t}\f$ of the last set phase space point. */ Energy2 tHat() const { return lastTHat_; } /** * Return the \f$\hat{u}\f$ of the last set phase space point. */ Energy2 uHat() const { return lastUHat_; } /** * Return the azimuth angle of the last set phase space point. */ double phi() const { return lastPhi_; } //@} /** @name Set the cached values in of the last set phase space point. */ //@{ /** * Set the \f$\hat{t}\f$ of the last set phase space point. */ void tHat(Energy2 e2) { lastTHat_ = e2; } /** * Set the \f$\hat{u}\f$ of the last set phase space point. */ void uHat(Energy2 e2) { lastUHat_ = e2; } /** * Set the azimuth angle of the last set phase space point. */ void phi(double phi) { lastPhi_ = phi; } //@} /** * Set the treatment of the outgoing masses * @param iopt The option for the treatment of the mass */ void massOption(vector<unsigned int> iopt) { massOption_ = iopt; } /** * Rescaled momenta for the helicity ME */ //@{ /** * Set the treatment of the rescaling of the momenta for * the matrix element calculation * @param iopt The rescaling option */ void rescalingOption(unsigned int iopt) { rescaleOption_=iopt; } /** * rescale the momenta for the computation of the helicity matrix element */ bool rescaleMomenta(const vector<Lorentz5Momentum> &, const cPDVector &); /** * Access to the rescaled momenta */ const vector<Lorentz5Momentum> & rescaledMomenta() const { return rescaledMomenta_; } //@} /** * Generate the masses of the particles */ bool generateMasses(vector<Energy> & masses, double & mjac, const double *r); /** * Used internally by generateKinematics, after calculating the * limits on cos(theta). */ virtual double getCosTheta(double cthmin, double cthmax, const double r); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class without persistent data. - */ - static AbstractClassDescription<HwMEBase> initHwMEBase; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ HwMEBase & operator=(const HwMEBase &); private: /** * Option for the treatment of the particle masses */ vector<unsigned int> massOption_; /** * The \f$\hat{t}\f$ of the last set phase space point. */ Energy2 lastTHat_; /** * The \f$\hat{u}\f$ of the last set phase space point. */ Energy2 lastUHat_; /** * The azimuth angle of the last set phase space point. */ double lastPhi_; /** * Produced to produce rescaled momenta */ unsigned int rescaleOption_; /** * Rescaled momenta for use in ME calculations */ vector<Lorentz5Momentum> rescaledMomenta_; }; } #endif /* HERWIG_HwMEBase_H */ diff --git a/MatrixElement/Lepton/MEee2Higgs2SM.h b/MatrixElement/Lepton/MEee2Higgs2SM.h --- a/MatrixElement/Lepton/MEee2Higgs2SM.h +++ b/MatrixElement/Lepton/MEee2Higgs2SM.h @@ -1,242 +1,236 @@ // -*- C++ -*- // // MEee2Higgs2SM.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_MEee2Higgs2SM_H #define HERWIG_MEee2Higgs2SM_H // // This is the declaration of the MEee2Higgs2SM class. // #include "ThePEG/MatrixElement/ME2to2Base.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" namespace Herwig { using namespace ThePEG; /** * The MEee2Higgs2SM class implements the production of an \f$s\f$-channel * Higgs in \f$e^+e^-\f$ collisions in order to allow easy tests of Higgs * decays. It should not be used for physics studies. * * @see \ref MEee2Higgs2SMInterfaces "The interfaces" * defined for MEee2Higgs2SM. */ class MEee2Higgs2SM: public ME2to2Base { public: /** * The default constructor. */ inline MEee2Higgs2SM() : allowed_(0) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * set up the spin correlations */ virtual void constructVertex(tSubProPtr sub); //@} 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. */ inline 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. */ inline 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(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** * The matrix element * @param fin The incoming spinor wavefunction * @param ain The incoming spinorbar wavefunction * @param fout The outgoing spinor bar wavefunction * @param aout The outgoing spinor wavefunction * @param me The spin averaged matrix element */ ProductionMatrixElement HelicityME(vector<SpinorWaveFunction> fin, vector<SpinorBarWaveFunction> ain, vector<SpinorBarWaveFunction> fout, vector<SpinorWaveFunction> aout,double& me) const; /** * \f$H\to gg\f$ matrix element * @param fin The incoming spinor wavefunction * @param ain The incoming spinorbar wavefunction * @param g1 Outgoing gluon wavefunction * @param g2 Outgoing gluon wavefunction * @param me The spin averaged matrix element */ ProductionMatrixElement ggME(vector<SpinorWaveFunction> fin, vector<SpinorBarWaveFunction> ain, vector<VectorWaveFunction> g1, vector<VectorWaveFunction> g2, double & me) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEee2Higgs2SM> initMEee2Higgs2SM; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2Higgs2SM & operator=(const MEee2Higgs2SM &); private: /** * Pointer to the Higgs fermion-antifermion vertex */ AbstractFFSVertexPtr FFHVertex_; /** * Pointer to Higgs-gluon-gluon vertex */ AbstractVVSVertexPtr HGGVertex_; /** * Allowed outgoing particles */ int allowed_; /** * Pointer to the Higgs ParticleData object */ PDPtr h0_; }; } #endif /* HERWIG_MEee2Higgs2SM_H */ diff --git a/MatrixElement/Lepton/MEee2HiggsVBF.h b/MatrixElement/Lepton/MEee2HiggsVBF.h --- a/MatrixElement/Lepton/MEee2HiggsVBF.h +++ b/MatrixElement/Lepton/MEee2HiggsVBF.h @@ -1,89 +1,83 @@ // -*- C++ -*- #ifndef HERWIG_MEee2HiggsVBF_H #define HERWIG_MEee2HiggsVBF_H // // This is the declaration of the MEee2HiggsVBF class. // #include "Herwig/MatrixElement/MEfftoffH.h" namespace Herwig { using namespace ThePEG; /** * The MEee2HiggsVBF class * * @see \ref MEee2HiggsVBFInterfaces "The interfaces" * defined for MEee2HiggsVBF. */ class MEee2HiggsVBF: public MEfftoffH { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; //@} public: /** * 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 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(); //@} 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an concrete class without persistent data. - */ - static NoPIOClassDescription<MEee2HiggsVBF> initMEee2HiggsVBF; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2HiggsVBF & operator=(const MEee2HiggsVBF &); }; } #endif /* HERWIG_MEee2HiggsVBF_H */ diff --git a/MatrixElement/Lepton/MEee2VV.h b/MatrixElement/Lepton/MEee2VV.h --- a/MatrixElement/Lepton/MEee2VV.h +++ b/MatrixElement/Lepton/MEee2VV.h @@ -1,239 +1,233 @@ // -*- C++ -*- #ifndef HERWIG_MEee2VV_H #define HERWIG_MEee2VV_H // // This is the declaration of the MEee2VV class. // #include "Herwig/MatrixElement/HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" namespace Herwig { using namespace ThePEG; /** * The MEee2VV class implements the matrix elements for * \f$e^+e^-\to W^+W^-/|^0Z^0\f$. * * @see \ref MEee2VVInterfaces "The interfaces" * defined for MEee2VV. */ class MEee2VV: public HwMEBase { public: /** * The default constructor. */ MEee2VV(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Used internally by generateKinematics, after calculating the * limits on cos(theta). */ virtual double getCosTheta(double cthmin, double cthmax, const double r); /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$f\bar{f}\to W^+W^-\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 Polarization vector for the 1st outgoing boson * @param v2 Polarization vector for the 2nd outgoing boson */ double WWME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2) const; /** * Matrix element for \f$f\bar{f}\to Z^0Z^0\f$. * @param f1 Spinors for the incoming fermion * @param a1 Spinors for the incoming antifermion * @param v1 Polarization vector for the 1st outgoing boson * @param v2 Polarization vector for the 2nd outgoing boson */ double ZZME(vector<SpinorWaveFunction> & f1, vector<SpinorBarWaveFunction> & a1, vector<VectorWaveFunction> & v1, vector<VectorWaveFunction> & v2) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEee2VV> initMEee2VV; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2VV & operator=(const MEee2VV &); private: /** * Vertices */ //@{ /** * FFPVertex */ AbstractFFVVertexPtr FFPvertex_; /** * FFWVertex */ AbstractFFVVertexPtr FFWvertex_; /** * FFZVertex */ AbstractFFVVertexPtr FFZvertex_; /** * WWW Vertex */ AbstractVVVVertexPtr WWWvertex_; //@} /** * Processes */ unsigned int process_; /** * Treatment of the the W and Z masses */ unsigned int massOption_; /** * The matrix element */ mutable ProductionMatrixElement me_; }; } #endif /* HERWIG_MEee2VV_H */ diff --git a/MatrixElement/Lepton/MEee2VectorMeson.h b/MatrixElement/Lepton/MEee2VectorMeson.h --- a/MatrixElement/Lepton/MEee2VectorMeson.h +++ b/MatrixElement/Lepton/MEee2VectorMeson.h @@ -1,242 +1,236 @@ // -*- C++ -*- // // MEee2VectorMeson.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 THEPEG_MEee2VectorMeson_H #define THEPEG_MEee2VectorMeson_H // // This is the declaration of the MEee2VectorMeson class. // #include "ThePEG/MatrixElement/MEBase.h" #include "Herwig/PDT/GenericMassGenerator.fh" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" namespace Herwig { using namespace ThePEG; using Helicity::SpinorWaveFunction; using Helicity::SpinorBarWaveFunction; using Helicity::VectorWaveFunction; /** * The MEee2VectorMeson class is designed to produce neutral vector mesons * in \f$e^+e^-\f$ collisions and is primarily intended to test the hadronic * decay package. * * @see \ref MEee2VectorMesonInterfaces "The interfaces" * defined for MEee2VectorMeson. */ class MEee2VectorMeson: public MEBase { public: /** * The default constructor. */ inline MEee2VectorMeson() :_coupling(0.0012), _lineshape(false) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Set up the spin correlations */ virtual void constructVertex(tSubProPtr sub); //@} 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. */ inline 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. */ inline 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(); //@} private: /** * Member to return the helicity amplitudes */ ProductionMatrixElement HelicityME(vector<SpinorWaveFunction> fin, vector<SpinorBarWaveFunction> ain, vector<VectorWaveFunction> vout,double& me) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEee2VectorMeson> initMEee2VectorMeson; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2VectorMeson & operator=(const MEee2VectorMeson &); private: /** * The vector meson being produced */ PDPtr _vector; /** * The coupling */ double _coupling; /** * Use the mass generator for the line shape */ bool _lineshape; /** * Pointer to the mass generator for the Higgs */ GenericMassGeneratorPtr _massgen; }; } #endif /* THEPEG_MEee2VectorMeson_H */ diff --git a/MatrixElement/Lepton/MEee2ZH.h b/MatrixElement/Lepton/MEee2ZH.h --- a/MatrixElement/Lepton/MEee2ZH.h +++ b/MatrixElement/Lepton/MEee2ZH.h @@ -1,99 +1,93 @@ // -*- C++ -*- #ifndef HERWIG_MEee2ZH_H #define HERWIG_MEee2ZH_H // // This is the declaration of the MEee2ZH class. // #include "Herwig/MatrixElement/MEfftoVH.h" namespace Herwig { using namespace ThePEG; /** * The MEee2ZH class implements the matrix element * for \f$e^+e^-\to Z^0h^0\f$. * * @see \ref MEee2ZHInterfaces "The interfaces" * defined for MEee2ZH. */ class MEee2ZH: public MEfftoVH { public: /** @name Virtual functions required by the MEfftoVH class. */ //@{ /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Has not got a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return No;} /** * Has not got an old fashioned ME correction */ virtual bool hasMECorrection() {return false;} public: /** * 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static NoPIOClassDescription<MEee2ZH> initMEee2ZH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2ZH & operator=(const MEee2ZH &); }; } #endif /* HERWIG_MEee2ZH_H */ diff --git a/MatrixElement/MEfftoVH.h b/MatrixElement/MEfftoVH.h --- a/MatrixElement/MEfftoVH.h +++ b/MatrixElement/MEfftoVH.h @@ -1,315 +1,309 @@ // -*- C++ -*- #ifndef HERWIG_MEfftoVH_H #define HERWIG_MEfftoVH_H // // This is the declaration of the MEfftoVH class. // #include "DrellYanBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "Herwig/PDT/GenericMassGenerator.h" namespace Herwig { using namespace ThePEG; /** * The MEfftoVH class is the base class for \f$f\bar{f}\to VH\f$ processes. * This base class handles the phase-space integration while * the inheriting classes implement the matrix element * * @see \ref MEfftoVHInterfaces "The interfaces" * defined for MEfftoVH. */ class MEfftoVH: public DrellYanBase { public: /** * The default constructor. */ MEfftoVH() : _shapeopt(2), _maxflavour(5), _mh(), _wh() {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$f\bar{f}\to V h^0\to f'\bar{f'} h^0\f$. * @param fin Spinors for incoming fermion * @param ain Spinors for incoming antifermion * @param fout Spinors for incoming fermion * @param aout Spinors for incoming antifermion * @param me Whether or not to calculate the matrix element for spin correlations */ double helicityME(vector<SpinorWaveFunction> & fin , vector<SpinorBarWaveFunction> & ain , vector<SpinorBarWaveFunction> & fout, vector<SpinorWaveFunction> & aout, bool me) const; /** * Access to the vector ParticleData objects */ //@{ /** * Access to the \f$W^+\f$ data */ PDPtr WPlus() const { return _wplus; } /** * Access to the \f$W^-\f$ data */ PDPtr WMinus() const { return _wminus; } /** * Access to the \f$Z^0\f$ data */ PDPtr Z0() const { return _z0; } /** * Access to the higgs data */ PDPtr higgs() const { return _higgs; } /** * Set the higgs data */ void higgs(PDPtr in) {_higgs =in;} //@} /** * Set the pointer to the vector-vector-Higgs vertex */ void setWWHVertex(AbstractVVSVertexPtr in) { _vertexWWH = in; } /** * Set the line shape treatment */ void lineShape(unsigned int in) {_shapeopt=in;} /** * Maximum flavour of the incoming partons */ unsigned int maxFlavour() const {return _maxflavour;} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<MEfftoVH> initMEfftoVH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEfftoVH & operator=(const MEfftoVH &); private: /** * Defines the Higgs resonance shape */ unsigned int _shapeopt; /** * The allowed flavours of the incoming quarks */ unsigned int _maxflavour; /** * The intermediate vector bosons */ //@{ /** * \f$W^+\f$ */ PDPtr _wplus; /** * \f$W^-\f$ */ PDPtr _wminus; /** * \f$Z^0\f$ */ PDPtr _z0; /** * The higgs bosom */ PDPtr _higgs; //@} /** * The vertices for the calculation of the matrix element */ //@{ /** * Vertex for fermion-fermion-W */ AbstractFFVVertexPtr _vertexFFW; /** * Vertex for fermion-fermion-Z */ AbstractFFVVertexPtr _vertexFFZ; /** * Vertex for vector-vector-Higgs */ AbstractVVSVertexPtr _vertexWWH; //@} /** * On-shell mass for the higgs */ Energy _mh; /** * On-shell width for the higgs */ Energy _wh; /** * The mass generator for the Higgs */ GenericMassGeneratorPtr _hmass; /** * Matrix element for spin correlations */ ProductionMatrixElement _me; }; } #endif /* HERWIG_MEfftoVH_H */ diff --git a/MatrixElement/MEfftoffH.h b/MatrixElement/MEfftoffH.h --- a/MatrixElement/MEfftoffH.h +++ b/MatrixElement/MEfftoffH.h @@ -1,355 +1,349 @@ // -*- C++ -*- #ifndef HERWIG_MEfftoffH_H #define HERWIG_MEfftoffH_H // // This is the declaration of the MEfftoffH class. // #include "HwMEBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "Herwig/MatrixElement/ProductionMatrixElement.h" #include "Herwig/PDT/GenericMassGenerator.h" namespace Herwig { using namespace ThePEG; /** * The MEfftoffH class is the base class for vector boson fusion type * processes in Herwig. * * @see \ref MEfftoffHInterfaces "The interfaces" * defined for MEfftoffH. */ class MEfftoffH: public HwMEBase { public: /** * The default constructor. */ MEfftoffH() : _shapeopt(2), _maxflavour(5), _minflavour(1), _process(0), _mh(), _wh(), _swap(false) {} /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EW}\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const; /** * Construct the vertex of spin correlations. */ virtual void constructVertex(tSubProPtr); //@} 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: /** * Matrix element for \f$ff\to h^0\to ff h^0\f$. * @param f1 Spinors for first incoming fermion * @param f2 Spinors for second incoming fermion * @param a1 Spinors for first outgoing fermion * @param a2 Spinors for second outgoing fermion * @param swap1 Whether or not to swap the order for the first fermion line * @param swap2 Whether or not to swap the order for the second fermion line * @param me Whether or not to calculate the matrix element for spin correlations */ double helicityME(vector<SpinorWaveFunction> & f1 , vector<SpinorWaveFunction> & f2 , vector<SpinorBarWaveFunction> & a1, vector<SpinorBarWaveFunction> & a2, bool swap1, bool swap2, bool me) const; /** * Access to the vector ParticleData objects */ //@{ /** * Access to the \f$W^+\f$ data */ PDPtr WPlus() const {return _wplus;} /** * Access to the \f$W^-\f$ data */ PDPtr WMinus() const {return _wminus;} /** * Access to the \f$Z^0\f$ data */ PDPtr Z0() const {return _z0;} /** * Access to the Higgs boson */ PDPtr higgs() const {return _higgs;} /** * Set the Higgs boson */ void higgs(PDPtr in) {_higgs=in;} //@} /** * Set the pointer to the vector-vector-Higgs vertex */ void setWWHVertex(AbstractVVSVertexPtr in) { _vertexWWH = in; } /** * Set the line shape treatment */ void lineShape(unsigned int in) {_shapeopt=in;} /** * Which process to generate */ unsigned int process() const {return _process;} /** * Whether momenta are swapped */ bool swapOrder() {return _swap;} /** * Which process to generate */ void process(unsigned int in) {_process = in;} /** * Maximum flavour of the incoming partons */ unsigned int maxFlavour() const {return _maxflavour;} /** * Minimum flavour of the incoming partons */ unsigned int minFlavour() const {return _minflavour;} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<MEfftoffH> initMEfftoffH; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEfftoffH & operator=(const MEfftoffH &); private: /** * Defines the Higgs resonance shape */ unsigned int _shapeopt; /** * Maximum flavour of the quarks involved */ unsigned int _maxflavour; /** * Minimum flavour of the quarks involved */ unsigned int _minflavour; /** * Whether to include $WW$ and $ZZ$ processes or both */ unsigned int _process; /** * The intermediate vector bosons */ //@{ /** * \f$W^+\f$ */ PDPtr _wplus; /** * \f$W^-\f$ */ PDPtr _wminus; /** * \f$Z^0\f$ */ PDPtr _z0; /** * Higgs boson */ PDPtr _higgs; //@} /** * The vertices for the calculation of the matrix element */ //@{ /** * Vertex for fermion-fermion-W */ AbstractFFVVertexPtr _vertexFFW; /** * Vertex for fermion-fermion-Z */ AbstractFFVVertexPtr _vertexFFZ; /** * Vertex for vector-vector-Higgs */ AbstractVVSVertexPtr _vertexWWH; //@} /** * On-shell mass for the higgs */ Energy _mh; /** * On-shell width for the higgs */ Energy _wh; /** * The mass generator for the Higgs */ GenericMassGeneratorPtr _hmass; /** * Matrix element for spin correlations */ mutable ProductionMatrixElement _me; /** * if order swaped */ bool _swap; }; } #endif /* HERWIG_MEfftoffH_H */ diff --git a/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h b/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h --- a/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h +++ b/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h @@ -1,155 +1,149 @@ // -*- C++ -*- // // FrixionePhotonSeparationCut.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_FrixionePhotonSeparationCut_H #define Herwig_FrixionePhotonSeparationCut_H // // This is the declaration of the FrixionePhotonSeparationCut class. // #include "ThePEG/Cuts/MultiCutBase.h" #include "ThePEG/PDT/MatcherBase.h" namespace Herwig { using namespace ThePEG; /** * \ingroup Matchbox * \author Michael Rauch * * \brief This class implements a cut on legoplot and rapidity separation * * @see \ref FrixionePhotonSeparationCutInterfaces "The interfaces" * defined for FrixionePhotonSeparationCut. */ class FrixionePhotonSeparationCut: public MultiCutBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ FrixionePhotonSeparationCut() : theDeltaZero(0.0), theExponentn(1.0), theEfficiency(0.0), theCutType(1) {} //@} public: /** @name Overridden virtual functions defined in the base class. */ //@{ /** * Return true if a pair of particles with type \a pitype and \a * pjtype and momenta \a pi and \a pj respectively passes the * cuts. \a inci and \a inj indicates if the corresponding particles * are incoming. */ virtual bool passCuts(tcCutsPtr, const tcPDVector & ptype, const vector<LorentzMomentum> & p) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; /** * Return the matcher for particles to isolate on. */ Ptr<MatcherBase>::tptr matcher() const { return theMatcher; } 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; /** 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; //@} private: /** * The maximal legoplot separation where partons are included in the criterium */ double theDeltaZero; /** * The exponent n of the algorithm */ double theExponentn; /** * The efficiency epsilon of the algorithm */ double theEfficiency; /** * The cut type of the algorithm */ int theCutType; /** * A matcher for particles to isolate on. */ Ptr<MatcherBase>::ptr theMatcher; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<FrixionePhotonSeparationCut> initFrixionePhotonSeparationCut; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ FrixionePhotonSeparationCut & operator=(const FrixionePhotonSeparationCut &); }; } #endif /* Herwig_FrixionePhotonSeparationCut_H */ diff --git a/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h b/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h --- a/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h +++ b/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h @@ -1,489 +1,483 @@ // -*- C++ -*- // // DipoleMPKOperator.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_DipoleMPKOperator_H #define HERWIG_DipoleMPKOperator_H // // This is the declaration of the DipoleMPKOperator class. // #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h" #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h" #include "ThePEG/PDF/PDF.h" namespace Herwig { using namespace ThePEG; /** * \ingroup Matchbox * \author Simon Platzer, Daniel Rauch, Christian Reuschle, * Johannes Bellm * * \brief DipoleMPKOperator implements the P+K * insertion operator for the massive case. * DipoleMPKOperator does not apply for dimen- * sional reduction. * */ class DipoleMPKOperator: public MatchboxInsertionOperator { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ DipoleMPKOperator(); /** * The destructor. */ virtual ~DipoleMPKOperator(); //@} public: /** * Set the XComb object steering the Born matrix * element this class represents virtual corrections to. */ virtual void setXComb(tStdXCombPtr xc); /** * Return the number of additional random variables * needed to calculate this virtual correction. * We treat all integrations on equal footing. */ virtual int nDimAdditional() const { return 1; } /** * Return a vector of PDG codes of the light flavours, * which are contained in the jet particle group. */ vector<int> NLightJetVec() const; /** * Return a vector of PDG codes of the heavy flavours, * which are contained in the jet particle group. */ vector<int> NHeavyJetVec() const; /** * Return a vector of PDG codes of the light flavours, * which are contained in the associated Born sub-process. */ vector<int> NLightBornVec() const; /** * Return a vector of PDG codes of the heavy flavours, * which are contained in the associated Born sub-process. */ vector<int> NHeavyBornVec() const; /** * Return a vector of PDG codes of the light flavours, * which are contained in the proton particle group. */ vector<int> NLightProtonVec() const; /** * Evaluate the finite virtual correction for the * variables supplied through the Born XComb object * and possible additional random numbers. */ virtual double me2() const; /** * Evaluate the finite virtual correction for the * variables supplied through the Born XComb object * and possible additional random numbers. */ virtual CrossSection dSigHatDR() const { return sqr(hbarc) * me2() * lastBorn()->lastXComb().jacobian() / (2.*lastSHat()); } public: /** * Return true, if contributions exist to * the given parton. */ bool apply(tcPDPtr) const; /** * Return true, if contributions exist to * the given parton. */ bool applyNotMassless(tcPDPtr) const; /** * Return true, if this virtual correction * applies to the given process. */ virtual bool apply(const cPDVector&) const; /** * The initial-final contribution * [1/(1-z)]_+ + \delta(1-z) */ double gammaSoft() const; /** * [(1/(1-z))*ln((1-z)/z)]_+ */ double softLogByz(tcPDPtr p) const; /** * [(1/(1-z))*ln((1-z))]_+ */ double softLog(tcPDPtr p) const; /** * The Kbar^{qq} contribution */ double KBarqq() const; /** * The Ktilde^{qq} contribution */ double KTildeqq() const; /** * The P^{qq} contribution */ double Pqq() const; /** * The Kbar^{qg} contribution */ double KBarqg() const; /** * The Ktilde^{qg} contribution */ double KTildeqg() const; /** * The P^{qg} contribution */ double Pqg() const; /** * The Kbar^{gq} contribution */ double KBargq() const; /** * The Ktilde^{gq} contribution */ double KTildegq() const; /** * The P^{gq} contribution */ double Pgq() const; /** * The Kbar^{gg} contribution */ double KBargg() const; /** * The Ktilde^{gg} contribution */ double KTildegg() const; /** * The P^{gg} contribution */ double Pgg() const; ////////////////////////////////////// /** * Kscript^{a,a'}_j terms with j=quark */ /** * [J^a_{gQ}(z,\mu_Q^2)]_+ * a,a' = quark for later * use of this function * in Kscript^{qq}_q */ double Ja_gQplus(double muQ2) const; /** * [1/(1-z)]_+ * log( (2-z)/(2-z+\mu_Q^2) ) * a,a' = quark for later use of this function * in Kscript^{qq}_q */ double gammaSoft2(double muQ2) const; /** * The Kscript^{qq}_q contribution */ double Kscriptqq_q(Energy2 sja, Energy2 mj2) const; /** * The Kscript^{qg}_q contribution */ double Kscriptqg_q(Energy2 sja, Energy2 mj2) const; /** * The Kscript^{gq}_q contribution */ double Kscriptgq_q() const; /** * The Kscript^{gg}_q contribution */ double Kscriptgg_q(Energy2 sja, Energy2 mj2) const; /** * The Kscriptbar^{qq}_q contribution (B.17) */ double Kscriptbarqq_q(Energy2 Qja2, Energy2 mj2) const; /** * The Kscriptbar^{qg}_q contribution (B.17) */ double Kscriptbarqg_q(Energy2 Qja2, Energy2 mj2) const; /** * The Kscriptbar^{gq}_q contribution (B.17) */ double Kscriptbargq_q() const; /** * The Kscriptbar^{gg}_q contribution (B.17) */ double Kscriptbargg_q(Energy2 Qja2, Energy2 mj2) const; //////////////////////////// /** * Kscript^{a,a'}_j terms with j=gluon * The ones for a!=a' will return zero */ /** * J^{a;NS}_{Q\bar{Q}}(\mu_Q^2) * Not folded with 1/z*PDF(x/z)*\Theta(z-x) */ double JaNS_QQ(double muQ2) const; /** * [J^a_{Q\bar{Q}}(z,\mu_Q^2)]_{z_+} */ double Ja_QQzplus(double muQ2, int F, double zplus) const; /** * The Kscript^{qq}_g contribution */ // double Kscriptqq_g(Energy2 sja) const; double Kscriptqq_g(Energy2 sja, double lambda) const; /** * The Kscript^{qg}_g contribution */ double Kscriptqg_g() const; /** * The Kscript^{gq}_g contribution */ double Kscriptgq_g() const; /** * The Kscript^{gg}_g contribution * equals the Kscript^{qq}_g contribution */ // double Kscriptgg_g(Energy2 sja) const; double Kscriptgg_g(Energy2 sja, double lambda) const; /** * The Kscriptbar^{qq}_g contribution (B.18) */ // double Kscriptbarqq_g(Energy2 Qja2) const; double Kscriptbarqq_g(Energy2 Qja2, double lambda) const; /** * The Kscriptbar^{qg}_g contribution (B.18) */ double Kscriptbarqg_g() const; /** * The Kscriptbar^{gq}_g contribution (B.18) */ double Kscriptbargq_g() const; /** * The Kscriptbar^{gg}_g contribution (B.18) */ // double Kscriptbargg_g(Energy2 Qja2) const; double Kscriptbargg_g(Energy2 Qja2, double lambda) const; ////////////////////////////////////// /** * Get all contributions for the indicated incoming parton. */ double sumParton(int id) 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; /** 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; //@} private: /** * C_A */ double CA; /** * C_F */ double CF; /** * \gamma_q */ double gammaQuark; /** * \gamma_g */ double gammaGluon; /** * K_q */ double KQuark; /** * K_g */ double KGluon; /** * The scale to be used. */ mutable Energy2 scale; /** * The PDF to be used. */ mutable tcPDFPtr pdf; /** * The incoming parton type considered. */ mutable tcPDPtr particle; /** * The x to be used. */ mutable double x; /** * The convolution variable to be used. */ mutable double z; /** * Cache PDFs evaluated at x, x/z and x/z_+, * z_+ depends hereby on the masses of the heavy flavours, * so, in contrast to the massless case, we need a vector * of size 2+n_F(heavy) instead of the pair<double,double> */ mutable map<pair<tcPDFPtr,tcPDPtr>,vector<double> > pdfCache; /** * The currently considered incoming parton. */ mutable tcPDPtr parton; /** * Get a PDF value at x */ double PDFx(tcPDPtr) const; /** * Get a PDF value at x/z */ double PDFxByz(tcPDPtr) const; ////////////////////////////////////// /** * Get a PDF value at x/z_+ */ double PDFxByzplus(tcPDPtr,int,double) const; ////////////////////////////////////// private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<DipoleMPKOperator> initDipoleMPKOperator; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DipoleMPKOperator & operator=(const DipoleMPKOperator &); }; } #endif /* HERWIG_DipoleMPKOperator_H */ diff --git a/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h b/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h --- a/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h +++ b/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h @@ -1,346 +1,340 @@ // -*- C++ -*- // // DipolePKOperator.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_DipolePKOperator_H #define HERWIG_DipolePKOperator_H // // This is the declaration of the DipolePKOperator class. // #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h" #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h" #include "ThePEG/PDF/PDF.h" namespace Herwig { using namespace ThePEG; /** * \ingroup Matchbox * \author Simon Platzer, Christian Reuschle * * \brief DipolePKOperator implements the P+K * insertion operator. * */ class DipolePKOperator: public MatchboxInsertionOperator { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ DipolePKOperator(); /** * The destructor. */ virtual ~DipolePKOperator(); //@} public: /** * Set the XComb object steering the Born matrix * element this class represents virtual corrections to. */ virtual void setXComb(tStdXCombPtr xc); /** * Set parameters for new alpha parameter. */ virtual void setAlpha (double alpha)const; /** * Return the number of additional random variables * needed to calculate this virtual correction. * We treat all integrations on equal footing. */ virtual int nDimAdditional() const { return 1; } /** * Return a vector of PDG codes of the light flavours, * which are contained in the jet particle group. */ vector<int> NLightJetVec() const; /** * Return a vector of PDG codes of the heavy flavours, * which are contained in the jet particle group. */ vector<int> NHeavyJetVec() const; /** * Return a vector of PDG codes of the light flavours, * which are contained in the associated Born sub-process. */ vector<int> NLightBornVec() const; /** * Return a vector of PDG codes of the heavy flavours, * which are contained in the associated Born sub-process. */ vector<int> NHeavyBornVec() const; /** * Return a vector of PDG codes of the light flavours, * which are contained in the proton particle group. */ vector<int> NLightProtonVec() const; /** * Evaluate the finite virtual correction for the * variables supplied through the Born XComb object * and possible additional random numbers. */ virtual double me2() const; /** * Evaluate the finite virtual correction for the * variables supplied through the Born XComb object * and possible additional random numbers. */ virtual CrossSection dSigHatDR() const { return sqr(hbarc) * me2() * lastBorn()->lastXComb().jacobian() / (2.*lastSHat()); } public: /** * Return true, if contributions exist to * the given parton. */ bool apply(tcPDPtr) const; /** * Return true, if this virtual correction * applies to the given process. */ virtual bool apply(const cPDVector&) const; /** * The initial-final contribution */ double gammaSoft() const; /** * [(1/(1-z))*ln((1-z)/z)]_+ */ double softLogByz(tcPDPtr p) const; /** * [(1/(1-z))*ln((1-z))]_+ */ double softLog(tcPDPtr p) const; /** * The Kbar^{qq} contribution */ double KBarqq() const; /** * The Ktilde^{qq} contribution */ double KTildeqq() const; /** * The P^{qq} contribution */ double Pqq() const; /** * The Kbar^{qg} contribution */ double KBarqg() const; /** * The Ktilde^{qg} contribution */ double KTildeqg() const; /** * The P^{qg} contribution */ double Pqg() const; /** * The Kbar^{gq} contribution */ double KBargq() const; /** * The Ktilde^{gq} contribution */ double KTildegq() const; /** * The P^{gq} contribution */ double Pgq() const; /** * The Kbar^{gg} contribution */ double KBargg() const; /** * The Ktilde^{gg} contribution */ double KTildegg() const; /** * The P^{gg} contribution */ double Pgg() const; /** * Get all contributions for the indicated incoming parton. */ double sumParton(int id) 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; /** 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; //@} private: /** * C_A */ double CA; /** * C_F */ double CF; /** * \gamma_q */ double gammaQuark; /** * \gamma_g */ double gammaGluon; /** * K_q */ mutable double KQuark; /** * K_g */ mutable double KGluon; /** * The scale to be used. */ mutable Energy2 scale; /** * The PDF to be used. */ mutable tcPDFPtr pdf; /** * The incoming parton type considered. */ mutable tcPDPtr particle; /** * The x to be used. */ mutable double x; /** * The convolution variable to be used. */ mutable double z; /** * Cache PDFs evaluated at x and x/z */ mutable map<pair<tcPDFPtr,tcPDPtr>,pair<double,double> > pdfCache; /** * The currently considered incoming parton. */ mutable tcPDPtr parton; /** * Get a PDF value at x */ double PDFx(tcPDPtr) const; /** * Get a PDF value at x/z */ double PDFxByz(tcPDPtr) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<DipolePKOperator> initDipolePKOperator; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DipolePKOperator & operator=(const DipolePKOperator &); }; } #endif /* HERWIG_DipolePKOperator_H */ diff --git a/MatrixElement/Powheg/MEPP2HiggsPowheg.h b/MatrixElement/Powheg/MEPP2HiggsPowheg.h --- a/MatrixElement/Powheg/MEPP2HiggsPowheg.h +++ b/MatrixElement/Powheg/MEPP2HiggsPowheg.h @@ -1,425 +1,419 @@ // -*- C++ -*- // // MEPP2HiggsPowheg.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_MEPP2HiggsPowheg_H #define HERWIG_MEPP2HiggsPowheg_H // // This is the declaration of the MEPP2HiggsPowheg class. // #include "Herwig/MatrixElement/Hadron/MEPP2Higgs.h" #include "ThePEG/PDF/BeamParticleData.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The MEPP2HiggsPowheg class implements the matrix element for the process * pp->Higgs with different Higgs shape prescriptions (see details in hep-ph/9505211) * and the NLL corrected Higgs width (see details in the FORTRAN HERWIG manual). * * @see \ref MEPP2HiggsPowhegInterfaces "The interfaces" * defined for MEPP2HiggsPowheg. */ class MEPP2HiggsPowheg: public MEPP2Higgs { public: /** * The default constructor. */ MEPP2HiggsPowheg(); public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() 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(); /** * Function to set the born variables. */ void get_born_variables() const; /** * Calculate the correction weight with which leading-order * configurations are re-weighted. */ double NLOweight() const; /** * Invariant required for the evaluation of next-to-leading order * quantities (Frixione et al. NPB.383 WZ production at colliders). */ Energy2 s(double xt, double y) const { return p2_/x(xt,y); } /** * Invariant required for the evaluation of next-to-leading order * quantities (Frixione et al. NPB.383 WZ production at colliders). */ Energy2 tk(double xt, double y) const { double x_xt_y(x(xt,y)); return -0.5*p2_/x_xt_y*(1.- x_xt_y)*(1.-y); } /** * Invariant required for the evaluation of next-to-leading order * quantities (Frixione et al. NPB.383 WZ production at colliders). */ Energy2 uk(double xt, double y) const { double x_xt_y(x(xt,y)); return -0.5*p2_/x_xt_y*(1.- x_xt_y)*(1.+y); } /** * Calculate the minimum of \f$x\f$. */ double xbar(double y) const; /** * Calculate auxiliary function of \f$\bar{x}(y)\f$, \f$\bar{\eta}(y)\f$. */ double etabar(double y) const; /** * Calculate the variable \f$x=p^{2}/s\f$ from the integration variables. */ double x(double xt, double y) const { double x0(xbar(y)); return x0+(1.-x0)*xt; } /** * Calculate the momentum fraction of the plus parton. */ double xp(double x, double y) const; /** * Calculate the momentum fraction of the minus parton. */ double xm(double x, double y) const; /** * Calculate the ratio of the NLO luminosity to the LO * luminosity function for the \f$q\bar{q}\f$ initiated channel. */ double Lhat_ab(tcPDPtr a, tcPDPtr b, double x, double y) const; /** * Calculate the universal soft-virtual contribution to the NLO weight. */ double Vtilde_universal() const; /** * Function for calculation of the \f$gg\f$ initiated real * contribution. */ double Ctilde_Ltilde_gg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ctilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * Function for calculation of the \f$gq\f$ initiated real * contribution. */ double Ctilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * The regular part of the virtual correction matrix element(s) */ double M_V_regular() const; /** * The matrix element q + qbar -> n + g times tk*uk */ Energy2 t_u_M_R_qqbar(double xt, double y) const; /** * The matrix element qbar + q -> n + g times tk*uk */ Energy2 t_u_M_R_qbarq(double xt, double y) const; /** * The matrix element g + g -> n + g times tk*uk */ Energy2 t_u_M_R_gg(double xt, double y) const; /** * The matrix element q + g -> n + q times tk*uk */ Energy2 t_u_M_R_qg(double xt, double y) const; /** * The matrix element g + q -> n + q times tk*uk */ Energy2 t_u_M_R_gq(double xt, double y) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Rtilde_Ltilde_qqbar_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * Function for calculation of the \f$\bar{q}q\f$ initiated real * contribution. */ double Rtilde_Ltilde_qbarq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * Function for calculation of the \f$qq\f$ * initiated real contribution. */ double Rtilde_Ltilde_gg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Rtilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const; /** * Function for calculation of the \f$gq\f$ initiated real * contribution. */ double Rtilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) 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); } //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2HiggsPowheg> initMEPP2HiggsPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2HiggsPowheg & operator=(const MEPP2HiggsPowheg &); private: /** * Parameters for the NLO weight */ //@{ /** * The colour factors */ const double CF_ , CA_ , TR_; /** * Number of light flavours (in the beta function beta0_) */ const int nlf_; /** * (Proportional to) The beta function */ const double beta0_; /** * Whether to generate the positive, negative or leading order contribution */ unsigned int contrib_; /** * Whether to use a fixed or a running QCD coupling for the NLO weight */ unsigned int nlo_alphaS_opt_; /** * The value of alphaS to use for the nlo weight if nlo_alphaS_opt_=1 */ double fixed_alphaS_; //@} /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double xt_; /** * The \f$y\f$ angular variable */ double y_; //@} /** * Values of the PDF's before radiation */ mutable double lo_lumi_; /** * The value of the leading order gg->H matrix element */ mutable double lo_ggME_; /** * The invariant mass of the lo final state. */ mutable Energy2 p2_ ; /** * The invariant mass of the lo final state. */ mutable Energy2 s2_ ; /** * The momentum fraction of the plus parton in the Born process */ mutable double xbp_; /** * The momentum fraction of the minus parton in the Born process */ mutable double xbm_; /** * The sqrt(1-xbp_) */ mutable double etabarp_; /** * The sqrt(1-xbm_) */ mutable double etabarm_; /** * The ParticleData object for the plus lo parton */ mutable tcPDPtr a_lo_; /** * The ParticleData object for the minus lo parton */ mutable tcPDPtr b_lo_; /** * The BeamParticleData object for the plus direction hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer hadron_A_; /** * The BeamParticleData object for the minus direction hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer hadron_B_; /** * The value of \f$\alpha_S\f$ used for the calculation */ mutable double alphaS_; /** * Selects a dynamic (sHat) or fixed factorization scale */ unsigned int scaleopt_; /** * The factorization scale */ Energy mu_F_; /** * The renormalization scale */ Energy mu_UV_; /** * Prefactor if variable scale used */ double scaleFact_; }; } #endif /* HERWIG_MEPP2HiggsPowheg_H */ diff --git a/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h b/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h --- a/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h +++ b/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h @@ -1,273 +1,267 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2HiggsVBFPowheg_H #define HERWIG_MEPP2HiggsVBFPowheg_H // // This is the declaration of the MEPP2HiggsVBFPowheg class. // #include "Herwig/MatrixElement/Hadron/MEPP2HiggsVBF.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the MEPP2HiggsVBFPowheg class. * * @see \ref MEPP2HiggsVBFPowhegInterfaces "The interfaces" * defined for MEPP2HiggsVBFPowheg. */ class MEPP2HiggsVBFPowheg: public Herwig::MEPP2HiggsVBF { public: /** * The default constructor. */ MEPP2HiggsVBFPowheg(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() 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 NLO weight */ double NLOWeight() const; /** * Leading order matrix element */ Energy4 loMatrixElement(const Lorentz5Momentum &p1, const Lorentz5Momentum &p2, const Lorentz5Momentum &q1, const Lorentz5Momentum &q2, double G1, double G2) const; 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(); //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2HiggsVBFPowheg> initMEPP2HiggsVBFPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2HiggsVBFPowheg & operator=(const MEPP2HiggsVBFPowheg &); private: /** * The Born variables */ //@{ /** * \f$x_B\f$ */ double _xB; /** * Partons */ tcPDPtr _partons[5]; mutable Energy2 _q2; //@} /** * The radiative variables */ //@{ /** * The \f$x_p\f$ or \f$z\f$ real integration variable */ double _xp; /** * The \f$z_p\f$ real integration variable */ double _zp; /** * The \f$fi\f$ real integration variable */ double _phi; //@} /** * The variables to get the right boost */ //@{ /** * LO momenta */ Lorentz5Momentum _loMomenta[4]; /** * The transfered (virtual boson) momentum */ mutable Lorentz5Momentum _pa; /** * The incoming quark momentum */ mutable Lorentz5Momentum _pb; /** * The outgoing quark momentum */ Lorentz5Momentum _pc; /** * The incoming quark momentum */ Lorentz5Momentum _pbother; /** * The outgoing quark momentum */ Lorentz5Momentum _pcother; //@} /** * Electroweak parameters */ //@{ /** * The square of the Z mass */ Energy2 _mz2; /** * The square of the W mass */ Energy2 _mw2; //@} /** * The first hadron */ tcBeamPtr _hadron; /** * Selects a dynamic or fixed factorization scale */ unsigned int scaleOpt_; /** * The factorization scale */ Energy muF_; /** * Prefactor if variable scale used */ double scaleFact_; /** * Whether to generate the positive, negative or leading order contribution */ unsigned int contrib_; /** * Power for sampling \f$x_p\f$ */ double power_; /** * Jacobian for \f$x_p\f$ integral */ double jac_; }; } #endif /* HERWIG_MEPP2HiggsVBFPowheg_H */ diff --git a/MatrixElement/Powheg/MEPP2VVPowheg.h b/MatrixElement/Powheg/MEPP2VVPowheg.h --- a/MatrixElement/Powheg/MEPP2VVPowheg.h +++ b/MatrixElement/Powheg/MEPP2VVPowheg.h @@ -1,838 +1,832 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2VVPowheg_H #define HERWIG_MEPP2VVPowheg_H // // This is the declaration of the MEPP2VVPowheg class. // #include "Herwig/MatrixElement/Hadron/MEPP2VV.h" #include "Herwig/MatrixElement/Powheg/VVKinematics.h" #include "Herwig/Utilities/Maths.h" #include "Herwig/Models/StandardModel/StandardCKM.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h" namespace Herwig { using namespace ThePEG; using Math::ReLi2; using Constants::pi; /** * Here is the documentation of the MEPP2VVPowheg class. * * @see \ref MEPP2VVPowhegInterfaces "The interfaces" * defined for MEPP2VVPowheg. */ class MEPP2VVPowheg: public MEPP2VV { public: /** * The default constructor. */ MEPP2VVPowheg(); /** @name Member functions for the generation of hard QCD radiation */ //@{ /** * Has a POWHEG style correction */ virtual POWHEGType hasPOWHEGCorrection() {return ISR;} /** * Apply the POWHEG style correction */ virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr, ShowerInteraction inter); //@} public: /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * This member check the collinear limits of the * real emission matrix elements are equal to the * appropriate combinations of Born ME's multiplied * by the splitting functions. */ bool sanityCheck() const; /** * Return the CKM matrix elements. */ Complex CKM(int ix,int iy) const { return ckm_[ix][iy]; } 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 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(); //@} public: /** * Function to set the born variables. */ void getKinematics(double xt, double y, double theta2); /** * Calculate the correction weight with which leading-order * configurations are re-weighted. */ double NLOweight() const; /** * Calculate the ratio of the NLO luminosity to the LO * luminosity function for the \f$q\bar{q}\f$ initiated channel. */ double Lhat_ab(tcPDPtr a, tcPDPtr b, realVVKinematics Kinematics) const; /** * Calculate the universal soft-virtual contribution to the NLO weight. */ double Vtilde_universal(realVVKinematics S) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ctilde_Ltilde_qq_on_x(tcPDPtr a,tcPDPtr b,realVVKinematics C) const; /** * Function for calculation of the \f$gq\f$ initiated real * contribution. */ double Ctilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,realVVKinematics C) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Rtilde_Ltilde_qqb_on_x(tcPDPtr a,tcPDPtr b) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Rtilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b) const; /** * Function for calculation of the \f$gqb\f$ initiated real * contribution. */ double Rtilde_Ltilde_gqb_on_x(tcPDPtr a,tcPDPtr b) const; /** * The regular part of the virtual correction matrix element(s). * For WZ production this is given by Equation B.2 in NPB 383 (1992) * 3-44 *** modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ double M_V_regular(realVVKinematics S) const; /** * Member variable to store the * regular part of the virtual correction matrix element(s). * For WZ production this is given by Equation B.2 in NPB 383 (1992) * 3-44 *** modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ mutable double M_V_regular_; /** * The matrix element q + qb -> n + g times tk*uk */ Energy2 t_u_M_R_qqb(realVVKinematics R) const; /** * Member variable to store the matrix element q + qb -> n + g times tk*uk */ mutable Energy2 t_u_M_R_qqb_; /** * The matrix element q + g -> n + q times tk*uk */ Energy2 t_u_M_R_qg(realVVKinematics R) const; /** * Member variable to store the matrix element q + g -> n + q times tk*uk */ mutable Energy2 t_u_M_R_qg_; /** * The matrix element g + qb -> n + q times tk*uk */ Energy2 t_u_M_R_gqb(realVVKinematics R) const; /** * Member variable to store the matrix element g + qb -> n + q times tk*uk */ mutable Energy2 t_u_M_R_gqb_; /** * The matrix element q + qb -> n + g times (tk*uk)^2 - using helicity amplitudes */ Energy2 t_u_M_R_qqb_hel_amp(realVVKinematics R) const; /** * Member variable to store the * matrix element q + qb -> n + g times (tk*uk)^2 - using helicity amplitudes */ mutable Energy2 t_u_M_R_qqb_hel_amp_; /** * The matrix element q + g -> n + q times (tk*uk)^2 - using helicity amplitudes */ Energy2 t_u_M_R_qg_hel_amp(realVVKinematics R) const; /** * Member variable to store the * matrix element q + g -> n + q times (tk*uk)^2 - using helicity amplitudes */ mutable Energy2 t_u_M_R_qg_hel_amp_; /** * The matrix element g + qb -> n + qb times (tk*uk)^2 - using helicity amplitudes */ Energy2 t_u_M_R_gqb_hel_amp(realVVKinematics R) const; /** * Member variable to store the * matrix element g + qb -> n + qb times (tk*uk)^2 - using helicity amplitudes */ mutable Energy2 t_u_M_R_gqb_hel_amp_; /** * The leading order matrix element - using helicity amplitudes */ double lo_me() const; /** * The Born matrix element as given in Equation 3.1 - 3.3 in NPB 383 * (1992) *** modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ double M_Born_WZ(bornVVKinematics B) const; /** * Member variable to store the * Born matrix element as given in Equation 3.1 - 3.3 in NPB 383 * (1992) *** modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ mutable double M_Born_; /** * The Born matrix element as given in Equation 2.18 - 2.19 in NPB 357 * (1991) *** modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ double M_Born_ZZ(bornVVKinematics B) const; /** * M_V_regular_ZZ is the regular part of the one-loop ZZ matrix element * exactly as defined in Eqs. B.1 & B.2 of NPB 357(1991)409-438 *** * modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ double M_V_regular_ZZ(realVVKinematics S) const; /** * t_u_M_R_qqb_ZZ is the q + qb -> n + g times tk*uk real emission * matrix element as defined in Eq. C.1 of NPB 357(1991)409-438 *** * modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ Energy2 t_u_M_R_qqb_ZZ(realVVKinematics R) const; /** * The Born matrix element as given in Equation 3.2 - 3.8 in NPB 410 * (1993) *** modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ double M_Born_WW(bornVVKinematics B) const; /** * M_V_regular_WW is the regular part of the one-loop WW matrix element * exactly as defined in Eqs. C.1 - C.7 of of NPB 410(1993)280-324 *** * modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ double M_V_regular_WW(realVVKinematics S) const; /** * t_u_M_R_qqb_WW is the q + qb -> n + g times tk*uk real emission * matrix element as defined in Eq. D.1-D.5 of NPB 410(1993)280-324 *** * modulo a factor 1/(2s) ***, which is a flux factor that * those authors absorb in the matrix element. */ Energy2 t_u_M_R_qqb_WW(realVVKinematics R) const; /** * Return the factorion scale squared. */ Energy2 mu_F2() const; /** * Return the renormalisation scale squared. */ Energy2 mu_UV2() const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ inline 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. */ inline virtual IBPtr fullclone() const { return new_ptr(*this); } //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2VVPowheg> initMEPP2VVPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2VVPowheg & operator=(const MEPP2VVPowheg &); private: /** * Parameters for the NLO weight */ //@{ /** * Parameter to determine when to use limiting value of real emission * matrix elements, to avoid rounding error issues. */ double tiny; /** * The BeamParticleData object for the plus and minus direction hadrons */ tcBeamPtr hadron_A_; tcBeamPtr hadron_B_; /** * Born / virtual 2->2 kinematics. */ bornVVKinematics B_; /** * Soft limit of the 2->3 real emission kinematics. */ realVVKinematics S_; /** * Soft-collinear limit of the 2->3 kinematics (emission in +z direction). */ realVVKinematics SCp_; /** * The collinear limit of the 2->3 kinematics (emission in -z direction). */ realVVKinematics SCm_; /** * The collinear limit of the 2->3 kinematics (emission in +z direction). */ realVVKinematics Cp_; /** * The collinear limit of the 2->3 kinematics (emission in -z direction). */ realVVKinematics Cm_; /** * The resolved 2->3 real emission kinematics: */ realVVKinematics H_; /** * The ParticleData object for the plus and minus lo partons */ tcPDPtr ab_, bb_; /** * The ParticleData object for the quark and antiquark * (which can be in a different order to ab_ and bb_). */ tcPDPtr quark_, antiquark_; /** * Values of the PDF's before radiation */ double lo_lumi_; /** * The value of the leading order qqbar->VV matrix element */ mutable double lo_me2_; /** * The CF_ colour factor */ double CF_; /** * The TR_ colour factor */ double TR_; /** * The number of colours */ double NC_; /** * The weak coupling and the sin (squared) of the Weinberg angle */ mutable double gW_, sin2ThetaW_; /** * The up and down, left handed, quark-boson couplings */ mutable double guL_, gdL_; /** * The up and down, right handed, quark-boson couplings (for WW & ZZ) */ mutable double guR_, gdR_; /** * The TGC coupling */ mutable double eZ_; /** * The TGC coupling squared. This is useful for debugging purposes * when one wants to turn of t-channel * TGC interference contributions * but leave the pure TGC contributions intact. It is also needed in * order to transform WZ matrix elements into WW ones. */ mutable double eZ2_; /** * The CKM factor (Fij^2) */ mutable double Fij2_; /** * Whether to generate the positive, negative or leading order contribution */ unsigned int contrib_; /** * Whether to generate all channels contributions or just qqb or just * qg+gqb contributions */ unsigned int channels_; /** * Whether to use a fixed or a running QCD coupling for the NLO weight */ unsigned int nlo_alphaS_opt_; /** * The value of alphaS to use for the nlo weight if nlo_alphaS_opt_=1 */ double fixed_alphaS_; /** * Flag to remove or multiply in MCFM branching fractions for testing */ unsigned int removebr_; /** * Selects a dynamic (sHat) or fixed factorization scale */ unsigned int scaleopt_; /** * The factorization scale */ Energy mu_F_; /** * The renormalization scale */ Energy mu_UV_; /** * The pT of V1 in a radiative event in the lab frame (for scale setting only) */ Energy2 k1r_perp2_lab_; /** * The pT of V2 in a radiative event in the lab frame (for scale setting only) */ Energy2 k2r_perp2_lab_; /** * The ckm matrix elements (unsquared, to allow interference) */ vector< vector<Complex> > ckm_; /** * Option to impose helicity conservation on the real NLO ME's (greatly improves evaluation time). */ bool helicityConservation_; /** * The q + qb -> v1 + v2 + g helicity amplitudes */ mutable ProductionMatrixElement qqb_hel_amps_; /** * The q + g -> v1 + v2 + q helicity amplitudes */ mutable ProductionMatrixElement qg_hel_amps_; /** * The g + qb -> v1 + v2 + qb helicity amplitudes */ mutable ProductionMatrixElement gqb_hel_amps_; //@} /** * The vertices */ //@{ /** * The photon fermion-antifermion vertex */ AbstractFFVVertexPtr FFPvertex_; /** * The W fermion-antifermion vertex */ AbstractFFVVertexPtr FFWvertex_; /** * The Z fermion-antifermionvertex */ AbstractFFVVertexPtr FFZvertex_; /** * The triple electroweak gauge boson vertex */ AbstractVVVVertexPtr WWWvertex_; /** * The quark-antiquark gluon vertex */ AbstractFFVVertexPtr FFGvertex_; //@} /** * The value of \f$\alpha_S\f$ used for the calculation */ mutable double alphaS_; protected: /** * Returns the matrix element for a given type of process, * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$ * @param emis_type the type of emission, * (0 is \f$q\bar{q}\to Vg\f$, 1 is \f$qg\to Vq\f$ and 2 is \f$g\bar{q}\to V\bar{q}\f$) * @param pT The transverse momentum of the jet * @param R The object containing the kinematics */ double getResult(int emis_type, realVVKinematics R, Energy pT); /** * generates the hardest emission (yj,p) * @param pnew The momenta of the new particles * @param emissiontype The type of emission, as for getResult * @return Whether not an emission was generated */ bool getEvent(vector<Lorentz5Momentum> & pnew,unsigned int & emissiontype); /** * sets the QCD, EW and PDF scales * @param pT The pT of the current step in the veto algorithm */ void setTheScales(Energy pT); /** * The matrix element q + qb -> n + g times tk*uk */ Energy2 t_u_M_R_qqb_hel_amp(realVVKinematics R, bool getMatrix) const; /** * The matrix element q + g -> n + q times tk*uk */ Energy2 t_u_M_R_qg_hel_amp(realVVKinematics R, bool getMatrix) const; /** * The matrix element g + qb -> n + q times tk*uk */ Energy2 t_u_M_R_gqb_hel_amp(realVVKinematics R, bool getMatrix) const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ double lo_me(bool getMatrix) const; /** * Recalculate hard vertex to include spin correlations for radiative events. */ void recalculateVertex(); /** * Member which selects a two body decay mode for each vector * boson and distributes decay products isotropically */ bool isotropicDecayer(); /** * The triangle function lambda(x,y,z)=sqrt(x^2+y^2+z^2-2*x*y-2*y*z-2*x*z) */ Energy2 triangleFn(Energy2,Energy2,Energy2); private: /** * If this boolean is true the n+1 body helicity amplitudes will be * used to calculate a hard vertex based on those kinematics for spin * correlations in the decays. */ bool realMESpinCorrelations_; /** * The colour & spin averaged n-body (leading order) matrix element squared. */ double lo_me_; /** * The resolved 2->3 real emission kinematics. */ realVVKinematics R_; /** * This specifies the emitting configuration: * 1: q + qbar -> V1 + V2 + g * 2: q + g -> V1 + V2 + q * 3: g + qbar -> V1 + V2 + qbar. */ unsigned int channel_; /** * Identifies the space-like mother of the branching * as quark (+1) or antiquark (-1): */ int fermionNumberOfMother_; /** * Pointer to the object calculating the strong coupling */ ShowerAlphaPtr showerAlphaS_; /** * Constants for the sampling. The distribution is assumed to have the * form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ */ //@{ /** * The power, \f$n\f$, for the sampling */ double power_; /** * The prefactor, \f$c\f$ for the \f$q\bar{q}\f$ channel */ double preqqbar_; /** * The prefactor, \f$c\f$ for the \f$qg\f$ channel */ double preqg_; /** * The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel */ double pregqbar_; /** * The QCD beta function divided by 4pi, (11-2/3*nf)/4/pi, with nf = 5. */ double b0_; /** * The fundamental QCD scale in the one-loop alpha_{S} used for the crude * (not the very crude) overestimate of the Sudakov exponent. The default * value is set so such that alphaS(MZ), neglecting all flavour threshold * effects i.e. MZ*exp(-1/2/b0_/alphaS(MZ)). */ Energy LambdaQCD_; /** * The prefactors as a vector for easy use */ vector<double> prefactor_; //@} /** * Properties of the incoming particles */ //@{ /** * Pointers to the ShowerProgenitor objects for the partons */ PPtr qProgenitor_; PPtr qbProgenitor_; /** * Pointers to the Shower particle objects for the partons */ PPtr showerQuark_; PPtr showerAntiquark_; /** * Pointers to the BeamParticleData objects */ tcBeamPtr qHadron_; tcBeamPtr qbHadron_; //@} /** * Properties of the boson and jets */ //@{ /** * Pointers to the Shower particle objects for the partons */ PPtr gluon_; PPtr V1_; PPtr V2_; vector<PPtr> children_; /** * Flag indicating if the q & qbar are flipped or not i.e. this * is true if q enters from the -z direction in the lab frame. */ bool flipped_; /** * the rapidity of the jet */ double Yk_; /** * The transverse momentum of the jet */ Energy pT_; //@} /** * The transverse momentum of the jet */ Energy min_pT_; // Work out the scales we want to use in the matrix elements and the pdfs: /** * Scale for alpha_S: pT^2 of the diboson system. */ Energy2 QCDScale_; /** * Scale for real emission PDF: */ Energy2 PDFScale_; /** * Scale of electroweak vertices: mVV^2 the invariant mass of the diboson system. */ Energy2 EWScale_; /** * A matrix to hold the home-grown production matrix element */ mutable Complex productionMatrix_[3][3][3][3]; }; } #endif /* HERWIG_MEPP2VVPowheg_H */ diff --git a/MatrixElement/Powheg/MEPP2WHPowheg.h b/MatrixElement/Powheg/MEPP2WHPowheg.h --- a/MatrixElement/Powheg/MEPP2WHPowheg.h +++ b/MatrixElement/Powheg/MEPP2WHPowheg.h @@ -1,392 +1,386 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2WHPowheg_H #define HERWIG_MEPP2WHPowheg_H // // This is the declaration of the MEPP2WHPowheg class. // #include "Herwig/MatrixElement/Hadron/MEPP2WH.h" #include "ThePEG/PDF/BeamParticleData.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2WHPowheg class provides the next-to-leading order * matrix elements for \f$W^\pm\f$ in assoication with a Higgs boson * in the PoOWHEG scheme. * * @see \ref MEPP2WHPowhegInterfaces "The interfaces" * defined for MEPP2WHPowheg. */ class MEPP2WHPowheg: public MEPP2WH { public: /** * Default constructor */ MEPP2WHPowheg(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given 'nDim()' uniform * random numbers in the interval ]0,1[. To help the phase space * generator, the 'dSigHatDR()' should be a smooth function of these * numbers, although this is not strictly necessary. Return * false if the chosen points failed the kinematical cuts. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() 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: /** * Calculate the correction weight with which leading-order * configurations are re-weighted. */ double NLOweight() const; /** * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. */ double x(double xt, double v) const; /** * Calculate the momentum fraction of the first parton. */ double x_a(double x, double v) const; /** * Calculate the momentum fraction of second parton. */ double x_b(double x, double v) const; /** * Calculate the minimum of \f$x\f$. */ double xbar(double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$qg\f$ initiated channel. */ double Ltilde_qg(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. */ double Ltilde_gq(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. */ double Ltilde_qq(double x, double v) const; /** * Calculate the soft-virtual contribution to the NLO weight. */ double Vtilde_qq() const; /** * Function for calculation of the \f$g\bar{q}\f$ and \f$g\bar{q}\f$ * initiated real contribution. */ double Ccalbar_qg(double x) const; /** * Function for calculation of the \f$qg\f$ * initiated real contribution. */ double Fcal_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Fcal_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Fcal_qq(double x, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ftilde_qg(double xt, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ftilde_gq(double xt, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ftilde_qq(double xt, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ctilde_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ctilde_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ctilde_qq(double x, double v) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2WHPowheg> initMEPP2WHPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2WHPowheg & operator=(const MEPP2WHPowheg &); private: /** * The momentum fraction of the first parton in the Born process */ mutable double _xb_a; /** * The momentum fraction of the second parton in the Born process */ mutable double _xb_b; /** * The ParticleData object for the first parton in the Born process */ mutable tcPDPtr _parton_a; /** * The ParticleData object for the second parton in the Born process */ mutable tcPDPtr _parton_b; /** * The BeamParticleData object for the first hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A; /** * The BeamParticleData object for the second hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B; /** * the ParticleData object for the gluon */ tcPDPtr _gluon; /** * The \f$T_R\f$ colour factor */ const double TR_; /** * The \f$C_F\f$ colour factor */ const double CF_; /** * The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation */ mutable double _alphaS2Pi; /** * The mass squared of the lepton pair */ mutable Energy2 _mll2; /** * The renormalization/factorization scale */ mutable Energy2 _mu2; /** * Parameters for the NLO weight */ //@{ /** * Whether to generate the positive, negative or leading order contribution */ unsigned int _contrib; /** * Whether to use a fixed or a running QCD coupling for the NLO weight */ unsigned int _nlo_alphaS_opt; /** * The value of alphaS to use for the nlo weight if _nloalphaSopt=1 */ double _fixed_alphaS; /** * The magnitude of the correction term to reduce the negative contribution */ double _a; /** * The power of the correction term to reduce the negative contribution */ double _p; /** * Cut-off for the correction function */ double _eps; //@} /** * Choice of the scale */ //@{ /** * Type of scale */ unsigned int _scaleopt; /** * Fixed scale if used */ Energy _fixedScale; /** * Prefactor if variable scale used */ double _scaleFact; //@} /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double _xt; /** * The \f$v\f$ angular variable */ double _v; //@} /** * Values of the PDF's before radiation */ //@{ /** * For the quark */ mutable double _oldq; /** * For the antiquark */ mutable double _oldqbar; //@} }; } #endif /* HERWIG_MEPP2WHPowheg_H */ diff --git a/MatrixElement/Powheg/MEPP2ZHPowheg.h b/MatrixElement/Powheg/MEPP2ZHPowheg.h --- a/MatrixElement/Powheg/MEPP2ZHPowheg.h +++ b/MatrixElement/Powheg/MEPP2ZHPowheg.h @@ -1,390 +1,384 @@ // -*- C++ -*- #ifndef HERWIG_MEPP2ZHPowheg_H #define HERWIG_MEPP2ZHPowheg_H // // This is the declaration of the MEPP2ZHPowheg class. // #include "Herwig/MatrixElement/Hadron/MEPP2ZH.h" #include "ThePEG/PDF/BeamParticleData.h" namespace Herwig { using namespace ThePEG; /** * The MEPP2ZHPowheg class implements the matrix element * for \f$q\bar{q}\to Z^0h^0\f$. * * @see \ref MEPP2ZHPowhegInterfaces "The interfaces" * defined for MEPP2ZHPowheg. */ class MEPP2ZHPowheg: public MEPP2ZH { public: /** * The default constructor. */ MEPP2ZHPowheg(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given 'nDim()' uniform * random numbers in the interval ]0,1[. To help the phase space * generator, the 'dSigHatDR()' should be a smooth function of these * numbers, although this is not strictly necessary. Return * false if the chosen points failed the kinematical cuts. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() 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: /** * Calculate the correction weight with which leading-order * configurations are re-weighted. */ double NLOweight() const; /** * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. */ double x(double xt, double v) const; /** * Calculate the momentum fraction of the first parton. */ double x_a(double x, double v) const; /** * Calculate the momentum fraction of second parton. */ double x_b(double x, double v) const; /** * Calculate the minimum of \f$x\f$. */ double xbar(double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$qg\f$ initiated channel. */ double Ltilde_qg(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. */ double Ltilde_gq(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. */ double Ltilde_qq(double x, double v) const; /** * Calculate the soft-virtual contribution to the NLO weight. */ double Vtilde_qq() const; /** * Function for calculation of the \f$g\bar{q}\f$ and \f$g\bar{q}\f$ * initiated real contribution. */ double Ccalbar_qg(double x) const; /** * Function for calculation of the \f$qg\f$ * initiated real contribution. */ double Fcal_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Fcal_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Fcal_qq(double x, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ftilde_qg(double xt, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ftilde_gq(double xt, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ftilde_qq(double xt, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ctilde_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ctilde_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ctilde_qq(double x, double v) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEPP2ZHPowheg> initMEPP2ZHPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEPP2ZHPowheg & operator=(const MEPP2ZHPowheg &); private: /** * The momentum fraction of the first parton in the Born process */ mutable double _xb_a; /** * The momentum fraction of the second parton in the Born process */ mutable double _xb_b; /** * The ParticleData object for the first parton in the Born process */ mutable tcPDPtr _parton_a; /** * The ParticleData object for the second parton in the Born process */ mutable tcPDPtr _parton_b; /** * The BeamParticleData object for the first hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A; /** * The BeamParticleData object for the second hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B; /** * the ParticleData object for the gluon */ tcPDPtr _gluon; /** * The \f$T_R\f$ colour factor */ const double TR_; /** * The \f$C_F\f$ colour factor */ const double CF_; /** * The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation */ mutable double _alphaS2Pi; /** * The mass squared of the lepton pair */ mutable Energy2 _mll2; /** * The renormalization/factorization scale */ mutable Energy2 _mu2; /** * Parameters for the NLO weight */ //@{ /** * Whether to generate the positive, negative or leading order contribution */ unsigned int _contrib; /** * Whether to use a fixed or a running QCD coupling for the NLO weight */ unsigned int _nlo_alphaS_opt; /** * The value of alphaS to use for the nlo weight if _nloalphaSopt=1 */ double _fixed_alphaS; /** * The magnitude of the correction term to reduce the negative contribution */ double _a; /** * The power of the correction term to reduce the negative contribution */ double _p; /** * Cut-off for the correction function */ double _eps; //@} /** * Choice of the scale */ //@{ /** * Type of scale */ unsigned int _scaleopt; /** * Fixed scale if used */ Energy _fixedScale; /** * Prefactor if variable scale used */ double _scaleFact; //@} /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double _xt; /** * The \f$v\f$ angular variable */ double _v; //@} /** * Values of the PDF's before radiation */ //@{ /** * For the quark */ mutable double _oldq; /** * For the antiquark */ mutable double _oldqbar; //@} }; } #endif /* HERWIG_MEPP2ZHPowheg_H */ diff --git a/MatrixElement/Powheg/MEee2gZ2llPowheg.h b/MatrixElement/Powheg/MEee2gZ2llPowheg.h --- a/MatrixElement/Powheg/MEee2gZ2llPowheg.h +++ b/MatrixElement/Powheg/MEee2gZ2llPowheg.h @@ -1,157 +1,151 @@ // -*- C++ -*- #ifndef HERWIG_MEee2gZ2llPowheg_H #define HERWIG_MEee2gZ2llPowheg_H // // This is the declaration of the MEee2gZ2llPowheg class. // #include "Herwig/MatrixElement/Lepton/MEee2gZ2ll.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the MEee2gZ2llPowheg class. * * @see \ref MEee2gZ2llPowhegInterfaces "The interfaces" * defined for MEee2gZ2llPowheg. */ class MEee2gZ2llPowheg: public MEee2gZ2ll { public: /** * The default constructor. */ MEee2gZ2llPowheg() : contrib_(1), zPow_(0.5), yPow_(0.9) {} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEee2gZ2llPowheg> initMEee2gZ2llPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2gZ2llPowheg & operator=(const MEee2gZ2llPowheg &); private: /** * Whether to generate the positive, negative or leading order contribution */ unsigned int contrib_; /** * Phase-space sampling for z */ double zPow_; /** * Phase-space sampling for y */ double yPow_; /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double z_; /** * The \f$y\f$ angular variable */ double y_; /** * The azimuth */ double phi_; //@} }; } #endif /* HERWIG_MEee2gZ2llPowheg_H */ diff --git a/MatrixElement/Powheg/MEee2gZ2qqPowheg.h b/MatrixElement/Powheg/MEee2gZ2qqPowheg.h --- a/MatrixElement/Powheg/MEee2gZ2qqPowheg.h +++ b/MatrixElement/Powheg/MEee2gZ2qqPowheg.h @@ -1,163 +1,157 @@ // -*- C++ -*- #ifndef HERWIG_MEee2gZ2qqPowheg_H #define HERWIG_MEee2gZ2qqPowheg_H // // This is the declaration of the MEee2gZ2qqPowheg class. // #include "Herwig/MatrixElement/Lepton/MEee2gZ2qq.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the MEee2gZ2qqPowheg class. * * @see \ref MEee2gZ2qqPowhegInterfaces "The interfaces" * defined for MEee2gZ2qqPowheg. */ class MEee2gZ2qqPowheg: public MEee2gZ2qq { public: /** * The default constructor. */ MEee2gZ2qqPowheg() : contrib_(1), corrections_(1), zPow_(0.5), yPow_(0.9) {} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEee2gZ2qqPowheg> initMEee2gZ2qqPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEee2gZ2qqPowheg & operator=(const MEee2gZ2qqPowheg &); private: /** * Whether to generate the positive, negative or leading order contribution */ unsigned int contrib_; /** * Which corrections to included */ unsigned int corrections_; /** * Phase-space sampling for z */ double zPow_; /** * Phase-space sampling for y */ double yPow_; /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double z_; /** * The \f$y\f$ angular variable */ double y_; /** * The azimuth */ double phi_; //@} }; } #endif /* HERWIG_MEee2gZ2qqPowheg_H */ diff --git a/MatrixElement/Powheg/MEqq2W2ffPowheg.h b/MatrixElement/Powheg/MEqq2W2ffPowheg.h --- a/MatrixElement/Powheg/MEqq2W2ffPowheg.h +++ b/MatrixElement/Powheg/MEqq2W2ffPowheg.h @@ -1,379 +1,373 @@ // -*- C++ -*- // // MEqq2W2ffPowheg.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_MEqq2W2ffPowheg_H #define HERWIG_MEqq2W2ffPowheg_H // // This is the declaration of the MEqq2W2ffPowheg class. // #include "Herwig/MatrixElement/Hadron/MEqq2W2ff.h" #include "ThePEG/PDF/BeamParticleData.h" namespace Herwig { using namespace ThePEG; /** * The MEqq2W2ffPowheg class implements the matrix element for \f$q\bar{q'}\to W^\pm\f$ * including the decay of the \f$W^\pm\f$ to Standard Model fermions. * * @see \ref MEqq2W2ffPowhegInterfaces "The interfaces" * defined for MEqq2W2ffPowheg. */ class MEqq2W2ffPowheg: public MEqq2W2ff { public: /** * The default constructor. */ MEqq2W2ffPowheg(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given 'nDim()' uniform * random numbers in the interval ]0,1[. To help the phase space * generator, the 'dSigHatDR()' should be a smooth function of these * numbers, although this is not strictly necessary. Return * false if the chosen points failed the kinematical cuts. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() 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: /** * Calculate the correction weight with which leading-order * configurations are re-weighted. */ double NLOweight() const; /** * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. */ double x(double xt, double v) const; /** * Calculate the momentum fraction of the first parton. */ double x_a(double x, double v) const; /** * Calculate the momentum fraction of second parton. */ double x_b(double x, double v) const; /** * Calculate the minimum of \f$x\f$. */ double xbar(double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$qg\f$ initiated channel. */ double Ltilde_qg(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. */ double Ltilde_gq(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. */ double Ltilde_qq(double x, double v) const; /** * Calculate the soft-virtual contribution to the NLO weight. */ double Vtilde_qq() const; /** * Function for calculation of the \f$g\bar{q}\f$ and \f$g\bar{q}\f$ * initiated real contribution. */ double Ccalbar_qg(double x) const; /** * Function for calculation of the \f$qg\f$ * initiated real contribution. */ double Fcal_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Fcal_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Fcal_qq(double x, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ftilde_qg(double xt, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ftilde_gq(double xt, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ftilde_qq(double xt, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ctilde_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ctilde_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ctilde_qq(double x, double v) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEqq2W2ffPowheg> initMEqq2W2ffPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEqq2W2ffPowheg & operator=(const MEqq2W2ffPowheg &); private: /** * The momentum fraction of the first parton in the Born process */ mutable double _xb_a; /** * The momentum fraction of the second parton in the Born process */ mutable double _xb_b; /** * The ParticleData object for the first parton in the Born process */ mutable tcPDPtr _parton_a; /** * The ParticleData object for the second parton in the Born process */ mutable tcPDPtr _parton_b; /** * The BeamParticleData object for the first hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A; /** * The BeamParticleData object for the second hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B; /** * the ParticleData object for the gluon */ tcPDPtr _gluon; /** * The \f$T_R\f$ colour factor */ const double TR_; /** * The \f$C_F\f$ colour factor */ const double CF_; /** * The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation */ mutable double _alphaS2Pi; /** * The mass squared of the lepton pair */ mutable Energy2 _mll2; /** * The renormalization/factorization scale */ mutable Energy2 _mu2; /** * Parameters for the NLO weight */ //@{ /** * Whether to generate the positive, negative or leading order contribution */ unsigned int _contrib; /** * Whether to use a fixed or a running QCD coupling for the NLO weight */ unsigned int _nlo_alphaS_opt; /** * The value of alphaS to use for the nlo weight if _nloalphaSopt=1 */ double _fixed_alphaS; /** * The magnitude of the correction term to reduce the negative contribution */ double _a; /** * The power of the correction term to reduce the negative contribution */ double _p; /** * Cut-off for the correction function */ double _eps; //@} /** * Choice of the scale */ //@{ /** * Type of scale */ unsigned int _scaleopt; /** * Fixed scale if used */ Energy _fixedScale; /** * Prefactor if variable scale used */ double _scaleFact; //@} /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double _xt; /** * The \f$v\f$ angular variable */ double _v; //@} /** * Values of the PDF's before radiation */ //@{ /** * For the quark */ mutable double _oldq; /** * For the antiquark */ mutable double _oldqbar; //@} }; } #endif /* HERWIG_MEqq2W2ffPowheg_H */ diff --git a/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h b/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h --- a/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h +++ b/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h @@ -1,382 +1,376 @@ // -*- C++ -*- // // MEqq2gZ2ffPowheg.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_MEqq2gZ2ffPowheg_H #define HERWIG_MEqq2gZ2ffPowheg_H // // This is the declaration of the MEqq2gZ2ffPowheg class. // #include "Herwig/MatrixElement/Hadron/MEqq2gZ2ff.h" #include "ThePEG/PDF/BeamParticleData.h" namespace Herwig { using namespace ThePEG; /** * The MEqq2gZ2ffPowheg class implements the products of Standard Model * fermion antifermion pairs via the \f$Z^0\f$ resonance including * photon interference terms. * * @see \ref MEqq2gZ2ffPowhegInterfaces "The interfaces" * defined for MEqq2gZ2ffPowheg. */ class MEqq2gZ2ffPowheg: public MEqq2gZ2ff { public: /** * The default constructor. */ MEqq2gZ2ffPowheg(); /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given 'nDim()' uniform * random numbers in the interval ]0,1[. To help the phase space * generator, the 'dSigHatDR()' should be a smooth function of these * numbers, although this is not strictly necessary. Return * false if the chosen points failed the kinematical cuts. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() 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: /** * Calculate the correction weight with which leading-order * configurations are re-weighted. */ double NLOweight() const; /** * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. */ double x(double xt, double v) const; /** * Calculate the momentum fraction of the first parton. */ double x_a(double x, double v) const; /** * Calculate the momentum fraction of the second parton. */ double x_b(double x, double v) const; /** * Calculate the minimum of \f$x\f$. */ double xbar(double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$qg\f$ initiated channel. */ double Ltilde_qg(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. */ double Ltilde_gq(double x, double v) const; /** * Calculate the ratio of the radiative luminosity funcion to the * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. */ double Ltilde_qq(double x, double v) const; /** * Calculate the soft-virtual contribution to the NLO weight. */ double Vtilde_qq() const; /** * Function for calculation of the \f$qg\f$ and \f$g\bar{q}\f$ initiated real * contributions. */ double Ccalbar_qg(double x) const; /** * Function for calculation of the \f$qg\f$ * initiated real contribution. */ double Fcal_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Fcal_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Fcal_qq(double x, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ftilde_qg(double xt, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ftilde_gq(double xt, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ftilde_qq(double xt, double v) const; /** * Function for calculation of the \f$qg\f$ initiated real * contribution. */ double Ctilde_qg(double x, double v) const; /** * Function for calculation of the \f$g\bar{q}\f$ initiated real * contribution. */ double Ctilde_gq(double x, double v) const; /** * Function for calculation of the \f$q\bar{q}\f$ initiated real * contribution. */ double Ctilde_qq(double x, double v) 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<MEqq2gZ2ffPowheg> initMEqq2gZ2ffPowheg; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MEqq2gZ2ffPowheg & operator=(const MEqq2gZ2ffPowheg &); private: /** * The momentum fraction of the first parton in the Born process */ mutable double _xb_a; /** * The momentum fraction of the second parton in the Born process */ mutable double _xb_b; /** * The ParticleData object for the first parton in the Born process */ mutable tcPDPtr _parton_a; /** * The ParticleData object for the second parton in the Born process */ mutable tcPDPtr _parton_b; /** * The BeamParticleData object for the first hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A; /** * The BeamParticleData object for the second hadron */ mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B; /** * the ParticleData object for the gluon */ tcPDPtr _gluon; /** * The \f$T_R\f$ colour factor */ const double TR_; /** * The \f$C_F\f$ colour factor */ const double CF_; /** * The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation */ mutable double _alphaS2Pi; /** * The mass squared of the lepton pair */ mutable Energy2 _mll2; /** * The renormalization/factorization scale */ mutable Energy2 _mu2; /** * Parameters for the NLO weight */ //@{ /** * Whether to generate the positive, negative or leading order contribution */ unsigned int _contrib; /** * Whether to use a fixed or a running QCD coupling for the NLO weight */ unsigned int _nlo_alphaS_opt; /** * The value of alphaS to use for the nlo weight if _nloalphaSopt=1 */ double _fixed_alphaS; /** * The magnitude of the correction term to reduce the negative contribution */ double _a; /** * The power of the correction term to reduce the negative contribution */ double _p; /** * Cut-off for the correction function */ double _eps; //@} /** * Choice of the scale */ //@{ /** * Type of scale */ unsigned int _scaleopt; /** * Fixed scale if used */ Energy _fixedScale; /** * Prefactor if variable scale used */ double _scaleFact; //@} /** * Radiation variables */ //@{ /** * The \f$\tilde{x}\f$ variable */ double _xt; /** * The \f$v\f$ angular variable */ double _v; //@} /** * Values of the PDF's before radiation */ //@{ /** * For the quark */ mutable double _oldq; /** * For the antiquark */ mutable double _oldqbar; //@} }; } #endif /* HERWIG_MEqq2gZ2ffPowheg_H */ diff --git a/MatrixElement/Reweighters/ReweightEW.h b/MatrixElement/Reweighters/ReweightEW.h --- a/MatrixElement/Reweighters/ReweightEW.h +++ b/MatrixElement/Reweighters/ReweightEW.h @@ -1,174 +1,169 @@ // -*- C++ -*- #ifndef Herwig_ReweightEW_H #define Herwig_ReweightEW_H // // This is the declaration of the ReweightEW class. // #include "ThePEG/MatrixElement/ReweightBase.h" #include <array> namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the ReweightEW class. * * @see \ref ReweightEWInterfaces "The interfaces" * defined for ReweightEW. */ class ReweightEW: public ReweightBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ ReweightEW(); /** * The destructor. */ virtual ~ReweightEW(); //@} public: /** * Return the weight for the kinematical configuation provided by * the assigned XComb object (in the LastXCombInfo base class). */ virtual double weight() const; /** * Return values of the last evaluation (double/doubles in GeV2) */ double lastS() const {return thelasts;} double lastT() const {return thelastt;} double lastK() const {return thelastk;} void setSTK(double s, double t, double K); /** @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; /** 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; //@} private: /** * The last s */ mutable double thelasts; /** * The last t */ mutable double thelastt; /** * The last K-factor */ mutable double thelastk; /** * The table of K factors to be read from file */ std::array<std::array<double,6>,40001> tab; /** * EW K factor filename */ string filename; public: /** * Computation of K factors from table (s and t in GeV) */ double EWKFac(unsigned int f, double s, double t) const; private: /** * initialize tables */ void inittable(); private: /** - * Describe a concrete base class with persistent data. - */ - static ClassDescription<ReweightEW> initReweightEW; - -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. */ ReweightEW & operator=(const ReweightEW &); }; } #endif /* Herwig_ReweightEW_H */ diff --git a/Models/ADD/ADDModel.h b/Models/ADD/ADDModel.h --- a/Models/ADD/ADDModel.h +++ b/Models/ADD/ADDModel.h @@ -1,230 +1,225 @@ // -*- C++ -*- // // ADDModel.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_ADDModel_H #define HERWIG_ADDModel_H // This is the declaration of the ADDModel class. #include "Herwig/Models/General/BSMModel.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h" #include "ADDModel.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Models * * This is the class to be used instead of the Standard Model class for * the ADD model. * * @see \ref ADDModelInterfaces "The interfaces" * defined for ADDModel. * @see StandardModel * @see StandardModelBase * */ class ADDModel: public BSMModel { public: /** * The default constructor */ ADDModel() : delta_(2), mPlanckBar_(2.4e18*GeV), md_(1000.*GeV), lambdaT_(1000.*GeV) { useMe(); } /** * Number of extrac dimensions */ unsigned int delta() const {return delta_;} /** * The reduced Planck mass in 4d */ Energy MPlanckBar() const {return mPlanckBar_;} /** * The d-dimension Planck mass */ Energy MD() const {return md_;} /** * The cut-off for virtual gravition processes */ Energy LambdaT() const {return lambdaT_;} /** @name Vertices */ //@{ /** * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex. */ tAbstractFFTVertexPtr vertexFFGR() const {return FFGRVertex_;} /** * Pointer to the object handling the \f$G\to VV\f$ vertex. */ tAbstractVVTVertexPtr vertexVVGR() const {return VVGRVertex_;} /** * Pointer to the object handling the \f$G\to SS\f$ vertex. */ tAbstractSSTVertexPtr vertexSSGR() const {return SSGRVertex_;} /** * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex. */ tAbstractFFVTVertexPtr vertexFFGGR() const {return FFGGRVertex_;} /** * Pointer to the object handling the \f$G\to f\bar{f}W^\pm/Z^0/\gamma\f$ vertex. */ tAbstractFFVTVertexPtr vertexFFWGR() const {return FFWGRVertex_;} /** * Pointer to the object handling the \f$G\to W^+W^-Z^0/\gamma\f$ vertex. */ tAbstractVVVTVertexPtr vertexWWWGR() const {return WWWGRVertex_;} /** * Pointer to the object handling the \f$G\to ggg\f$ vertex. */ tAbstractVVVTVertexPtr vertexGGGGR() const {return GGGGRVertex_;} //@} 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 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(); //@} 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);} //@} private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModel> initADDModel; - - /** * Private and non-existent assignment operator. */ ADDModel & operator=(const ADDModel &); private: /** * Number of extrac dimensions */ unsigned int delta_; /** * The reduced Planck mass in 4d */ Energy mPlanckBar_; /** * The d-dimension Planck mass */ Energy md_; /** * Cut-off parameter for virtual gravitons */ Energy lambdaT_; /** * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex. */ AbstractFFTVertexPtr FFGRVertex_; /** * Pointer to the object handling the \f$G\to VV\f$ vertex. */ AbstractVVTVertexPtr VVGRVertex_; /** * Pointer to the object handling the \f$G\to SS\f$ vertex. */ AbstractSSTVertexPtr SSGRVertex_; /** * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex. */ AbstractFFVTVertexPtr FFGGRVertex_; /** * Pointer to the object handling the \f$G\to f\bar{f}W/Z^0\gamma\f$ vertex. */ AbstractFFVTVertexPtr FFWGRVertex_; /** * Pointer to the object handling the \f$G\to W^+W^-Z^0\gamma\f$ vertex. */ AbstractVVVTVertexPtr WWWGRVertex_; /** * Pointer to the object handling the \f$G\to ggg\f$ vertex. */ AbstractVVVTVertexPtr GGGGRVertex_; }; } #endif /* HERWIG_ADDModel_H */ diff --git a/Models/ADD/ADDModelFFGGRVertex.h b/Models/ADD/ADDModelFFGGRVertex.h --- a/Models/ADD/ADDModelFFGGRVertex.h +++ b/Models/ADD/ADDModelFFGGRVertex.h @@ -1,149 +1,144 @@ // -*- C++ -*- // // ADDModelFFGGRVertex.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_ADDModelFFGGRVertex_H #define HERWIG_ADDModelFFGGRVertex_H // // This is the declaration of the ADDModelFFGGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the fermion-antifermion-vector-graviton * vertex for the Randell-Sundrum model * * @see FFVTVertex * @see VertexBase */ class ADDModelFFGGRVertex: public FFVTVertex { public: /** * Default constructor. */ ADDModelFFGGRVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelFFGGRVertex> initADDModelFFGGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelFFGGRVertex & operator=(const ADDModelFFGGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The last value of the coupling/ */ Complex couplast_; /** * The last value of the scale, \f$q^2\f$. */ Energy2 q2last_; /** * The graviton coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; //@} }; } #endif /* HERWIG_ADDModelFFGGRVertex_H */ diff --git a/Models/ADD/ADDModelFFGRVertex.h b/Models/ADD/ADDModelFFGRVertex.h --- a/Models/ADD/ADDModelFFGRVertex.h +++ b/Models/ADD/ADDModelFFGRVertex.h @@ -1,131 +1,126 @@ // -*- C++ -*- // // ADDModelFFGRVertex.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_ADDModelFFGRVertex_H #define HERWIG_ADDModelFFGRVertex_H // // This is the declaration of the ADDModelFFGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/FFTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the Randell-Sundrum model fermion-antifermion * tensor vertex for helicity amplitude calculations * * @see FFTVertex * @see VertexBase */ class ADDModelFFGRVertex: public FFTVertex { public: /** * Default constructor. */ ADDModelFFGRVertex(); 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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelFFGRVertex> initADDModelFFGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelFFGRVertex & operator=(const ADDModelFFGRVertex &); /** * The coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; }; } #endif /* HERWIG_ADDModelFFGRVertex_H */ diff --git a/Models/ADD/ADDModelFFWGRVertex.h b/Models/ADD/ADDModelFFWGRVertex.h --- a/Models/ADD/ADDModelFFWGRVertex.h +++ b/Models/ADD/ADDModelFFWGRVertex.h @@ -1,169 +1,164 @@ // -*- C++ -*- // // ADDModelFFWGRVertex.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_ADDModelFFWGRVertex_H #define HERWIG_ADDModelFFWGRVertex_H // // This is the declaration of the ADDModelFFWGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the fermion-antifermion-vector-graviton * vertex for the Randell-Sundrum model * * @see FFVTVertex * @see VertexBase */ class ADDModelFFWGRVertex: public FFVTVertex { public: /** * Default constructor. */ ADDModelFFWGRVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelFFWGRVertex> initADDModelFFWGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelFFWGRVertex & operator=(const ADDModelFFWGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The charges of the Standard Model fermions. */ vector<double> charge_; /** * The left couplings of the Standard Model fermions. */ vector<double> gl_; /** * The right couplings of the Standard Model fermions. */ vector<double> gr_; /** * The elements of the CKM matrix. */ vector<vector<Complex> > ckm_; /** * The last value of the coupling/ */ Complex couplast_; /** * The last value of the scale, \f$q^2\f$. */ Energy2 q2last_; /** * The graviton coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; //@} }; } #endif /* HERWIG_ADDModelFFWGRVertex_H */ diff --git a/Models/ADD/ADDModelGGGGRVertex.h b/Models/ADD/ADDModelGGGGRVertex.h --- a/Models/ADD/ADDModelGGGGRVertex.h +++ b/Models/ADD/ADDModelGGGGRVertex.h @@ -1,149 +1,144 @@ // -*- C++ -*- // // ADDModelGGGGRVertex.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_ADDModelGGGGRVertex_H #define HERWIG_ADDModelGGGGRVertex_H // // This is the declaration of the ADDModelGGGGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The ADDModelGGGGRVertex class is the implementation of the * triple vector graviton couling in the ADD model. * It inherits from VVVTVertex and implements the setCoupling member. * * @see VVVTVertex * @see VertexBase */ class ADDModelGGGGRVertex: public VVVTVertex { public: /** * Default constructor. */ ADDModelGGGGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelGGGGRVertex> initADDModelGGGGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelGGGGRVertex & operator=(const ADDModelGGGGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The graviton coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; /** * The last value of the coupling/ */ Complex couplast_; /** * The last value of the scale, \f$q^2\f$. */ Energy2 q2last_; //@} }; } #endif /* HERWIG_ADDModelGGGGRVertex_H */ diff --git a/Models/ADD/ADDModelSSGRVertex.h b/Models/ADD/ADDModelSSGRVertex.h --- a/Models/ADD/ADDModelSSGRVertex.h +++ b/Models/ADD/ADDModelSSGRVertex.h @@ -1,130 +1,125 @@ // -*- C++ -*- // // ADDModelSSGRVertex.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_ADDModelSSGRVertex_H #define HERWIG_ADDModelSSGRVertex_H // // This is the declaration of the ADDModelSSGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/SSTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The ADDModelSSGRVertex class is thew implementation of the graviton * coupling to the Higgs in the ADDModel. It inherits from the SSTVertex * and implements the setCoupling member * * @see SSTVertex * @see VertexBase */ class ADDModelSSGRVertex: public SSTVertex { public: /** * Default constructor. */ ADDModelSSGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelSSGRVertex> initADDModelSSGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelSSGRVertex & operator=(const ADDModelSSGRVertex &); /** * Coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; }; } #endif /* HERWIG_ADDModelSSGRVertex_H */ diff --git a/Models/ADD/ADDModelVVGRVertex.h b/Models/ADD/ADDModelVVGRVertex.h --- a/Models/ADD/ADDModelVVGRVertex.h +++ b/Models/ADD/ADDModelVVGRVertex.h @@ -1,129 +1,124 @@ // -*- C++ -*- // // ADDModelVVGRVertex.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_ADDModelVVGRVertex_H #define HERWIG_ADDModelVVGRVertex_H // // This is the declaration of the ADDModelVVGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/VVTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vector-vector-graviton vertex for * the ADD model * * @see VVTVertex * @see VertexBase */ class ADDModelVVGRVertex: public VVTVertex { public: /** * Default constructor. */ ADDModelVVGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelVVGRVertex> initADDModelVVGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelVVGRVertex & operator=(const ADDModelVVGRVertex &); /** * The coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; }; } #endif /* HERWIG_ADDModelVVGRVertex_H */ diff --git a/Models/ADD/ADDModelWWWGRVertex.h b/Models/ADD/ADDModelWWWGRVertex.h --- a/Models/ADD/ADDModelWWWGRVertex.h +++ b/Models/ADD/ADDModelWWWGRVertex.h @@ -1,153 +1,148 @@ // -*- C++ -*- // // ADDModelWWWGRVertex.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_ADDModelWWWGRVertex_H #define HERWIG_ADDModelWWWGRVertex_H // // This is the declaration of the ADDModelWWWGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h" #include "ADDModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The ADDModelWWWGRVertex class is the implementation of the * triple vector graviton couling in the ADD model. * It inherits from VVVTVertex and implements the setCoupling member. * * @see VVVTVertex * @see VertexBase */ class ADDModelWWWGRVertex: public VVVTVertex { public: /** * Default constructor. */ ADDModelWWWGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, Energy mass=-GeV, Energy width=-GeV); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ADDModelWWWGRVertex> initADDModelWWWGRVertex; - - /** * Private and non-existent assignment operator. */ ADDModelWWWGRVertex & operator=(const ADDModelWWWGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The graviton coupling. */ InvEnergy kappa_; /** * Mass ratio for the propagator */ Energy r_; /** * The last value of the coupling/ */ Complex couplast_; /** * The last value of the scale, \f$q^2\f$. */ Energy2 q2last_; /** * The prefactor for the \f$Z\f$ vertex. */ double zfact_; //@} }; } #endif /* HERWIG_ADDModelWWWGRVertex_H */ diff --git a/Models/ADD/GravitonMassGenerator.h b/Models/ADD/GravitonMassGenerator.h --- a/Models/ADD/GravitonMassGenerator.h +++ b/Models/ADD/GravitonMassGenerator.h @@ -1,140 +1,134 @@ // -*- C++ -*- #ifndef HERWIG_GravitonMassGenerator_H #define HERWIG_GravitonMassGenerator_H // // This is the declaration of the GravitonMassGenerator class. // #include "Herwig/PDT/GenericMassGenerator.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the GravitonMassGenerator class. * * @see \ref GravitonMassGeneratorInterfaces "The interfaces" * defined for GravitonMassGenerator. */ class GravitonMassGenerator: public GenericMassGenerator { public: /** * The default constructor. */ GravitonMassGenerator(); 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; /** 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; //@} 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(); //@} protected: /** * Return a mass with the weight using the specified limits. * @param part The particle data pointer of the particle. * @param low The lower limit on the particle's mass. * @param upp The upper limit on the particle's mass. * @param wgt The weight for this mass. * @param shape The type of shape to use * @param r The random number used for the weight * @return The mass of the particle instance. */ virtual Energy mass(double & wgt, const ParticleData & part, const Energy low,const Energy upp, int shape, double r=UseRandom::rnd()) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<GravitonMassGenerator> initGravitonMassGenerator; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GravitonMassGenerator & operator=(const GravitonMassGenerator &); private: /** * prefactor */ double prefactor_; /** * Number of extra dimensions */ unsigned int delta_; /** * d-dimensional Planck mass */ Energy md_; /** * Minimum mass cut to avoid numerical problems */ Energy mMin_; }; } #endif /* HERWIG_GravitonMassGenerator_H */ diff --git a/Models/General/BSMWidthGenerator.h b/Models/General/BSMWidthGenerator.h --- a/Models/General/BSMWidthGenerator.h +++ b/Models/General/BSMWidthGenerator.h @@ -1,131 +1,125 @@ // -*- C++ -*- // // BSMWidthGenerator.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_BSMWidthGenerator_H #define HERWIG_BSMWidthGenerator_H // // This is the declaration of the BSMWidthGenerator class. // #include "Herwig/PDT/GenericWidthGenerator.h" #include "Herwig/Decay/General/GeneralTwoBodyDecayer.fh" #include "BSMWidthGenerator.fh" namespace Herwig { using namespace ThePEG; /** * This class is designed to be able to calculate the running * width for a BSM particle given the decay mode and partial width * calculated from the decayer. * * @see \ref BSMWidthGeneratorInterfaces "The interfaces" * defined for BSMWidthGenerator. */ class BSMWidthGenerator: public GenericWidthGenerator { public: /** * The default constructor. */ BSMWidthGenerator() : theModes(0) {} /** @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: /** * Perform the set up for a mode in classes inheriting from this one * @param mode The decay mode * @param decayer The decayer for the mode. * @param imode The number of the mode. */ virtual void setupMode(tcDMPtr mode, tDecayIntegratorPtr decayer, unsigned int imode); /** * The \f$1\to2\f$ width for outgoing particles which can be off-shell. * @param iloc The location of the mode in the list. * @param m0 The mass of the decaying particle. * @param m1 The mass of the first outgoing particle. * @param m2 The mass of the second outgoing particle. * @return The partial width. */ virtual Energy partial2BodyWidth(int iloc,Energy m0,Energy m1,Energy m2) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<BSMWidthGenerator> initBSMWidthGenerator; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ BSMWidthGenerator & operator=(const BSMWidthGenerator &); private: /** * A vector decay modes with their associated decayer * cast to GeneralTwoBodyDecayer. */ vector<pair<tcDMPtr, tcGeneralTwoBodyDecayerPtr> > theModes; }; /** * An exception class to report an error. */ class BSMWidthException : public Exception {}; } #endif /* HERWIG_BSMWidthGenerator_H */ diff --git a/Models/General/DecayConstructor.h b/Models/General/DecayConstructor.h --- a/Models/General/DecayConstructor.h +++ b/Models/General/DecayConstructor.h @@ -1,173 +1,167 @@ // -*- C++ -*- // // DecayConstructor.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_DecayConstructor_H #define HERWIG_DecayConstructor_H // // This is the declaration of the DecayConstructor class. // #include "ThePEG/Interface/Interfaced.h" #include "NBodyDecayConstructorBase.h" #include "Herwig/Decay/Radiation/DecayRadiationGenerator.h" #include "DecayConstructor.fh" namespace Herwig { using namespace ThePEG; /** * The DecayConstructor class is an interfaced class that stores a * vector of NBodyDecayConstructor objects and calls the appropriate * function to create the decayers and decaymodes. There is also an interface * to add decay mode tags of the form a->b,c,...; which will not * be created. * * @see \ref DecayConstructorInterfaces "The interfaces" * defined for DecayConstructor. * @see Interfaced */ class DecayConstructor: public Interfaced { public: /** * The default constructor. */ DecayConstructor() : NBodyDecayConstructors_(0), _disableDMTags(0), _minBR(0.) {} 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(); /** * Function to create decayers * @param particles vector of ParticleData pointers to particles contained * in model * @param minBR minimum branching ratio for modes */ void createDecayers(const vector<PDPtr> & particles, double minBR); /** * Check whether the decay mode given is one that should not be * created * @param tag The decay mode tag, a->b,c,d,...; */ bool disableDecayMode(string tag) const; /** * QED Generator */ DecayRadiationGeneratorPtr QEDGenerator() {return QEDGenerator_;} /** * Vector of references to the objects that will construct the N-Body * decays. */ const vector<NBodyDecayConstructorBasePtr> & decayConstructors() { return NBodyDecayConstructors_; } /** * Get minimum branching ratio */ double minimumBR() const { return _minBR;} 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(); //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<DecayConstructor> initDecayConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DecayConstructor & operator=(const DecayConstructor &); private: /** * Vector of references to the objects that will construct the N-Body * decays. */ vector<NBodyDecayConstructorBasePtr> NBodyDecayConstructors_; /** * A list of DecayMode tags that are not to be created */ vector<string> _disableDMTags; /** * The decay radiation generator to use for QED radiation */ DecayRadiationGeneratorPtr QEDGenerator_; /** * Minimum allowed branching ratio */ double _minBR; }; } #endif /* HERWIG_DecayConstructor_H */ diff --git a/Models/General/HardProcessConstructor.h b/Models/General/HardProcessConstructor.h --- a/Models/General/HardProcessConstructor.h +++ b/Models/General/HardProcessConstructor.h @@ -1,217 +1,211 @@ // -*- C++ -*- #ifndef HERWIG_HardProcessConstructor_H #define HERWIG_HardProcessConstructor_H // // This is the declaration of the HardProcessConstructor class. // #include "ThePEG/Interface/Interfaced.h" #include "HPDiagram.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/StandardEventHandler.h" #include "Herwig/MatrixElement/General/GeneralHardME.h" #include "HardProcessConstructor.fh" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the HardProcessConstructor class. * * @see \ref HardProcessConstructorInterfaces "The interfaces" * defined for HardProcessConstructor. */ class HardProcessConstructor: public Interfaced { public: /** Vector of HPDiagrams. */ typedef vector<HPDiagram> HPDVector; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ HardProcessConstructor() : debug_(false) {} //@} /** * The main function to create diagrams etc for the processes */ virtual void constructDiagrams() = 0; 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: /** Functions to set up colour flows and matrix elements. */ //@{ /** * Determine whether the ordering of the outgoing states is the same * as the ordering in the matrix elements * @param diag The diagram to question */ void fixFSOrder(HPDiagram & diag); /** * Assign a diagram to the appropriate colour flow(s). * @param diag The diagram to assign */ void assignToCF(HPDiagram & diag); /** * Assign a $s$-channel diagram to the appropriate colour flow(s). * @param diag The diagram to assign */ void sChannelCF(HPDiagram & diag); /** * Assign a $t$-channel diagram to the appropriate colour flow(s). * @param diag The diagram to assign */ void tChannelCF(HPDiagram & diag); /** * Assign a $u$-channel diagram to the appropriate colour flow(s). * @param diag The diagram to assign */ void uChannelCF(HPDiagram & diag); /** * Assign a $u$-channel diagram to the appropriate colour flow(s). * @param diag The diagram to assign */ void fourPointCF(HPDiagram & diag); //@} /** * Pointer to the model being used */ tHwSMPtr model() const {return model_;} /** * Pointer to the sub process handler */ tSubHdlPtr subProcess() const {return subProcess_;} /** * Whether to print the debug information with the matrix * element. This is here solely so it can be passed to * a matrix element that is created here. */ bool debug() const {return debug_;} /** * Get the correct colour factor matrix. * @param extpart Vector of external ParticleData pointers */ GeneralHardME::ColourStructure colourFlow(const tcPDVector & extpart) const; /** * Search for a diagram that has already been created * @param diagram The diagram to search for * @param group The group of diagrams to search through */ bool duplicate(const HPDiagram & diagram, const HPDVector & group) const; 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<HardProcessConstructor> initHardProcessConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ HardProcessConstructor & operator=(const HardProcessConstructor &); private: /** * Pointer to the model being used */ tHwSMPtr model_; /** * Pointer to the sub process handler */ tSubHdlPtr subProcess_; /** * Whether to print the debug information with the matrix * element. This is here solely so it can be passed to * a matrix element that is created here. */ bool debug_; }; namespace HPC_helper { // Helper functor for find_if in duplicate function. class SameIncomingAs { public: SameIncomingAs(tPDPair in) : a(in.first->id()), b(in.second->id()) {} bool operator()(tPDPair ppair) const { long id1(ppair.first->id()), id2(ppair.second->id()); return ( id1 == a && id2 == b ) || ( id1 == b && id2 == a ); } private: long a, b; }; inline bool duplicateIncoming(tPDPair ppair,const vector<tPDPair> &incPairs) { vector<tPDPair>::const_iterator it = find_if( incPairs.begin(), incPairs.end(), SameIncomingAs(ppair) ); return it != incPairs.end(); } } } #endif /* HERWIG_HardProcessConstructor_H */ diff --git a/Models/General/HiggsVBFProcessConstructor.h b/Models/General/HiggsVBFProcessConstructor.h --- a/Models/General/HiggsVBFProcessConstructor.h +++ b/Models/General/HiggsVBFProcessConstructor.h @@ -1,119 +1,112 @@ // -*- C++ -*- #ifndef HERWIG_HiggsVBFProcessConstructor_H #define HERWIG_HiggsVBFProcessConstructor_H // // This is the declaration of the HiggsVBFProcessConstructor class. // #include "HardProcessConstructor.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the HiggsVBFProcessConstructor class. * * @see \ref HiggsVBFProcessConstructorInterfaces "The interfaces" * defined for HiggsVBFProcessConstructor. */ class HiggsVBFProcessConstructor: public HardProcessConstructor { public: /** * The default constructor. */ HiggsVBFProcessConstructor(); /** * Main function called to start constructing the diagrams for * the 2->2 process */ void constructDiagrams(); 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<HiggsVBFProcessConstructor> - initHiggsVBFProcessConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ HiggsVBFProcessConstructor & operator=(const HiggsVBFProcessConstructor &); private: /** * The outgoing higgs bosons */ PDVector _higgs; /** * Collision Type */ bool _type; /** * Treatment of the Higgs width */ unsigned int _shapeOpt; /** * which intermediates to include */ unsigned int _intermediates; }; } #endif /* HERWIG_HiggsVBFProcessConstructor_H */ diff --git a/Models/General/HiggsVectorBosonProcessConstructor.h b/Models/General/HiggsVectorBosonProcessConstructor.h --- a/Models/General/HiggsVectorBosonProcessConstructor.h +++ b/Models/General/HiggsVectorBosonProcessConstructor.h @@ -1,125 +1,118 @@ // -*- C++ -*- #ifndef HERWIG_HiggsVectorBosonProcessConstructor_H #define HERWIG_HiggsVectorBosonProcessConstructor_H // // This is the declaration of the HiggsVectorBosonProcessConstructor class. // #include "HardProcessConstructor.h" #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the HiggsVectorBosonProcessConstructor class. * * @see \ref HiggsVectorBosonProcessConstructorInterfaces "The interfaces" * defined for HiggsVectorBosonProcessConstructor. */ class HiggsVectorBosonProcessConstructor: public HardProcessConstructor { public: /** * The default constructor. */ HiggsVectorBosonProcessConstructor(); /** * Main function called to start constructing the diagrams for * the 2->2 process */ void constructDiagrams(); 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<HiggsVectorBosonProcessConstructor> - initHiggsVectorBosonProcessConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ HiggsVectorBosonProcessConstructor & operator=(const HiggsVectorBosonProcessConstructor &); private: /** * The allowed outgoing vector bosons */ PDVector _vector; /** * The outgoing higgs bosons */ PDVector _higgs; /** * Collision Type */ bool _type; /** * Treatment of the Higgs width */ unsigned int _shapeOpt; /** * The shower coupling for the Matrix Element corrections */ ShowerAlphaPtr _alpha; }; } #endif /* HERWIG_HiggsVectorBosonProcessConstructor_H */ diff --git a/Models/General/ModelGenerator.h b/Models/General/ModelGenerator.h --- a/Models/General/ModelGenerator.h +++ b/Models/General/ModelGenerator.h @@ -1,225 +1,219 @@ // -*- C++ -*- // // ModelGenerator.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_ModelGenerator_H #define HERWIG_ModelGenerator_H // // This is the declaration of the ModelGenerator class. // #include "ThePEG/Interface/Interfaced.h" #include "DecayConstructor.h" #include "HardProcessConstructor.h" #include "ModelGenerator.fh" namespace Herwig { using namespace ThePEG; /** * This class is designed to store the particles in some model and * then call the appropriate function to setup the model * * @see \ref ModelGeneratorInterfaces "The interfaces" * defined for ModelGenerator. * @see Interfaced */ class ModelGenerator: public Interfaced { public: /** * The default constructor. */ ModelGenerator() : particles_(0), offshell_(0), Offsel_(0), BRnorm_(true), Npoints_(10), Iorder_(1), BWshape_(0), brMin_(1e-6), twoBodyOnly_(false), decayOutput_(1), minWidth_(1e-6), howOffShell_(5.) {} 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(); /** * Overloaded function from Interfaced */ virtual bool preInitialize() const { return true; } 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(); //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<ModelGenerator> initModelGenerator; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ ModelGenerator & operator=(const ModelGenerator &); private: /** * Check the decay modes a given particle type. This checks whether * the decay has quarks in the final state and that they can be put on * mass-shell during the shower. * @param parent The parent particle */ void checkDecays(PDPtr parent); /** * Write out the spectrum of masses and decay modes */ void writeDecayModes(ostream & ofs, tcPDPtr parent) const; /** * Create mass and width generators to simulate off-shell effects * @param p A pointer to the ParticleData object to create * the width and mass generators for. */ void createWidthGenerator(tPDPtr p); private: /** * Pointer to the TwoToTwoProcessConstructor */ vector<HPConstructorPtr> hardProcessConstructors_; /** * Pointer to DecayConstructor */ DecayConstructorPtr _theDecayConstructor; /** * Vector of ParticleData pointer */ PDVector particles_; /** @name Width and Mass Generator variables. */ //@{ /** * The particles to create MassGenerator and WidthGenerators */ PDVector offshell_; /** * Which particles to treat as off-shell. 1 treats all particles in * particles_ vector as off-shell, 0 allows selection via * offshell_ vector. */ int Offsel_; /** * Whether to normalise the partial widths to BR*Total width for * an on-shell particle */ bool BRnorm_; /** * The number of points to include in the interpolation table */ int Npoints_; /** * The order for the interpolation */ unsigned int Iorder_; /** * The shape of the Breit-Wigner used in the mass generation */ int BWshape_; /** * The minimum branching ratio to use */ double brMin_; /** * Whether to use only two-body or all modes for running width */ bool twoBodyOnly_; //@} /** * Option for the outputs of the decays to a file */ unsigned int decayOutput_; /** * Minimum fraction of particle's mass width can be for off-shell * treatment */ double minWidth_; /** * How much a particle is allowed to be offshell */ double howOffShell_; }; } #endif /* HERWIG_ModelGenerator_H */ diff --git a/Models/General/NBodyDecayConstructorBase.h b/Models/General/NBodyDecayConstructorBase.h --- a/Models/General/NBodyDecayConstructorBase.h +++ b/Models/General/NBodyDecayConstructorBase.h @@ -1,347 +1,340 @@ // -*- C++ -*- // // NBodyDecayConstructorBase.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_NBodyDecayConstructorBase_H #define HERWIG_NBodyDecayConstructorBase_H // // This is the declaration of the NBodyDecayConstructorBase class. // #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/PDT/ParticleData.h" #include "NBodyDecayConstructorBase.fh" #include "PrototypeVertex.h" #include "DecayConstructor.fh" namespace Herwig { using namespace ThePEG; /** * This is the base class for NBodyDecayConstructors. An N-body * decay constructor should inherit from this and implement the * DecayList virtual funtcion to create the decays and decayers. * * @see \ref NBodyDecayConstructorBaseInterfaces "The interfaces" * defined for NBodyDecayConstructor. */ class NBodyDecayConstructorBase: public Interfaced { public: /** * The default constructor. */ NBodyDecayConstructorBase() : init_(true),iteration_(1), points_(1000), info_(false), createModes_(true), removeOnShell_(1), excludeEffective_(true), minReleaseFraction_(1e-3), maxBoson_(1), maxList_(1), includeTopOnShell_(false ), removeFlavourChangingVertices_(false), removeSmallVertices_(false), minVertexNorm_(1e-8) {} /** * Function used to determine allowed decaymodes, to be implemented * in derived class. * @param particles vector of ParticleData pointers containing * particles in model */ virtual void DecayList(const set<PDPtr> & particles); /** * Number of outgoing lines. Required for correct ordering. */ virtual unsigned int numBodies() const = 0; /** * Set the pointer to the DecayConstrcutor */ void decayConstructor(tDecayConstructorPtr d) { decayConstructor_ = d; } /** * Remove flavour changing vertices ? */ bool removeFlavourChangingVertices() const { return removeFlavourChangingVertices_; } /** * Remove small vertices ? */ bool removeSmallVertices() const { return removeSmallVertices_; } /** * Minimum norm for vertex removal */ double minVertexNorm() const { return minVertexNorm_; } protected: /** * Method to set up the decay mode, should be overidden in inheriting class */ virtual void createDecayMode(vector<NBDiagram> & mode, bool possibleOnShell, double symfac); /** * Set the branching ratio of this mode. This requires * calculating a new width for the decaying particle and reweighting * the current branching fractions. * @param dm The decaymode for which to set the branching ratio * @param pwidth The calculated width of the mode */ void setBranchingRatio(tDMPtr dm, Energy pwidth); /** * Set the interfaces of the decayers depending on the flags stored. * @param name Fullname of the decayer in the EventGenerator * including the path */ void setDecayerInterfaces(string name) const; /** * Whether to initialize decayers or not */ bool initialize() const { return init_; } /** * Number of iterations if initializing (default 1) */ int iteration() const { return iteration_; } /** * Number of points to do in initialization */ int points() const { return points_; } /** * Whether to output information on the decayers */ bool info() const { return info_; } /** * Whether to create the DecayModes as well as the Decayer objects */ bool createDecayModes() const { return createModes_; } /** * Maximum number of electroweak gauge bosons */ unsigned int maximumGaugeBosons() const { return maxBoson_;} /** * Maximum number of particles from the list whose decays we are calculating */ unsigned int maximumList() const { return maxList_;} /** * Minimum energy release fraction */ double minimumReleaseFraction() const {return minReleaseFraction_;} /** * Get the pointer to the DecayConstructor object */ tDecayConstructorPtr decayConstructor() const { return decayConstructor_; } /** * Option for on-shell particles */ unsigned int removeOnShell() const { return removeOnShell_; } /** * Check if a vertex is excluded */ bool excluded(VertexBasePtr vertex) const { // skip an effective vertex if( excludeEffective_ && int(vertex->orderInGs() + vertex->orderInGem()) != int(vertex->getNpoint())-2) return true; // check if explicitly forbidden return excludedVerticesSet_.find(vertex)!=excludedVerticesSet_.end(); } 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 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is an abstract class with persistent data. - */ - static AbstractClassDescription<NBodyDecayConstructorBase> - initNBodyDecayConstructorBase; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NBodyDecayConstructorBase & operator=(const NBodyDecayConstructorBase &); private: /** * Whether to initialize decayers or not */ bool init_; /** * Number of iterations if initializing (default 1) */ int iteration_; /** * Number of points to do in initialization */ int points_; /** * Whether to output information on the decayers */ bool info_; /** * Whether to create the DecayModes as well as the Decayer objects */ bool createModes_; /** * Whether or not to remove on-shell diagrams */ unsigned int removeOnShell_; /** * Excluded Vertices */ vector<VertexBasePtr> excludedVerticesVector_; /** * Excluded Vertices */ set<VertexBasePtr> excludedVerticesSet_; /** * Excluded Particles */ vector<PDPtr> excludedParticlesVector_; /** * Excluded Particles */ set<PDPtr> excludedParticlesSet_; /** * Whether or not to exclude effective vertices */ bool excludeEffective_; /** * A pointer to the DecayConstructor object */ tDecayConstructorPtr decayConstructor_; /** * The minimum energy release for a three-body decay as a * fraction of the parent mass */ double minReleaseFraction_; /** * Maximum number of EW gauge bosons */ unsigned int maxBoson_; /** * Maximum number of particles from the decaying particle list */ unsigned int maxList_; /** * Include on-shell for \f$t\to b W\f$ */ bool includeTopOnShell_; /** * Remove flavour changing vertices ? */ bool removeFlavourChangingVertices_; /** * Remove small vertices ? */ bool removeSmallVertices_; /** * Minimum norm for vertex removal */ double minVertexNorm_; }; /** An Exception class that can be used by all inheriting classes to * indicate a setup problem. */ class NBodyDecayConstructorError : public Exception { public: NBodyDecayConstructorError() : Exception() {} NBodyDecayConstructorError(const string & str, Severity sev) : Exception(str,sev) {} }; } #endif /* HERWIG_NBodyDecayConstructorBase_H */ diff --git a/Models/General/QQHiggsProcessConstructor.h b/Models/General/QQHiggsProcessConstructor.h --- a/Models/General/QQHiggsProcessConstructor.h +++ b/Models/General/QQHiggsProcessConstructor.h @@ -1,117 +1,111 @@ // -*- C++ -*- #ifndef HERWIG_QQHiggsProcessConstructor_H #define HERWIG_QQHiggsProcessConstructor_H // // This is the declaration of the QQHiggsProcessConstructor class. // #include "HardProcessConstructor.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the QQHiggsProcessConstructor class. * * @see \ref QQHiggsProcessConstructorInterfaces "The interfaces" * defined for QQHiggsProcessConstructor. */ class QQHiggsProcessConstructor: public HardProcessConstructor { public: /** * The default constructor. */ QQHiggsProcessConstructor(); /** * Main function called to start constructing the diagrams for * the 2->2 process */ void constructDiagrams(); 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<QQHiggsProcessConstructor> initQQHiggsProcessConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ QQHiggsProcessConstructor & operator=(const QQHiggsProcessConstructor &); private: /** * Which partonic processes to include */ unsigned int _process; /** * Which outgoing quark flavours to include */ unsigned int _quarkFlavour; /** * The outgoing higgs bosons */ PDVector _higgs; /** * Treatment of the Higgs width */ unsigned int _shapeOpt; }; } #endif /* HERWIG_QQHiggsProcessConstructor_H */ diff --git a/Models/General/ResonantProcessConstructor.h b/Models/General/ResonantProcessConstructor.h --- a/Models/General/ResonantProcessConstructor.h +++ b/Models/General/ResonantProcessConstructor.h @@ -1,218 +1,211 @@ // -*- C++ -*- // // ResonantProcessConstructor.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_ResonantProcessConstructor_H #define HERWIG_ResonantProcessConstructor_H // // This is the declaration of the ResonantProcessConstructor class. // #include "HardProcessConstructor.h" #include "ThePEG/Utilities/Exception.h" #include "ResonantProcessConstructor.fh" namespace Herwig { using namespace ThePEG; /** * This class is designed to construct the diagrams for resonant processes * using a provdided set of particles as interemdiates. * * @see \ref ResonantProcessConstructorInterfaces "The interfaces" * defined for ResonantProcessConstructor. * @see HardProcessConstructor */ class ResonantProcessConstructor: public HardProcessConstructor { public: /** Set of ParticleData pointers */ typedef set<tPDPtr> tPDSet; /** Nested vector of doubles. */ typedef vector<vector<double> > CFMatrix; /** Enumeration for the direction */ enum direction {incoming, outgoing}; public: /** * The default constructor. */ ResonantProcessConstructor() : processOption_(0), scaleChoice_(1), scaleFactor_(1.), incoming_(0), intermediates_(0), outgoing_(0), diagrams_(0) {} 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(); /** * The main function to create the resonant diagrams */ void constructDiagrams() ; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} protected: /** @name Standard HardProcessConstructor 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(); //@} private: /** * Utility function to help second vertex */ void constructVertex2(IDPair in, VertexBasePtr vertex, PDPtr partc); /** * Function to create the appropriate diagrams */ void makeResonantDiagram(IDPair in, PDPtr offshell, long outa, long outb, VBPair vertices); /** * Given a vertex and 2 particle id's find the possible states * that can be the 3rd external particle * @param vertex Pointer to the vertex * @param part1 id of first particle * @param d1 direction of particle one * @param part2 id of other particle * @param d2 direction of particle two * @param d3 required direction of 3rd state (default = outgoing) * @return container of third particles */ tPDSet search(VertexBasePtr vertex, long part1, direction d1, long part2, direction d2, direction d3 = outgoing); /** * Return the pair of outgoing particles from the list */ IDPair find(long part, const PDVector & out) const; /** * Create a matrix element from the given resonant process diagram */ void createMatrixElement(const HPDiagram & diag) const; /** * Create the correct classname and objectname for a matrix element */ string MEClassname(const tcPDVector & extpart, tcPDPtr inter, string & objname) const; private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<ResonantProcessConstructor> - initResonantProcessConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ ResonantProcessConstructor & operator=(const ResonantProcessConstructor &); private: /** * Which types of processes to generate */ unsigned int processOption_; /** * Scale choice */ unsigned int scaleChoice_; /** * Prefactor for the scale calculation */ double scaleFactor_; /** * Storage for the required intermediate particles */ vector<PDPtr> incoming_; /** * Storage for the required intermediate particles */ vector<PDPtr> intermediates_; /** * Storage for the required intermediate particles */ vector<PDPtr> outgoing_; /** * Storage for the diagrams */ vector<HPDiagram> diagrams_; }; /** Exception class indicating setup problem. */ class RPConstructorError : public Exception {}; } #endif /* HERWIG_ResonantProcessConstructor_H */ diff --git a/Models/General/ThreeBodyDecayConstructor.h b/Models/General/ThreeBodyDecayConstructor.h --- a/Models/General/ThreeBodyDecayConstructor.h +++ b/Models/General/ThreeBodyDecayConstructor.h @@ -1,173 +1,167 @@ // -*- C++ -*- #ifndef HERWIG_ThreeBodyDecayConstructor_H #define HERWIG_ThreeBodyDecayConstructor_H // // This is the declaration of the ThreeBodyDecayConstructor class. // #include "NBodyDecayConstructorBase.h" #include "ThePEG/Helicity/Vertex/VertexBase.h" #include "TBDiagram.h" #include "PrototypeVertex.h" #include "Herwig/Decay/General/GeneralThreeBodyDecayer.fh" namespace Herwig { using namespace ThePEG; using Helicity::VertexBasePtr; /** * The ThreeBodyDecayConstructor class inherits from the dummy base class * NBodyDecayConstructorBase and implements the necessary functions in * order to create the 3 body decaymodes for a given set of vertices * stored in a Model class. * * @see \ref ThreeBodyDecayConstructorInterfaces "The interfaces" * defined for ThreeBodyDecayConstructor. * @see NBodyDecayConstructor */ class ThreeBodyDecayConstructor: public NBodyDecayConstructorBase { public: /** * The default constructor. */ ThreeBodyDecayConstructor() : includeIntermediatePhotons_(false), interOpt_(0), widthOpt_(1), weakMassCut_(-GeV), intOpt_(1), relErr_(1e-2) {} /** * Function used to determine allowed decaymodes, to be implemented * in derived class. *@param part vector of ParticleData pointers containing particles in model */ virtual void DecayList(const set<PDPtr> & part); /** * Number of outgoing lines. Required for correct ordering. */ virtual unsigned int numBodies() const { return 3; } protected: /** * Create the decayer * @param diagrams The diagrams for the decay * @param inter Option for intermediates */ GeneralThreeBodyDecayerPtr createDecayer(vector<TBDiagram> & diagrams, bool inter,double symfac) const; /** * Contruct the classname and object name for the Decayer * @param incoming The incoming particle * @param outgoing The decay products * @param objname a string containing the default path of the Decayer object */ string DecayerClassName(tcPDPtr incoming, const OrderedParticles & outgoing, string & objname) const; /** * Create the DecayMode from the diagrams * @param diagrams The diagrams * @param inter Option for intermediates */ virtual void createDecayMode(vector<NBDiagram> & mode, bool possibleOnShell, double symfac); 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<ThreeBodyDecayConstructor> initThreeBodyDecayConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ ThreeBodyDecayConstructor & operator=(const ThreeBodyDecayConstructor &); private: /** * Option for intermediate photons */ bool includeIntermediatePhotons_; /** * Option for the inclusion of intermediates */ unsigned int interOpt_; /** * How to treat the widths of the intermediate particles */ unsigned int widthOpt_; /** * Cut off or decays via the weak current */ Energy weakMassCut_; /** * Option for the integration to get the partial width */ unsigned int intOpt_; /** * Relative error for partial width integration */ double relErr_; }; } #endif /* HERWIG_ThreeBodyDecayConstructor_H */ diff --git a/Models/General/TwoBodyDecayConstructor.h b/Models/General/TwoBodyDecayConstructor.h --- a/Models/General/TwoBodyDecayConstructor.h +++ b/Models/General/TwoBodyDecayConstructor.h @@ -1,149 +1,143 @@ // -*- C++ -*- // // TwoBodyDecayConstructor.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_TwoBodyDecayConstructor_H #define HERWIG_TwoBodyDecayConstructor_H // // This is the declaration of the TwoBodyDecayConstructor class. // #include "NBodyDecayConstructorBase.h" #include "ThePEG/Helicity/Vertex/VertexBase.h" #include "Herwig/Decay/General/GeneralTwoBodyDecayer.fh" #include "TwoBodyDecay.h" namespace Herwig { using namespace ThePEG; using Helicity::VertexBasePtr; using Helicity::tVertexBasePtr; /** * The TwoBodyDecayConstructor class inherits from the dummy base class * NBodyDecayConstructorBase and implements the necessary functions in * order to create the 2 body decay modes for a given set of vertices * stored in a Model class. * * @see \ref TwoBodyDecayConstructorInterfaces "The interfaces" * defined for TwoBodyDecayConstructor. * @see NBodyDecayConstructor **/ class TwoBodyDecayConstructor: public NBodyDecayConstructorBase { public: /** * The default constructor. */ TwoBodyDecayConstructor() : showerAlpha_("/Herwig/Shower/AlphaQCD") {} /** * Function used to determine allowed decaymodes *@param part vector of ParticleData pointers containing particles in model */ virtual void DecayList(const set<PDPtr> & part); /** * Number of outgoing lines. Required for correct ordering. */ virtual unsigned int numBodies() const { return 2; } public: /** * 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; /** 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; //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static NoPIOClassDescription<TwoBodyDecayConstructor> initTwoBodyDecayConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ TwoBodyDecayConstructor & operator=(const TwoBodyDecayConstructor &); private: /** @name Functions to create decayers and decaymodes. */ //@{ /** * Function to create decays * @param inpart Incoming particle * @param vert The vertex to create decays for * @param ilist Which list to search * @param iv Row number in _theExistingDecayers member * @return A vector a decay modes */ set<TwoBodyDecay> createModes(tPDPtr inpart, VertexBasePtr vert, unsigned int ilist); /** * Function to create decayer for specific vertex * @param decay decay mode for this decay * member variable */ GeneralTwoBodyDecayerPtr createDecayer(TwoBodyDecay decay); /** * Create decay mode(s) from given part and decay modes * @param decays The vector of decay modes * @param decayer The decayer responsible for this decay */ void createDecayMode(set<TwoBodyDecay> & decays); //@} /** * Get the vertex for QCD radiation */ VertexBasePtr radiationVertex(tPDPtr particle,tPDPair children = tPDPair ()); private: /** * Map of particles and the vertices which generate their QCD * radiation */ map<tPDPtr,VertexBasePtr> radiationVertices_; /** * Default choice for the strong coupling object for hard radiation */ string showerAlpha_; }; } #endif /* HERWIG_TwoBodyDecayConstructor_H */ diff --git a/Models/General/TwoToTwoProcessConstructor.h b/Models/General/TwoToTwoProcessConstructor.h --- a/Models/General/TwoToTwoProcessConstructor.h +++ b/Models/General/TwoToTwoProcessConstructor.h @@ -1,319 +1,313 @@ // -*- C++ -*- // // TwoToTwoProcessConstructor.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_TwoToTwoProcessConstructor_H #define HERWIG_TwoToTwoProcessConstructor_H // // This is the declaration of the TwoToTwoProcessConstructor class. // #include "HardProcessConstructor.h" #include "ThePEG/Utilities/Exception.h" #include "TwoToTwoProcessConstructor.fh" namespace Herwig { using namespace ThePEG; /** * The TwoToTwoProcessConstructor is designed to construct the diagrams that are * possible for a given set of incoming and outgoing particles. * * @see \ref TwoToTwoProcessConstructorInterfaces "The interfaces" * defined for TwoToTwoProcessConstructor. * @see HardProcessConstructor */ class TwoToTwoProcessConstructor: public HardProcessConstructor { public: /** Set of ParticleData pointers */ typedef set<tPDPtr> tPDSet; /** Map of HPDiagrams. */ typedef multimap<HPDiagram, HPDiagram> HPDMap; /** Enumeration for the direction */ enum direction {incoming, outgoing}; public: /** * The default constructor. */ TwoToTwoProcessConstructor(); 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(); public: /** * Main function called to start constructing the diagrams for * the 2->2 process */ void constructDiagrams(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} protected: /** @name Standard HardProcessConstructor 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<TwoToTwoProcessConstructor> initTwoToTwoProcessConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ TwoToTwoProcessConstructor & operator=(const TwoToTwoProcessConstructor &); private: /** Functions to create the diagrams.*/ //@{ /** * Given a vertex and 2 particle id's find the possible states * that can be the 3rd external particle * @param vertex Pointer to the vertex * @param part1 id of first particle * @param d1 direction of particle one * @param part2 id of other particle * @param d2 direction of particle two * @param d3 required direction of 3rd state (default = outgoing) * @return container of third particles */ tPDSet search(VertexBasePtr vertex, long part1, direction d1, long part2, direction d2, direction d3 = outgoing); /** * Given a vertex and 3 particle id's find the possible states * that can be the 4th external particle * @param vertex Pointer to the vertex * @param part1 id of first particle * @param d1 direction of particle one * @param part2 id of second particle * @param d2 direction of particle two * @param part3 id of third particle * @param d3 direction of particle three * @param d4 Required direction of fourth state (default = outgoing) * @return container of fourth particles */ tPDSet search(VertexBasePtr vertex, long part1, direction d1, long part2, direction d2, long part3, direction d3, direction d4 = outgoing); /** * Create the resonance diagrams. * @param inpp The incoming pair of particles. * @param fs A possible final state. * @param vertex The possible interaction vertex for the incoming pair */ void createSChannels(tcPDPair inpp, long fs, tVertexBasePtr vertex); /** * Create the scattering diagrams. * @param inpp The incoming pair of particles. * @param fs A possible final state. * @param vertex The first vertex */ void createTChannels(tPDPair inpp, long fs, tVertexBasePtr vertex); /** * Populate the diagram structure * @param in Pair of incoming particle id's * @param out1 first outgoing particle * @param out2 set of second outgoing particles * @param inter pointer to particle data for intermediate * @param chan the channel type * @param vertices pair of vertices for the diagram * @param order The order */ void makeDiagrams(IDPair in, long out1, const tPDSet & out2, PDPtr inter, HPDiagram::Channel chan, VBPair vertices, BPair order); /** * Create diagrams from 4 point vertices * @param parta id of first incoming particle * @param partb id of second incoming particle * @param partc id of first outgoing particle * @param vert pointer to the vertex */ void makeFourPointDiagrams(long parta,long partb,long partc, VertexBasePtr vert); /** * Create the matrix element that will calculate me2() for this * process * @param process vector of HardPrcoessDiagrams structs that store * the information about the diagrams */ void createMatrixElement(const HPDVector & process) const; //@} /** * Contruct the classname and object name for the matrix element * @param extpart vector containing incoming and outgoing particle data pointers * @param objname a string containing the default path of the ME object */ string MEClassname(const vector<tcPDPtr> & extpart, string & objname) const; private: /** * Required initial state particles */ PDVector incoming_; /** * Pairs of particles for initial state, ordered by spin or id. * If both are of differing spin then lowest is first and if the spin is * equal the particle goes first then the anti-particle. This is setup * in the doinit() member. */ vector<tPDPair> incPairs_; /** * Required final state particles */ PDVector outgoing_; /** * Number of incoming particles */ unsigned int Nout_; /** * Number of vertices in the model */ unsigned int nv_; /** * The vertices */ vector<VertexBasePtr> vertices_; /** * Store the configuration of the diagrams */ HPDVector processes_; /** * Whether to include all diagrams or just those with strong * coupling in them */ bool allDiagrams_; /** * Which types of processes to generate */ unsigned int processOption_; /** * Option for the scales */ unsigned int scaleChoice_; /** * Prefactor for the scale calculation */ double scaleFactor_; /** * Option to exclude certain intermediates */ vector<PDPtr> excluded_; /** * Option to exclude certain external particles */ vector<PDPtr> excludedExternal_; /** * Excluded Vertices */ vector<VertexBasePtr> excludedVertexVector_; /** * Excluded Vertices */ set<VertexBasePtr> excludedVertexSet_; }; /** Exception class indicating setup problem. */ class TwoToTwoProcessConstructorError : public Exception { public: /** * Exception for error handling * @param str Error message * @param sev Severity */ TwoToTwoProcessConstructorError(const string & str, Severity sev) : Exception(str,sev) {} }; } #endif /* HERWIG_TwoToTwoProcessConstructor_H */ diff --git a/Models/General/VVSLoopVertex.h b/Models/General/VVSLoopVertex.h --- a/Models/General/VVSLoopVertex.h +++ b/Models/General/VVSLoopVertex.h @@ -1,153 +1,147 @@ // -*- C++ -*- #ifndef HERWIG_VVSLoopVertex_H #define HERWIG_VVSLoopVertex_H // // This is the declaration of the VVSLoopVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/GeneralVVSVertex.h" #include "VVSLoopVertex.fh" namespace Herwig { using namespace ThePEG; /** * The <code>VVSLoopVertex</code> is designed to * calculate the coefficents for the terms in the * Passarino-Veltman tensor reduction scheme. A vertex * class should inherit from this and implement it's own * setCoupling member from which the VVSLoopVertex * setCoupling member is called. */ class VVSLoopVertex: public Helicity::GeneralVVSVertex { public: /** * The default constructor. */ VVSLoopVertex() : masses(0), type(0), couplings(0), Npart_(0), loopToolsInit_(false) { kinematics(true); } /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param part1 ParticleData pointer to first particle *@param part2 ParticleData pointer to first particle *@param part3 ParticleData pointer to first particle */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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; /** 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; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} protected: /** * Vector of loop masses */ vector<Energy> masses; /** * Vector of loop types */ vector<PDT::Spin> type; /** * The left and right couplings for a fermion loop */ vector<pair<Complex, Complex> > couplings; /** * Set the number of particles in the loop */ void setNParticles(unsigned int npart) { Npart_ = npart; } /** * Is loopTools initialized */ bool loopToolsInitialized() { return loopToolsInit_; } private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<VVSLoopVertex> initVVSLoopVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ VVSLoopVertex & operator=(const VVSLoopVertex &); private: /** * The number of particles in the loop */ unsigned int Npart_; /** * Loop tools initialised ? */ bool loopToolsInit_; }; } #endif /* HERWIG_VVSLoopVertex_H */ diff --git a/Models/General/WeakCurrentDecayConstructor.h b/Models/General/WeakCurrentDecayConstructor.h --- a/Models/General/WeakCurrentDecayConstructor.h +++ b/Models/General/WeakCurrentDecayConstructor.h @@ -1,202 +1,196 @@ // -*- C++ -*- // // WeakCurrentDecayConstructor.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_WeakCurrentDecayConstructor_H #define HERWIG_WeakCurrentDecayConstructor_H // // This is the declaration of the WeakCurrentDecayConstructor class. // #include "NBodyDecayConstructorBase.h" #include "ThePEG/Helicity/Vertex/VertexBase.h" #include "Herwig/Decay/DecayIntegrator.h" #include "Herwig/Decay/DecayPhaseSpaceMode.h" #include "Herwig/Decay/General/GeneralCurrentDecayer.fh" #include "Herwig/Models/StandardModel/StandardModel.h" #include "Herwig/Decay/WeakCurrents/WeakDecayCurrent.h" #include "Herwig/Decay/General/GeneralCurrentDecayer.h" #include "TwoBodyDecay.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the WeakCurrentDecayConstructor class. * * @see \ref WeakCurrentDecayConstructorInterfaces "The interfaces" * defined for WeakCurrentDecayConstructor. */ class WeakCurrentDecayConstructor: public NBodyDecayConstructorBase { public: /** * The default constructor. */ WeakCurrentDecayConstructor() : _masscut(5.*GeV) {} /** * Function used to determine allowed decaymodes, to be implemented * in derived class. *@param part vector of ParticleData pointers containing particles in model */ virtual void DecayList(const set<PDPtr> & part); /** * Number of outgoing lines. Required for correct ordering (do this one last) */ virtual unsigned int numBodies() const { return 1000; } /** * Cut off */ Energy massCut() const { return _masscut;} 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; /** 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; //@} 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(); //@} private: /** @name Functions to create decayers and decaymodes. */ //@{ /** * Function to create decays * @param inpart Incoming particle * @param vert The vertex to create decays for * @param ilist Which list to search * @param iv Row number in _theExistingDecayers member * @return vector of ParticleData ptrs */ vector<TwoBodyDecay> createModes(const PDPtr inpart,const VertexBasePtr vert, unsigned int ilist); /** * Function to create decayer for specific vertex * @param vert Pointer to vertex * @param icol Integer referring to the colmun in _theExistingDecayers * @param ivert Integer referring to the row in _theExistingDecayers * member variable */ GeneralCurrentDecayerPtr createDecayer(PDPtr in, PDPtr out1, vector<tPDPtr> outCurrent, VertexBasePtr vertex, WeakDecayCurrentPtr current); /** * Create decay mode(s) from given part and decay modes * @param inpart pointer to incoming particle * @param decays list of allowed interactions * @param decayer The decayer responsible for this decay */ void createDecayMode(vector<TwoBodyDecay> & decays); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<WeakCurrentDecayConstructor> initWeakCurrentDecayConstructor; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ WeakCurrentDecayConstructor & operator=(const WeakCurrentDecayConstructor &); private: /** * Model Pointer */ Ptr<Herwig::StandardModel>::pointer _theModel; /** * Cut-off on the mass difference */ Energy _masscut; /** * Tags for the modes */ vector<string> decayTags_; /** * Particles for the mode */ vector<vector<tPDPtr> > particles_; /** * Normalisation */ vector<double> _norm; /** * The current for the mode */ vector<WeakDecayCurrentPtr> _current; }; } #endif /* HERWIG_WeakCurrentDecayConstructor_H */ diff --git a/Models/Leptoquarks/LeptoquarkModel.h b/Models/Leptoquarks/LeptoquarkModel.h --- a/Models/Leptoquarks/LeptoquarkModel.h +++ b/Models/Leptoquarks/LeptoquarkModel.h @@ -1,321 +1,315 @@ // -*- C++ -*- #ifndef HERWIG_LeptoquarkModel_H #define HERWIG_LeptoquarkModel_H // // This is the declaration of the LeptoquarkModel class. // #include "Herwig/Models/General/BSMModel.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h" #include "LeptoquarkModel.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * Here is the documentation of the LeptoquarkModel class. * * @see \ref LeptoquarkModelInterfaces "The interfaces" * defined for LeptoquarkModel. */ class LeptoquarkModel: public BSMModel { public: /** * The default constructor. */ LeptoquarkModel(); /** @name Vertices */ //@{ /** * Pointer to the object handling S0S0barg vertex. */ tAbstractVSSVertexPtr vertexSLQSLQG() const {return _theSLQSLQGVertex;} /** * Pointer to the object handling the S0S0bargg vertex. */ tAbstractVVSSVertexPtr vertexSLQSLQGG() const {return _theSLQSLQGGVertex;} /** * Pointer to the object handling the S0ql vertex. */ tAbstractFFSVertexPtr vertexSLQFF() const {return _theSLQFFVertex;} 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(); /** * Return the overall fermion coupling */ double cfermion() const {return _CouplFF;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S0) */ double cleft() const {return _leftcoup;} /** * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (S0) */ double cright() const {return _rightcoup;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S1 triplet) */ double cleft1() const {return _leftcoup1;} /** * Return the coupling of the leptoquark to right-handed leptons * + left-handed quarks (~S0) */ double crighttilde() const {return _rightcouptilde;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S1/2) */ double cleft12() const {return _leftcoup12;} /** * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (S1/2) */ double cright12() const {return _rightcoup12;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S1/2) */ double cleft12tilde() const {return _leftcoup12t;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S0) */ double dcleft() const {return _dleftcoup;} /** * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (dS0) */ double dcright() const {return _drightcoup;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (dS1 triplet) */ double dcleft1() const {return _dleftcoup1;} /** * Return the coupling of the leptoquark to right-handed leptons * + left-handed quarks (~dS0) */ double dcrighttilde() const {return _drightcouptilde;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (dS1/2) */ double dcleft12() const {return _dleftcoup12;} /** * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (dS1/2) */ double dcright12() const {return _drightcoup12;} /** * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (dS1/2) */ double dcleft12tilde() const {return _dleftcoup12t;} /** * Suppression scale for derivatively coupled scalar leptoquarks */ Energy fscale() const {return _derivscalef;} 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(); //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<LeptoquarkModel> initLeptoquarkModel; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ LeptoquarkModel & operator=(const LeptoquarkModel &); /** * Pointer to the object handling the G to SLQ SLQ vertex. */ AbstractVSSVertexPtr _theSLQSLQGVertex; /** * Pointer to the object handling the GG to SLQ SLQ vertex. */ AbstractVVSSVertexPtr _theSLQSLQGGVertex; /** * Pointer to the object handling the SLQ to FF vertex. */ AbstractFFSVertexPtr _theSLQFFVertex; /** * Overall coupling to fermions */ double _CouplFF; /** * Overall coupling to left-handed leptons (S0) */ double _leftcoup; /** * Overall coupling to right-handed leptons (S0) */ double _rightcoup; /** * Overall coupling to left-handed leptons (~S0) */ double _rightcouptilde; /** * Overall coupling to left-handed leptons (S1 triplet) */ double _leftcoup1; /** * Overall coupling to left-handed leptons (S1/2) */ double _leftcoup12; /** * Overall coupling to right-handed leptons (S1/2) */ double _rightcoup12; /** * Overall coupling to left-handed leptons (~S1/2) */ double _leftcoup12t; /** * Overall coupling to left-handed leptons (dS0) */ double _dleftcoup; /** * Overall coupling to right-handed leptons (dS0) */ double _drightcoup; /** * Overall coupling to left-handed leptons (~dS0) */ double _drightcouptilde; /** * Overall coupling to left-handed leptons (dS1 triplet) */ double _dleftcoup1; /** * Overall coupling to left-handed leptons (dS1/2) */ double _dleftcoup12; /** * Overall coupling to right-handed leptons (dS1/2) */ double _drightcoup12; /** * Overall coupling to left-handed leptons (~dS1/2) */ double _dleftcoup12t; /** * Suppression scale for derivatively coupled scalar leptoquarks, f */ Energy _derivscalef; }; } #endif /* HERWIG_LeptoquarkModel_H */ diff --git a/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h b/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h --- a/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h +++ b/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h @@ -1,251 +1,246 @@ // -*- C++ -*- // // LeptoquarkModelSLQFFVertex.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_LeptoquarkModelSLQFFVertex_H #define HERWIG_LeptoquarkModelSLQFFVertex_H // // This is the declaration of the LeptoquarkModelSLQFFVertex class. #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h" #include "Herwig/Models/Leptoquarks/LeptoquarkModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFSVertex * @see VertexBase */ class LeptoquarkModelSLQFFVertex: public FFSVertex { public: /** * Default constructor. */ LeptoquarkModelSLQFFVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<LeptoquarkModelSLQFFVertex> initLeptoquarkModelSLQFFVertex; - - /** * Private and non-existent assignment operator. */ LeptoquarkModelSLQFFVertex & operator=(const LeptoquarkModelSLQFFVertex &); /** * Pointer to the model object. */ tcSMPtr _theModel; private: /** * Storage of the couplings. */ //@{ /** * Overall coupling to fermions */ double _CFF; /** * Overall coupling to left-handed leptons */ //double _cL; Complex _cL; /** * Overall coupling to right-handed leptons */ // double _cR; Complex _cR; /** * Overall coupling to left-handed leptons for S0 */ // double _cL0; Complex _cL0; /** * Overall coupling to right-handed leptons for S0 */ // double _cR0; Complex _cR0; /** * Overall coupling to right-handed leptons for ~S0 */ // double _cR0t; Complex _cR0t; /** * Overall coupling to left-handed leptons for ~S1 triplet */ // double _cL1; Complex _cL1; /** * Overall coupling to left-handed leptons for S1/2 triplet */ // double _cL12; Complex _cL12; /** * Overall coupling to right-handed leptons for S1/2 triplet */ // double _cR12; Complex _cR12; /** * Overall coupling to left-handed leptons for ~S1/2 triplet */ // double _cL12t; Complex _cL12t; /** * Overall coupling to left-handed leptons */ //double _dcL; Complex _dcL; /** * Overall coupling to right-handed leptons */ // double _dcR; Complex _dcR; /** * Overall coupling to left-handed leptons for dS0 */ // double _dcL0; Complex _dcL0; /** * Overall coupling to right-handed leptons for dS0 */ // double _dcR0; Complex _dcR0; /** * Overall coupling to right-handed leptons for ~dS0 */ double _dcR0t; /** * Overall coupling to left-handed leptons for ~dS1 triplet */ double _dcL1; /** * Overall coupling to left-handed leptons for dS1/2 triplet */ //double _dcL12; Complex _dcL12; /** * Overall coupling to right-handed leptons for dS1/2 triplet */ //double _dcR12; Complex _dcR12; /** * Overall coupling to left-handed leptons for ~dS1/2 triplet */ // double _dcL12t; Complex _dcL12t; /** * Suppression scale for derivatively coupled scalar leptoquarks */ Energy _derivscale; //@} }; } #endif /* HERWIG_LeptoquarkModelSLQFFVertex_H */ diff --git a/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h b/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h --- a/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h +++ b/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h @@ -1,127 +1,122 @@ // -*- C++ -*- // // LeptoquarkModelSLQSLQGGVertex.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_LeptoquarkModelSLQSLQGGVertex_H #define HERWIG_LeptoquarkModelSLQSLQGGVertex_H // // This is the declaration of the LeptoquarkModelSLQSLQGGVertex class. #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h" #include "Herwig/Models/Leptoquarks/LeptoquarkModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The LeptoquarkModelSLQSLQGGVertex class is the implementation of the gluon * gluon coupling to pairs of scalar leptoquarks in the LeptoquarkModel. It inherits from the VVSSVertex * and implements the setCoupling member * * @see VVSSVertex * @see VertexBase */ class LeptoquarkModelSLQSLQGGVertex: public VVSSVertex { public: /** * Default constructor. */ LeptoquarkModelSLQSLQGGVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<LeptoquarkModelSLQSLQGGVertex> initLeptoquarkModelSLQSLQGGVertex; - - /** * Private and non-existent assignment operator. */ LeptoquarkModelSLQSLQGGVertex & operator=(const LeptoquarkModelSLQSLQGGVertex &); /** * Pointer to the model. */ tcSMPtr _theModel; /** * The energy at which the coupling was last evaluated */ Energy2 _q2last; /** * The coupling when it was last evaluated */ Complex _couplast; }; } #endif /* HERWIG_LeptoquarkModelSLQSLQGGVertex_H */ diff --git a/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h b/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h --- a/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h +++ b/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h @@ -1,126 +1,121 @@ // -*- C++ -*- // // LeptoquarkModelSLQSLQGVertex.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_LeptoquarkModelSLQSLQGVertex_H #define HERWIG_LeptoquarkModelSLQSLQGVertex_H // // This is the declaration of the LeptoquarkModelSLQSLQGVertex class. #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "Herwig/Models/Leptoquarks/LeptoquarkModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The LeptoquarkModelSLQSLQGVertex class is the implementation of the gluon * coupling to pairs of scalar leptoquarks in the LeptoquarkModel. It inherits from the VSSVertex * and implements the setCoupling member * * @see VSSVertex * @see VertexBase */ class LeptoquarkModelSLQSLQGVertex: public VSSVertex { public: /** * Default constructor. */ LeptoquarkModelSLQSLQGVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<LeptoquarkModelSLQSLQGVertex> initLeptoquarkModelSLQSLQGVertex; - - /** * Private and non-existent assignment operator. */ LeptoquarkModelSLQSLQGVertex & operator=(const LeptoquarkModelSLQSLQGVertex &); /** * Pointer to the model. */ tcSMPtr _theModel; /** * The energy at which the coupling was last evaluated */ Energy2 _q2last; /** * The coupling when it was last evaluated */ Complex _couplast; }; } #endif /* HERWIG_LeptoquarkModelSLQSLQGVertex_H */ diff --git a/Models/RSModel/RSModel.h b/Models/RSModel/RSModel.h --- a/Models/RSModel/RSModel.h +++ b/Models/RSModel/RSModel.h @@ -1,200 +1,195 @@ // -*- C++ -*- // // RSModel.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_RSModel_H #define HERWIG_RSModel_H // This is the declaration of the RSModel class. #include "Herwig/Models/General/BSMModel.h" #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h" #include "RSModel.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Models * * This is the class to be used instead of the Standard Model class for * the Randell Sundrum model. * * @see \ref RSModelInterfaces "The interfaces" * defined for RSModel. * @see StandardModel * @see StandardModelBase * */ class RSModel: public BSMModel { public: /** * The default constructor */ RSModel(): Lambda_pi_(10000*GeV) { useMe(); } /** * Return the gravition coupling */ Energy lambda_pi() const {return Lambda_pi_;} /** @name Vertices */ //@{ /** * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex. */ tAbstractFFTVertexPtr vertexFFGR() const {return FFGRVertex_;} /** * Pointer to the object handling the \f$G\to VV\f$ vertex. */ tAbstractVVTVertexPtr vertexVVGR() const {return VVGRVertex_;} /** * Pointer to the object handling the \f$G\to SS\f$ vertex. */ tAbstractSSTVertexPtr vertexSSGR() const {return SSGRVertex_;} /** * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex. */ tAbstractFFVTVertexPtr vertexFFGGR() const {return FFGGRVertex_;} /** * Pointer to the object handling the \f$G\to f\bar{f}W^\pm/Z^0/\gamma\f$ vertex. */ tAbstractFFVTVertexPtr vertexFFWGR() const {return FFWGRVertex_;} /** * Pointer to the object handling the \f$G\to W^+W^-Z^0/\gamma\f$ vertex. */ tAbstractVVVTVertexPtr vertexWWWGR() const {return WWWGRVertex_;} /** * Pointer to the object handling the \f$G\to ggg\f$ vertex. */ tAbstractVVVTVertexPtr vertexGGGGR() const {return GGGGRVertex_;} //@} 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 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(); //@} 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);} //@} private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModel> initRSModel; - - /** * Private and non-existent assignment operator. */ RSModel & operator=(const RSModel &); private: /** * Coupling of the graviton */ Energy Lambda_pi_; /** * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex. */ AbstractFFTVertexPtr FFGRVertex_; /** * Pointer to the object handling the \f$G\to VV\f$ vertex. */ AbstractVVTVertexPtr VVGRVertex_; /** * Pointer to the object handling the \f$G\to SS\f$ vertex. */ AbstractSSTVertexPtr SSGRVertex_; /** * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex. */ AbstractFFVTVertexPtr FFGGRVertex_; /** * Pointer to the object handling the \f$G\to f\bar{f}W/Z^0\gamma\f$ vertex. */ AbstractFFVTVertexPtr FFWGRVertex_; /** * Pointer to the object handling the \f$G\to W^+W^-Z^0\gamma\f$ vertex. */ AbstractVVVTVertexPtr WWWGRVertex_; /** * Pointer to the object handling the \f$G\to ggg\f$ vertex. */ AbstractVVVTVertexPtr GGGGRVertex_; }; } #endif /* HERWIG_RSModel_H */ diff --git a/Models/RSModel/RSModelFFGGRVertex.h b/Models/RSModel/RSModelFFGGRVertex.h --- a/Models/RSModel/RSModelFFGGRVertex.h +++ b/Models/RSModel/RSModelFFGGRVertex.h @@ -1,133 +1,128 @@ // -*- C++ -*- // // RSModelFFGGRVertex.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_RSModelFFGGRVertex_H #define HERWIG_RSModelFFGGRVertex_H // // This is the declaration of the RSModelFFGGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the fermion-antifermion-vector-graviton * vertex for the Randell-Sundrum model * * @see FFVTVertex * @see VertexBase */ class RSModelFFGGRVertex: public FFVTVertex { public: /** * Default constructor. */ RSModelFFGGRVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelFFGGRVertex> initRSModelFFGGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelFFGGRVertex & operator=(const RSModelFFGGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The last value of the coupling/ */ Complex couplast_; /** * The last value of the scale, \f$q^2\f$. */ Energy2 q2last_; /** * The graviton coupling. */ InvEnergy kappa_; //@} }; } #endif /* HERWIG_RSModelFFGGRVertex_H */ diff --git a/Models/RSModel/RSModelFFGRVertex.h b/Models/RSModel/RSModelFFGRVertex.h --- a/Models/RSModel/RSModelFFGRVertex.h +++ b/Models/RSModel/RSModelFFGRVertex.h @@ -1,118 +1,113 @@ // -*- C++ -*- // // RSModelFFGRVertex.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_RSModelFFGRVertex_H #define HERWIG_RSModelFFGRVertex_H // // This is the declaration of the RSModelFFGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/FFTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the Randell-Sundrum model fermion-antifermion * tensor vertex for helicity amplitude calculations * * @see FFTVertex * @see VertexBase */ class RSModelFFGRVertex: public FFTVertex { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ RSModelFFGRVertex(); //@} 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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelFFGRVertex> initRSModelFFGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelFFGRVertex & operator=(const RSModelFFGRVertex &); /** * The coupling. */ InvEnergy kappa_; }; } #endif /* HERWIG_RSModelFFGRVertex_H */ diff --git a/Models/RSModel/RSModelFFWGRVertex.h b/Models/RSModel/RSModelFFWGRVertex.h --- a/Models/RSModel/RSModelFFWGRVertex.h +++ b/Models/RSModel/RSModelFFWGRVertex.h @@ -1,153 +1,148 @@ // -*- C++ -*- // // RSModelFFWGRVertex.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_RSModelFFWGRVertex_H #define HERWIG_RSModelFFWGRVertex_H // // This is the declaration of the RSModelFFWGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the fermion-antifermion-vector-graviton * vertex for the Randell-Sundrum model * * @see FFVTVertex * @see VertexBase */ class RSModelFFWGRVertex: public FFVTVertex { public: /** * Default constructor. */ RSModelFFWGRVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelFFWGRVertex> initRSModelFFWGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelFFWGRVertex & operator=(const RSModelFFWGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The charges of the Standard Model fermions. */ vector<double> charge_; /** * The left couplings of the Standard Model fermions. */ vector<double> gl_; /** * The right couplings of the Standard Model fermions. */ vector<double> gr_; /** * The elements of the CKM matrix. */ vector<vector<Complex> > ckm_; /** * The last value of the coupling/ */ Complex couplast_; /** * The last value of the scale, \f$q^2\f$. */ Energy2 q2last_; /** * The graviton coupling. */ InvEnergy kappa_; //@} }; } #endif /* HERWIG_RSModelFFWGRVertex_H */ diff --git a/Models/RSModel/RSModelGGGGRVertex.h b/Models/RSModel/RSModelGGGGRVertex.h --- a/Models/RSModel/RSModelGGGGRVertex.h +++ b/Models/RSModel/RSModelGGGGRVertex.h @@ -1,132 +1,127 @@ // -*- C++ -*- // // RSModelGGGGRVertex.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_RSModelGGGGRVertex_H #define HERWIG_RSModelGGGGRVertex_H // // This is the declaration of the RSModelGGGGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The RSModelGGGGRVertex class is the implementation of the * triple vector graviton couling in the RS model. * It inherits from VVVTVertex and implements the setCoupling member. * * @see VVVTVertex * @see VertexBase */ class RSModelGGGGRVertex: public VVVTVertex { public: /** * Default constructor. */ RSModelGGGGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelGGGGRVertex> initRSModelGGGGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelGGGGRVertex & operator=(const RSModelGGGGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The graviton coupling. */ InvEnergy kappa_; /** * The last value of the coupling/ */ Complex _couplast; /** * The last value of the scale, \f$q^2\f$. */ Energy2 _q2last; //@} }; } #endif /* HERWIG_RSModelGGGGRVertex_H */ diff --git a/Models/RSModel/RSModelSSGRVertex.h b/Models/RSModel/RSModelSSGRVertex.h --- a/Models/RSModel/RSModelSSGRVertex.h +++ b/Models/RSModel/RSModelSSGRVertex.h @@ -1,114 +1,109 @@ // -*- C++ -*- // // RSModelSSGRVertex.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_RSModelSSGRVertex_H #define HERWIG_RSModelSSGRVertex_H // // This is the declaration of the RSModelSSGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/SSTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The RSModelSSGRVertex class is thew implementation of the graviton * coupling to the Higgs in the RSModel. It inherits from the SSTVertex * and implements the setCoupling member * * @see SSTVertex * @see VertexBase */ class RSModelSSGRVertex: public SSTVertex { public: /** * Default constructor. */ RSModelSSGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelSSGRVertex> initRSModelSSGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelSSGRVertex & operator=(const RSModelSSGRVertex &); /** * Coupling. */ InvEnergy kappa_; }; } #endif /* HERWIG_RSModelSSGRVertex_H */ diff --git a/Models/RSModel/RSModelVVGRVertex.h b/Models/RSModel/RSModelVVGRVertex.h --- a/Models/RSModel/RSModelVVGRVertex.h +++ b/Models/RSModel/RSModelVVGRVertex.h @@ -1,113 +1,108 @@ // -*- C++ -*- // // RSModelVVGRVertex.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_RSModelVVGRVertex_H #define HERWIG_RSModelVVGRVertex_H // // This is the declaration of the RSModelVVGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/VVTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vector-vector-graviton vertex for * the RS model * * @see VVTVertex * @see VertexBase */ class RSModelVVGRVertex: public VVTVertex { public: /** * Default constructor. */ RSModelVVGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelVVGRVertex> initRSModelVVGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelVVGRVertex & operator=(const RSModelVVGRVertex &); /** * The coupling. */ InvEnergy kappa_; }; } #endif /* HERWIG_RSModelVVGRVertex_H */ diff --git a/Models/RSModel/RSModelWWWGRVertex.h b/Models/RSModel/RSModelWWWGRVertex.h --- a/Models/RSModel/RSModelWWWGRVertex.h +++ b/Models/RSModel/RSModelWWWGRVertex.h @@ -1,137 +1,132 @@ // -*- C++ -*- // // RSModelWWWGRVertex.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_RSModelWWWGRVertex_H #define HERWIG_RSModelWWWGRVertex_H // // This is the declaration of the RSModelWWWGRVertex class. #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h" #include "RSModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The RSModelWWWGRVertex class is the implementation of the * triple vector graviton couling in the RS model. * It inherits from VVVTVertex and implements the setCoupling member. * * @see VVVTVertex * @see VertexBase */ class RSModelWWWGRVertex: public VVVTVertex { public: /** * Default constructor. */ RSModelWWWGRVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the foruth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RSModelWWWGRVertex> initRSModelWWWGRVertex; - - /** * Private and non-existent assignment operator. */ RSModelWWWGRVertex & operator=(const RSModelWWWGRVertex &); private: /** * Storage of the couplings. */ //@{ /** * The graviton coupling. */ InvEnergy kappa_; /** * The last value of the coupling/ */ Complex _couplast; /** * The last value of the scale, \f$q^2\f$. */ Energy2 _q2last; /** * The prefactor for the \f$Z\f$ vertex. */ double _zfact; //@} }; } #endif /* HERWIG_RSModelWWWGRVertex_H */ diff --git a/Models/StandardModel/AlphaEM.h b/Models/StandardModel/AlphaEM.h --- a/Models/StandardModel/AlphaEM.h +++ b/Models/StandardModel/AlphaEM.h @@ -1,156 +1,150 @@ // -*- C++ -*- // // AlphaEM.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_AlphaEM_H #define HERWIG_AlphaEM_H // // This is the declaration of the AlphaEM class. // #include "ThePEG/StandardModel/AlphaEMBase.h" namespace Herwig { using namespace ThePEG; /** * The AlphaEM class is an exact reimplementation of the electromagentic * coupling in FORTRAN HERWIG and is mainly intended for testing. * It uses that same hadronic parameterisation as in the ThePEG::SimpleEM * but differs in the treatment of the top and leptonic contribution. * * @see \ref AlphaEMInterfaces "The interfaces" * defined for AlphaEM. */ class AlphaEM: public AlphaEMBase { public: /** * The default constructor. */ AlphaEM() : _me(),_mmu(),_mtau(), _mtop() {} /** * The \f$\alpha_{EM}\f$. Return the value of the coupling at a * given \a scale using the given standard model object, \a sm. */ virtual double value(Energy2 scale, const StandardModelBase &) 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 real part of the photon self-energy * @param ratio The ratio of the mass squared of the fermion to the scale squared, * \f$m^2/Q^2\f$. */ double realPi(double ratio) const; protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<AlphaEM> initAlphaEM; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AlphaEM & operator=(const AlphaEM &); private: /** * Masses of the Standard Model fermions we need for the * self-energies */ //@{ /** * Electron mass squared */ Energy2 _me; /** * Muon mass squared */ Energy2 _mmu; /** * Tau mass squared */ Energy2 _mtau; /** * Top mass squared */ Energy2 _mtop; //@} }; } #endif /* HERWIG_AlphaEM_H */ diff --git a/Models/StandardModel/GenericSVVVertex.h b/Models/StandardModel/GenericSVVVertex.h --- a/Models/StandardModel/GenericSVVVertex.h +++ b/Models/StandardModel/GenericSVVVertex.h @@ -1,132 +1,126 @@ // -*- C++ -*- // // GenericSVVVertex.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_GenericSVVVertex_H #define HERWIG_GenericSVVVertex_H // // This is the declaration of the GenericSVVVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/GeneralVVSVertex.h" namespace Herwig { using namespace ThePEG; /** * The <code>GenericSVVVertex</code> class implements the * setCoupling member for the Standard Model effective * vertex Higgs-gluon-gluon. */ class GenericSVVVertex: public Helicity::GeneralVVSVertex { public: /** * The default constructor. */ GenericSVVVertex(); /** @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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param part1 ParticleData pointer to first particle *@param part2 ParticleData pointer to first particle *@param part3 ParticleData pointer to first particle */ virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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);} //@} /** * 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(); string dopids(string in); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<GenericSVVVertex> initGenericSVVVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GenericSVVVertex & operator=(const GenericSVVVertex &); /** * Storage of couplings */ //@{ /** * The particle ids */ vector <int> pids; /** * The particle ids */ int oas,oaew; }; } // CLASSDOC OFF #endif /* HERWIG_GenericSVVVertex_H */ diff --git a/Models/StandardModel/GenericVVVVertex.h b/Models/StandardModel/GenericVVVVertex.h --- a/Models/StandardModel/GenericVVVVertex.h +++ b/Models/StandardModel/GenericVVVVertex.h @@ -1,132 +1,126 @@ // -*- C++ -*- // // GenericVVVVertex.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_GenericVVVVertex_H #define HERWIG_GenericVVVVertex_H // // This is the declaration of the GenericSVVVertex class. // #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h" namespace Herwig { using namespace ThePEG; /** * The <code>GenericVVVVertex</code> class implements the * setCoupling member for the Standard Model effective * vertex EWVector-gluon-gluon. */ class GenericVVVVertex: public Helicity::VVVVertex { public: /** * The default constructor. */ GenericVVVVertex(); /** @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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param part1 ParticleData pointer to first particle *@param part2 ParticleData pointer to first particle *@param part3 ParticleData pointer to first particle */ virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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);} //@} /** * 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(); string dopids(string in); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<GenericVVVVertex> initGenericVVVVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GenericVVVVertex & operator=(const GenericVVVVertex &); /** * Storage of couplings */ //@{ /** * The particle ids */ vector <int> pids; /** * The particle ids */ int oas,oaew; }; } // CLASSDOC OFF #endif /* HERWIG_GenericVVVVertex_H */ diff --git a/Models/StandardModel/O2AlphaS.h b/Models/StandardModel/O2AlphaS.h --- a/Models/StandardModel/O2AlphaS.h +++ b/Models/StandardModel/O2AlphaS.h @@ -1,176 +1,170 @@ // -*- C++ -*- // // O2AlphaS.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_O2AlphaS_H #define HERWIG_O2AlphaS_H // // This is the declaration of the O2AlphaS class. // #include "ThePEG/StandardModel/AlphaSBase.h" namespace Herwig { using namespace ThePEG; /** * The O2AlphaS class is the implementation of the two-loop * \f$\alpha_S\f$ in the same way as in FORTRAN HERWIG. * * The input value of \f$\Lambda_{\rm QCD}\f$ is in the \f$\bar{MS}\f$ * scheme and can either be converted to a Monte Carlo scheme, as in the * FORTRAN program, or left in the \f$\bar{MS}\f$ scheme to evaluate * the running coupling * * @see \ref O2AlphaSInterfaces "The interfaces" * defined for O2AlphaS. */ class O2AlphaS: public AlphaSBase { public: /** * The default constructor. */ O2AlphaS() : _lambdaQCD(180.*MeV), _bcoeff(6,0.0), _ccoeff(6,0.0), _lambdas(7), _threshold(6), _match(6,0.0), _copt(0) {} /** @name Virtual functions to override those in the base class */ //@{ /** * The \f$\alpha_S\f$. Return the QCD coupling for a given \a scale * using the given standard model object \a sm. */ virtual double value(Energy2 scale, const StandardModelBase & sm) const; /** * Return the flavour thresholds used. The returned vector contains * (in position <code>i</code>) the scales when the active number of * flavours changes from <code>i</code> to <code>i+1</code>. */ virtual vector<Energy2> flavourThresholds() const; /** * Return the \f$\Lambda_{QCD}\f$ used for different numbers of * active flavours. */ virtual vector<Energy> LambdaQCDs() 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<O2AlphaS> initO2AlphaS; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ O2AlphaS & operator=(const O2AlphaS &); private: /** * The value of \f$\Lambda_{\rm QCD}\f$ 5-flavours * in the \f$\bar{\rm MS}\f$ scheme */ Energy _lambdaQCD; /** * The values of the leading-order \f$\beta\f$-function coefficients */ vector<double> _bcoeff; /** * The values of the next-to-leading-order \f$\beta\f$-function coefficients */ vector<double> _ccoeff; /** * The values of \f$\Lambda_{\rm QCD}\f$ for the diffferent number of flavours */ vector<Energy> _lambdas; /** * The flavour thresholds */ vector<Energy> _threshold; /** * The constants for matching */ vector<double> _match; /** * Option for the coupling */ unsigned int _copt; }; } #endif /* HERWIG_O2AlphaS_H */ diff --git a/Models/StandardModel/RunningMass.h b/Models/StandardModel/RunningMass.h --- a/Models/StandardModel/RunningMass.h +++ b/Models/StandardModel/RunningMass.h @@ -1,155 +1,150 @@ // -*- C++ -*- // // RunningMass.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_RunningMass_H #define HERWIG_RunningMass_H // // This is the declaration of the RunningMass class. #include "RunningMassBase.h" #include "StandardModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Models * * Implementation of the 1 or 2 loop QCD running mass. * * @see RunningMassBase */ class RunningMass: public RunningMassBase { public: /** * Default constructor. */ RunningMass() : _theQCDOrder(1), _theMaxFlav(6), _lightOption(1), _heavyOption(0) {} public: /** * Return the running mass for a given scale \f$q^2\f$ and particle type. * @param q2 The scale \f$q^2\f$. * @param part The ParticleData pointer */ virtual Energy value(Energy2 q2,tcPDPtr part) const; /** * Return the masses used. */ virtual vector<Energy> mass() 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(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<RunningMass> initRunningMass; - - /** * Private and non-existent assignment operator. */ RunningMass & operator=(const RunningMass &); private: /** * Order in alphaS. */ unsigned int _theQCDOrder; /** * The maximum number of flavours. */ unsigned int _theMaxFlav; /** * The power for the running mass calculation. */ vector<double> _thePower; /** * The coefficients for the running mass calculation. */ vector<double> _theCoefficient; /** * Pointer to the StandardModel object. */ tcSMPtr _theStandardModel; /** * Option to use pole masses for u,d,s */ unsigned int _lightOption; /** * Option to use pole masses for c,b */ unsigned int _heavyOption; }; } #endif /* HERWIG_RunningMass_H */ diff --git a/Models/StandardModel/RunningMassBase.h b/Models/StandardModel/RunningMassBase.h --- a/Models/StandardModel/RunningMassBase.h +++ b/Models/StandardModel/RunningMassBase.h @@ -1,104 +1,99 @@ // -*- C++ -*- // // RunningMassBase.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_RunningMassBase_H #define HERWIG_RunningMassBase_H // // This is the declaration of the RunningMassBase class. #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/StandardModel/StandardModelBase.h" namespace Herwig { using namespace ThePEG; /** \ingroup Models * * Base class for running mass calculations. */ class RunningMassBase: public Interfaced { public: /** * Return the running mass for a given scale \f$q^2\f$ and particle type. * @param q2 The scale \f$q^2\f$. * @param part The ParticleData pointer */ virtual Energy value(Energy2 q2,tcPDPtr part) const = 0; /** * Return the masses used. */ virtual vector<Energy> mass() const = 0; /** * Return the \f$i\f$ th element of the mass array. * @param i The element to return */ Energy massElement(unsigned int i) const {return _theMass[i];} 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 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(); //@} private: /** - * Describe an abstract base class with persistent data. - */ - static AbstractClassDescription<RunningMassBase> initRunningMassBase; - - /** * Private and non-existent assignment operator. */ RunningMassBase & operator=(const RunningMassBase &); private: /** * Flavour thresholds and the masses, set at initialization. */ vector<Energy> _theMass; }; } #endif /* HERWIG_RunningMassBase_H */ diff --git a/Models/StandardModel/SMFFGVertex.h b/Models/StandardModel/SMFFGVertex.h --- a/Models/StandardModel/SMFFGVertex.h +++ b/Models/StandardModel/SMFFGVertex.h @@ -1,113 +1,108 @@ // -*- C++ -*- // // SMFFGVertex.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_SMFFGVertex_H #define HERWIG_SMFFGVertex_H // // This is the declaration of the SMFFGVertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "ThePEG/StandardModel/StandardModelBase.fh" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the Standard Model quark-antiquark gluon vertex. * * @see FFVVertex * @see VertexBase */ class SMFFGVertex: public FFVVertex { public: /** * Default constructor. */ SMFFGVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); public: /** * 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 an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static NoPIOClassDescription<SMFFGVertex> initSMFFGVertex; - - /** * Private and non-existent assignment operator. */ SMFFGVertex & operator=(const SMFFGVertex &); private: /** * Storage of the couplings. */ //@{ /** * The last value of the strong coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; //@} }; } #endif /* HERWIG_SMFFGVertex_H */ diff --git a/Models/StandardModel/SMFFHVertex.h b/Models/StandardModel/SMFFHVertex.h --- a/Models/StandardModel/SMFFHVertex.h +++ b/Models/StandardModel/SMFFHVertex.h @@ -1,154 +1,149 @@ // -*- C++ -*- // // SMFFHVertex.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_SMFFHVertex_H #define HERWIG_SMFFHVertex_H // // This is the declaration of the SMFFHVertex class. #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFSVertex * @see VertexBase */ class SMFFHVertex: public FFSVertex { public: /** * Default constructor. */ SMFFHVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<SMFFHVertex> initSMFFHVertex; - - /** * Private and non-existent assignment operator. */ SMFFHVertex & operator=(const SMFFHVertex &); private: /** * Pointer to the SM object. */ tcHwSMPtr _theSM; /** * Storage of the couplings. */ //@{ /** * Last evaluation of the coupling */ complex<InvEnergy> _couplast; /** * The PDG code of the last fermion the coupling was evaluated for. */ int _idlast; /** * The last \f$q^2\f$ the coupling was evaluated at. */ Energy2 _q2last; /** * The mass of the last fermion for which the coupling was evaluated. */ Energy _masslast; /** * The mass of the \f$W\f$ boson. */ Energy _mw; /** * A definite fermion flavour to couple to. All other flavours are ignored, * if this is different from zero. */ int _fermion; //@} }; } #endif /* HERWIG_SMFFHVertex_H */ diff --git a/Models/StandardModel/SMGGGGVertex.h b/Models/StandardModel/SMGGGGVertex.h --- a/Models/StandardModel/SMGGGGVertex.h +++ b/Models/StandardModel/SMGGGGVertex.h @@ -1,113 +1,108 @@ // -*- C++ -*- // // SMGGGGVertex.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_SMGGGGVertex_H #define HERWIG_SMGGGGVertex_H // // This is the declaration of the SMGGGGVertex class. // #include "ThePEG/Helicity/Vertex/Vector/VVVVVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The SMGGGGVertex class is the implementation of the * Standard Model quartic gluon vertex. It inherits from * VVVVVertex and implements the setCoupling member. * * @see VVVVVertex * @see VertexBase */ class SMGGGGVertex: public VVVVVertex { public: /** * Default constructor. */ SMGGGGVertex(); /** * Standard Init function used to initialize the interfaces. */ static void Init(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3,tcPDPtr part4); 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(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static NoPIOClassDescription<SMGGGGVertex> initSMGGGGVertex; - - /** * Private and non-existent assignment operator. */ SMGGGGVertex & operator=(const SMGGGGVertex &); /** * Storage of the couplings. */ //@{ /** * The last value of the strong coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; //@} }; } #endif /* HERWIG_SMGGGGVertex_H */ diff --git a/Models/StandardModel/SMGGGVertex.h b/Models/StandardModel/SMGGGVertex.h --- a/Models/StandardModel/SMGGGVertex.h +++ b/Models/StandardModel/SMGGGVertex.h @@ -1,109 +1,104 @@ // -*- C++ -*- // // SMGGGVertex.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_SMGGGVertex_H #define HERWIG_SMGGGVertex_H // // This is the declaration of the SMGGGVertex class. // #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h" #include "ThePEG/StandardModel/StandardModelBase.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::Direction; /** \ingroup Helicity * * Implementation of the SM triple gluon vertex. * * @see VVVVertex * @see VertexBase */ class SMGGGVertex : public Helicity::VVVVertex { public: /** * Default constructor. */ SMGGGVertex(); /** * Standard Init function used to initialize the interfaces. */ static void Init(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static NoPIOClassDescription<SMGGGVertex> initSMGGGVertex; - - /** * Private and non-existent assignment operator. */ SMGGGVertex & operator=(const SMGGGVertex &); /** * Storage of the couplings. */ //@{ /** * The last value of the strong coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; //@} }; } #endif /* HERWIG_SMGGGVertex_H */ diff --git a/Models/StandardModel/SMHGGVertex.h b/Models/StandardModel/SMHGGVertex.h --- a/Models/StandardModel/SMHGGVertex.h +++ b/Models/StandardModel/SMHGGVertex.h @@ -1,169 +1,163 @@ // -*- C++ -*- // // SMHGGVertex.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_SMHGGVertex_H #define HERWIG_SMHGGVertex_H // // This is the declaration of the SMHGGVertex class. // #include "Herwig/Models/General/VVSLoopVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** * The <code>SMHGGVertex</code> class implements the * setCoupling member for the Standard Model effective * vertex Higgs-gluon-gluon. */ class SMHGGVertex: public VVSLoopVertex { public: /** * The default constructor. */ SMHGGVertex(); /** @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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param part1 ParticleData pointer to first particle *@param part2 ParticleData pointer to first particle *@param part3 ParticleData pointer to first particle */ virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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);} //@} /** * 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(); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SMHGGVertex> initSMHGGVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMHGGVertex & operator=(const SMHGGVertex &); /** * Storage of couplings */ //@{ /** * Last value of the coupling calculated */ Complex _couplast; /** * The scale \f$q^2\f$ at which coupling was last evaluated */ Energy2 _q2last; //@} /** * Pointer to Standard Model object */ tcHwSMPtr _theSM; /** * Mass of W-boson for higgs coupling */ Energy _mw; /** * define quark mass scheme (fixed/running) */ unsigned int massopt; /** * The minimum flavour number in quark loops */ int _minloop; /** * The maximum flavour number in quark loops */ int _maxloop; /** * Loop calculations: A1 for spin-1/2 particles (see details in ``Higgs Hunter's Guide'') */ Complex Af(double labmda) const; /** * Loop calculations: W2 function (see details in NPB297,221) */ Complex W2(double lambda) const; /** * Switch between two representations of coefficients (_a00,_a11,_a12,_a21,_a22,_aEp): * suitable for the simplified H-g-g and H-gamma-gamma vertices and * suitable for the Passarino-Veltman tensor reduction scheme */ unsigned int _CoefRepresentation; }; } // CLASSDOC OFF #endif /* HERWIG_SMHGGVertex_H */ diff --git a/Models/StandardModel/SMHHHVertex.h b/Models/StandardModel/SMHHHVertex.h --- a/Models/StandardModel/SMHHHVertex.h +++ b/Models/StandardModel/SMHHHVertex.h @@ -1,129 +1,123 @@ // -*- C++ -*- #ifndef HERWIG_SMHHHVertex_H #define HERWIG_SMHHHVertex_H // // This is the declaration of the SMHHHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * Here is the documentation of the SMHHHVertex class. * * @see \ref SMHHHVertexInterfaces "The interfaces" * defined for SMHHHVertex. */ class SMHHHVertex: public SSSVertex { public: /** * The default constructor. */ SMHHHVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SMHHHVertex> initSMHHHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMHHHVertex & operator=(const SMHHHVertex &); private: /** * ratio of masses */ Energy ratio_; /** * The last value of the electroweak coupling calculated. */ Complex couplast_; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 q2last_; }; } #endif /* HERWIG_SMHHHVertex_H */ diff --git a/Models/StandardModel/SMHPPVertex.h b/Models/StandardModel/SMHPPVertex.h --- a/Models/StandardModel/SMHPPVertex.h +++ b/Models/StandardModel/SMHPPVertex.h @@ -1,179 +1,173 @@ // -*- C++ -*- // // SMHPPVertex.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_SMHPPVertex_H #define HERWIG_SMHPPVertex_H // // This is the declaration of the SMHPPVertex class. // #include "Herwig/Models/General/VVSLoopVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** * The <code>SMHGGVertex</code> class implements the * setCoupling member for the Standard Model effective * vertex Higgs-gamma-gamma. */ class SMHPPVertex: public VVSLoopVertex { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ SMHPPVertex(); //@} /** @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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param part1 ParticleData pointer to first particle *@param part2 ParticleData pointer to second particle *@param part3 ParticleData pointer to third particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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);} //@} /** * 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(); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SMHPPVertex> initSMHPPVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMHPPVertex & operator=(const SMHPPVertex &); private: /** * Loop calculations: A1 for spin-1/2 particles (see details in ``Higgs Hunter's Guide'') */ Complex Af(const double lambda) const; /** * Loop calculations: A1 for spin-1 particles (see details in ``Higgs Hunter's Guide'') */ Complex Aw(const double lambda) const; /** * Loop calculations: W2 function (see details in NPB297,221) */ Complex W2(double lambda) const; private: /** *Storage of couplings */ //@{ /** * Last value of the coupling calculated */ Complex _couplast; /** * The scale \f$q^2\f$ at which coupling was last evaluated */ Energy2 _q2last; //@} /** * Pointer to Standard Model object */ tcHwSMPtr _theSM; /** * The mass of the \f$W\f$ boson. */ Energy _mw; /** * define quark mass scheme (fixed/running) */ unsigned int _massopt; /** * The minimum flavour number in quark loops */ int _minloop; /** * The maximum flavour number in quark loops */ int _maxloop; /** * Switch between two representations of coefficients (_a00,_a11,_a12,_a21,_a22,_aEp): * suitable for the simplified H-g-g and H-gamma-gamma vertices and * suitable for the Passarino-Veltman tensor reduction scheme */ unsigned int _CoefRepresentation; }; } #endif /* HERWIG_SMHPPVertex_H */ diff --git a/Models/StandardModel/SMWWHHVertex.h b/Models/StandardModel/SMWWHHVertex.h --- a/Models/StandardModel/SMWWHHVertex.h +++ b/Models/StandardModel/SMWWHHVertex.h @@ -1,128 +1,122 @@ // -*- C++ -*- #ifndef HERWIG_SMWWHHVertex_H #define HERWIG_SMWWHHVertex_H // // This is the declaration of the SMWWHHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the SMWWHHVertex class. * * @see \ref SMWWHHVertexInterfaces "The interfaces" * defined for SMWWHHVertex. */ class SMWWHHVertex: public Helicity::VVSSVertex { public: /** * The default constructor. */ SMWWHHVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); /** @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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SMWWHHVertex> initSMWWHHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SMWWHHVertex & operator=(const SMWWHHVertex &); private: /** * ratio of masses */ double ratio_; /** * The last value of the electroweak coupling calculated. */ Complex couplast_; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 q2last_; }; } #endif /* HERWIG_SMWWHHVertex_H */ diff --git a/Models/StandardModel/SMWWHVertex.h b/Models/StandardModel/SMWWHVertex.h --- a/Models/StandardModel/SMWWHVertex.h +++ b/Models/StandardModel/SMWWHVertex.h @@ -1,140 +1,135 @@ // -*- C++ -*- // // SMWWHVertex.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_SMWWHVertex_H #define HERWIG_SMWWHVertex_H // // This is the declaration of the SMWWHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h" #include "ThePEG/PDT/EnumParticles.h" #include "Herwig/Models/StandardModel/StandardModel.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The SMWWHVertex is the implementation of the * coupling of two electroweak gauge bosons to the Higgs in the Standard * Model. It inherits from VVSVertex and implements the setCoupling member. * * @see VVSVertex * @see VertexBase */ class SMWWHVertex: public VVSVertex { public: /** * Default constructor. */ SMWWHVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<SMWWHVertex> initSMWWHVertex; - /** - * Private and non-existent assignment operator. */ SMWWHVertex & operator=(const SMWWHVertex &); private: /** * Storage of the couplings. */ //@{ /** * The last value of the electroweak coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; /** * The mass of the \f$W\f$ boson. */ Energy _mw; /** * The factor for the \f$Z\f$ vertex. */ double _zfact; //@} }; } #endif /* HERWIG_SMWWHVertex_H */ diff --git a/Models/StandardModel/SMWWWVertex.h b/Models/StandardModel/SMWWWVertex.h --- a/Models/StandardModel/SMWWWVertex.h +++ b/Models/StandardModel/SMWWWVertex.h @@ -1,138 +1,133 @@ // -*- C++ -*- // // SMWWWVertex.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_SMWWWVertex_H #define HERWIG_SMWWWVertex_H // // This is the declaration of the SMWWWVertex class. // #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h" #include "ThePEG/StandardModel/StandardModelBase.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::Direction; /** \ingroup Helicity * * This is the implementation fo the vertex for the coupling of three * standard Model electroweak bosons. * * @see VVVVertex * @see VertexBase */ class SMWWWVertex: public Helicity::VVVVertex { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ SMWWWVertex(); //@} 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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<SMWWWVertex> initSMWWWVertex; - - /** * Private and non-existent assignment operator. */ SMWWWVertex & operator=(const SMWWWVertex &); private: /** * Storage of the couplings. */ //@{ /** * The factor for the \f$Z\f$ vertex. */ double _zfact; /** * The last value of the electroweak coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; //@} }; } #endif /* HERWIG_SMWWWVertex_H */ diff --git a/Models/StandardModel/SMWWWWVertex.h b/Models/StandardModel/SMWWWWVertex.h --- a/Models/StandardModel/SMWWWWVertex.h +++ b/Models/StandardModel/SMWWWWVertex.h @@ -1,170 +1,165 @@ // -*- C++ -*- // // SMWWWWVertex.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_SMWWWWVertex_H #define HERWIG_SMWWWWVertex_H // // This is the declaration of the SMWWWWVertex class. // #include "ThePEG/Helicity/Vertex/Vector/VVVVVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The SMWWWWVertex class is the implementation of the * coupling of four electroweak gauge bosons in the SM. * It inherits from VVVVVertex nad implements the setCoupling member. * * @see VVVVVVertex * @see VertexBase */ class SMWWWWVertex: public VVVVVertex { public: /** * Default constructor. */ SMWWWWVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4); 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(); //@} private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<SMWWWWVertex> initSMWWWWVertex; - - /** * Private and non-existent assignment operator. */ SMWWWWVertex & operator=(const SMWWWWVertex &); /** * Intermediate particles */ //@{ /** * The ParticleData pointer for the photon */ tcPDPtr _gamma; /** * The ParticleData pointer for the \f$Z^0\f$ boson. */ tcPDPtr _Z0; /** * The ParticleData pointer for the \f$W^+\f$ boson. */ tcPDPtr _wplus; /** * The ParticleData pointer for the \f$W^-\f$ boson. */ tcPDPtr _wminus; //@} /** * Storage of the couplings. */ //@{ /** * The last value of the electroweak coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; /** * The factors for the different bosons. */ vector<double> _vfact; /** * \f$\sin^2\theta_W\f$. */ double _sw2; /** * \f$\cos^2\theta_W\f$. */ double _cw2; //@} }; } #endif /* HERWIG_SMWWWWVertex_H */ diff --git a/Models/StandardModel/StandardCKM.h b/Models/StandardModel/StandardCKM.h --- a/Models/StandardModel/StandardCKM.h +++ b/Models/StandardModel/StandardCKM.h @@ -1,132 +1,127 @@ // -*- C++ -*- // // StandardCKM.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_StandardCKM_H #define HERWIG_StandardCKM_H // // This is the declaration of the StandardCKM class. // #include <ThePEG/Config/Complex.h> #include <ThePEG/StandardModel/CKMBase.h> // #include "StandardCKM.fh" // #include "StandardCKM.xh" namespace Herwig { using namespace ThePEG; /** \ingroup Models * * StandardCKM inherits from CKMBase and implements the standard * parameterization of the CKM matrix in terms of three angles and * a phase. It provides access to the unsquared matrix from helicity * amplitude calculations. * * @see CKMBase */ class StandardCKM: public CKMBase { public: /** * Default constructor. */ StandardCKM() : theta12(0.2262), theta13(0.0037), theta23(0.0413), delta(1.05) {} /** * Return the matrix of squared CKM matrix elements. The returned * matrix should be for \a nf families. */ virtual vector< vector<double> > getMatrix(unsigned int nf) const; /** * Return the matrix of CKM matrix elements. The returned * matrix should be for \a nf families. */ virtual vector< vector<Complex> > getUnsquaredMatrix(unsigned int nf) 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; /** 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; //@} private: /** * The \f$\theta_{12}\f$ angle. */ double theta12; /** * The \f$\theta_{13}\f$ angle. */ double theta13; /** * The \f$\theta_{23}\f$ angle. */ double theta23; /** * The \f$\delta\f$ angle describing the phase. */ double delta; private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<StandardCKM> initStandardCKM; - - /** * Private and non-existent assignment operator. */ StandardCKM & operator=(const StandardCKM &); }; } #endif /* HERWIG_StandardCKM_H */ diff --git a/Models/StandardModel/StandardModel.h b/Models/StandardModel/StandardModel.h --- a/Models/StandardModel/StandardModel.h +++ b/Models/StandardModel/StandardModel.h @@ -1,463 +1,458 @@ // -*- C++ -*- // // StandardModel.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_StandardModel_H #define HERWIG_StandardModel_H // // This is the declaration of the StandardModel class. #include "ThePEG/StandardModel/StandardModelBase.h" #include "Herwig/Models/StandardModel/RunningMassBase.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractSSSSVertex.h" #include "Herwig/Models/General/ModelGenerator.fh" #include "StandardModel.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Models * * This is the Herwig StandardModel class which inherits from ThePEG * Standard Model class and implements additional Standard Model couplings, * access to vertices for helicity amplitude calculations etc. * * @see StandardModelBase */ class StandardModel: public StandardModelBase { /** * Some typedefs for the pointers. */ //@{ /** * Pointer to the RunningMassBase object */ typedef Ptr<Herwig::RunningMassBase>::pointer runPtr; /** * Transient pointer to the RunningMassBase object */ typedef Ptr<Herwig::RunningMassBase>::transient_pointer trunPtr; //@} public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor */ StandardModel(); /** * Copy-constructor. */ StandardModel(const StandardModel &); /** * Destructor */ virtual ~StandardModel(); //@} 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: /** * Should the default vertices be considered for generic diagrams */ virtual bool registerDefaultVertices() const { return true; } public: /** * The left and right couplings of the Z^0 including sin and cos theta_W. */ //@{ /** * The left-handed coupling of a neutrino */ double lnu() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()+anu()); } /** * The left-handed coupling of a charged lepton. */ double le() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()+ae()); } /** * The left-handed coupling of an up type quark. */ double lu() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()+au()); } /** * The left-handed coupling of a down type quark. */ double ld() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()+ad()); } /** * The right-handed coupling of a neutrino */ double rnu() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()-anu()); } /** * The right-handed coupling of a charged lepton. */ double re() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()-ae()); } /** * The right-handed coupling of an up type quark. */ double ru() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()-au()); } /** * The right-handed coupling of a down type quark. */ double rd() const { return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()-ad()); } //@} /** * Pointers to the objects handling the vertices. */ //@{ /** * Pointer to the fermion-fermion-Z vertex */ virtual tAbstractFFVVertexPtr vertexFFZ() const { return FFZVertex_; } /** * Pointer to the fermion-fermion-photon vertex */ virtual tAbstractFFVVertexPtr vertexFFP() const { return FFPVertex_; } /** * Pointer to the fermion-fermion-gluon vertex */ virtual tAbstractFFVVertexPtr vertexFFG() const { return FFGVertex_; } /** * Pointer to the fermion-fermion-W vertex */ virtual tAbstractFFVVertexPtr vertexFFW() const { return FFWVertex_; } /** * Pointer to the fermion-fermion-Higgs vertex */ virtual tAbstractFFSVertexPtr vertexFFH() const { return FFHVertex_; } /** * Pointer to the triple gluon vertex */ virtual tAbstractVVVVertexPtr vertexGGG() const { return GGGVertex_; } /** * Pointer to the triple electroweak gauge boson vertex. */ virtual tAbstractVVVVertexPtr vertexWWW() const { return WWWVertex_; } /** * Pointer to the two electroweak gauge boson Higgs vertex. */ virtual tAbstractVVSVertexPtr vertexWWH() const { return WWHVertex_; } /** * Pointer to the quartic electroweak gauge boson vertex. */ virtual tAbstractVVVVVertexPtr vertexWWWW() const { return WWWWVertex_; } /** * Pointer to the quartic gluon vertex */ virtual tAbstractVVVVVertexPtr vertexGGGG() const { return GGGGVertex_; } /** * Pointer to the quartic gluon vertex */ virtual tAbstractVVSVertexPtr vertexHGG() const { return HGGVertex_; } /** * Pointer to the quartic gluon vertex */ virtual tAbstractVVSVertexPtr vertexHPP() const { return HPPVertex_; } /** * Pointer to the triple Higgs vertex */ virtual tAbstractSSSVertexPtr vertexHHH() const { return HHHVertex_; } /** * Pointer to the WWHH vertex */ virtual tAbstractVVSSVertexPtr vertexWWHH() const { return WWHHVertex_; } /** * Total number of vertices */ unsigned int numberOfVertices() const { return vertexList_.size() + extraVertices_.size(); } /** * Access to a vertex from the list */ tVertexBasePtr vertex(size_t ix) const { const size_t S = vertexList_.size(); if ( ix < S ) return vertexList_[ix]; else return extraVertices_[ix - S]; } //@} /** * Return the running mass for a given scale \f$q^2\f$ and particle type. * @param scale The scale \f$q^2\f$. * @param part The ParticleData object for the particle */ Energy mass(Energy2 scale,tcPDPtr part) const { return runningMass_->value(scale,part); } /** * Return a pointer to the object handling the running mass. */ trunPtr massPtr() const { return runningMass_; } protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} protected: /** * 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(); //@} protected: /** * Add a vertex to the list */ void addVertex(VertexBasePtr in) { if ( in ) vertexList_.push_back(in); } /** * Helper function to reset the mass of a ParticleData object * in BSM models. */ void resetMass(long id, Energy mass,tPDPtr particle=tPDPtr()); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<StandardModel> initStandardModel; - - /** * Private and non-existent assignment operator. */ StandardModel & operator=(const StandardModel &); private: /** * Pointers to the vertices for Standard Model helicity amplitude * calculations. */ //@{ /** * Pointer to the fermion-fermion-Z vertex */ AbstractFFVVertexPtr FFZVertex_; /** * Pointer to the fermion-fermion-photon vertex */ AbstractFFVVertexPtr FFPVertex_; /** * Pointer to the fermion-fermion-gluon vertex */ AbstractFFVVertexPtr FFGVertex_; /** * Pointer to the fermion-fermion-W vertex */ AbstractFFVVertexPtr FFWVertex_; /** * Pointer to the fermion-fermion-Higgs vertex */ AbstractFFSVertexPtr FFHVertex_; /** * Pointer to the two electroweak gauge boson Higgs vertex. */ AbstractVVSVertexPtr WWHVertex_; /** * Pointer to the triple gluon vertex */ AbstractVVVVertexPtr GGGVertex_; /** * Pointer to the triple electroweak gauge boson vertex. */ AbstractVVVVertexPtr WWWVertex_; /** * Pointer to the quartic gluon vertex */ AbstractVVVVVertexPtr GGGGVertex_; /** * Pointer to the quartic electroweak gauge boson vertex. */ AbstractVVVVVertexPtr WWWWVertex_; /** * Pointer to higgs-gluon-gluon vertex */ AbstractVVSVertexPtr HGGVertex_; /** * Pointer to higgs-gamma-gamma vertex */ AbstractVVSVertexPtr HPPVertex_; /** * Pointer to triple Higgs vertex */ AbstractSSSVertexPtr HHHVertex_; /** * Pointer to WWHH vertex */ AbstractVVSSVertexPtr WWHHVertex_; /** * Full list of vertices as a vector to allow searching */ vector<VertexBasePtr> vertexList_; /** * Additional vertices to be considered in automatic ME construction */ vector<VertexBasePtr> extraVertices_; //@} /** * The running mass. */ runPtr runningMass_; /** * Pointer to ModelGenerator Class */ ModelGeneratorPtr modelGenerator_; }; } #endif /* HERWIG_StandardModel_H */ diff --git a/Models/Susy/NMSSM/NMSSM.h b/Models/Susy/NMSSM/NMSSM.h --- a/Models/Susy/NMSSM/NMSSM.h +++ b/Models/Susy/NMSSM/NMSSM.h @@ -1,202 +1,196 @@ // -*- C++ -*- #ifndef HERWIG_NMSSM_H #define HERWIG_NMSSM_H // // This is the declaration of the NMSSM class. // #include "Herwig/Models/Susy/MSSM.h" #include "NMSSM.fh" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the NMSSM class. * * @see \ref NMSSMInterfaces "The interfaces" * defined for NMSSM. */ class NMSSM: public MSSM { public: /** * The default constructor. */ NMSSM() : _lambda(0.), _kappa(0.), _theAlambda(0.*MeV), _theAkappa(0.*MeV), _lambdaVEV(0.*MeV), _MQ3(0.*MeV), _MU2(0.*MeV) {} public: /** * The NMSSM couplings */ //@{ /** * Superpotential \f$\lambda\f$ term */ double lambda() const { return _lambda; } /** * Superpotential \f$\kappa\f$ coupling */ double kappa() const { return _kappa; } /** * The V.E.V of the extra singlet field scaled * by \f$ lambda\f$, */ Energy lambdaVEV() const { return _lambdaVEV; } /** * Soft trilinear \f$SH_2 H_1\f$ coupling */ Energy trilinearLambda() const { return _theAlambda; } /** * Soft cubic \f$S\f$ coupling */ Energy trilinearKappa() const { return _theAkappa; } /** * left 3rd generation scalar quark mass */ Energy MQ3() const { return _MQ3; } /** * right scalar top mass */ Energy MU2() const { return _MU2; } //@} 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: /** * Extract the parameters from the input blocks */ virtual void extractParameters(bool checkModel=true); /** * Create the mixing matrices for the model */ virtual void createMixingMatrices(); 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);} //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSM> initNMSSM; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSM & operator=(const NMSSM &); private: /** * The NMSSM couplings */ //@{ /** * Superpotential \f$\lambda\f$ term */ double _lambda; /** * Superpotential \f$\kappa\f$ coupling */ double _kappa; /** * Soft trilinear \f$SH_2 H_1\f$ coupling */ Energy _theAlambda; /** * Soft cubic \f$S\f$ coupling */ Energy _theAkappa; /** * The V.E.V of the extra singlet field scaled * by \f$ lambda\f$ */ Energy _lambdaVEV; /** * left 3rd generation scalar quark mass */ Energy _MQ3; /** * right scalar top mass */ Energy _MU2; //@} }; } #endif /* HERWIG_NMSSM_H */ diff --git a/Models/Susy/NMSSM/NMSSMFFHVertex.h b/Models/Susy/NMSSM/NMSSMFFHVertex.h --- a/Models/Susy/NMSSM/NMSSMFFHVertex.h +++ b/Models/Susy/NMSSM/NMSSMFFHVertex.h @@ -1,173 +1,167 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMFFHVertex_H #define HERWIG_NMSSMFFHVertex_H // // This is the declaration of the NMSSMFFHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * The NMSSMFFHVertex class implements the interactions of the NMSSM Higgs bosons * with the Standard Model fermions. * * @see \ref NMSSMFFHVertexInterfaces "The interfaces" * defined for NMSSMFFHVertex. */ class NMSSMFFHVertex: public FFSVertex { public: /** * The default constructor. */ NMSSMFFHVertex(); /** @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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMFFHVertex> initNMSSMFFHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMFFHVertex & operator=(const NMSSMFFHVertex &); private: /** * Mixing matrix for the CP-even Higgs bosons */ MixingMatrixPtr _mixS; /** * Mixing matrix for the CP-odd Higgs bosons */ MixingMatrixPtr _mixP; /** * Pointer to the SM object. */ tcHwSMPtr _theSM; /** * Mass of the \f$W\f$ boson */ Energy _mw; /** * \f$\sin\beta\f$ */ double _sinb; /** * \f$\cos\beta\f$ */ double _cosb; /** * \f$\tan\beta\f$ */ double _tanb; /** * \f$\sin\theta_W\f$ */ double _sw; /** * The PDG code of the last fermion the coupling was evaluated for. */ pair<int,int> _idlast; /** * The last \f$q^2\f$ the coupling was evaluated at. */ Energy2 _q2last; /** * The mass of the last fermion for which the coupling was evaluated. */ pair<Energy,Energy> _masslast; /** * The last value of the coupling */ double _couplast; }; } #endif /* HERWIG_NMSSMFFHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMGGHVertex.h b/Models/Susy/NMSSM/NMSSMGGHVertex.h --- a/Models/Susy/NMSSM/NMSSMGGHVertex.h +++ b/Models/Susy/NMSSM/NMSSMGGHVertex.h @@ -1,254 +1,248 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMGGHVertex_H #define HERWIG_NMSSMGGHVertex_H // // This is the declaration of the NMSSMGGHVertex class. // #include "Herwig/Models/General/VVSLoopVertex.h" #include "Herwig/Models/StandardModel/StandardModel.fh" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** * This class implements the effective vertex for a higgs coupling * to a pair of gluons in the NMSSM. * * @see \ref NMSSMGGHVertexInterfaces "The interfaces" * defined for NMSSMGGHVertex. */ class NMSSMGGHVertex: public VVSLoopVertex { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ NMSSMGGHVertex(); //@} 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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param p1 ParticleData pointer to first particle *@param p2 ParticleData pointer to second particle *@param p3 ParticleData pointer to third particle */ virtual void setCoupling(Energy2 q2, tcPDPtr p1, tcPDPtr p2, tcPDPtr p3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMGGHVertex> initNMSSMGGHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMGGHVertex & operator=(const NMSSMGGHVertex &); private: /** @name Stored parameters. */ //@{ /** * The SM pointer */ tcHwSMPtr _theSM; /** * \f$ \sin\theta_W\f$ */ double _sw; /** * \f$ \cos\theta_W\f$ */ double _cw; /** * \f$ M_W\f$ */ Energy _mw; /** * \f$ M_Z \f$ */ Energy _mz; /** * The product \f$\lambda \langle S\rangle \f$. */ Energy _lambdaVEV; /** * The coefficient of the trilinear \f$SH_2 H_1\f$ term in the superpotential */ double _lambda; /** * The value of the VEV of the higgs that couples to the up-type sector * \f$ g*sqrt(2)M_W\cos\beta \f$ */ Energy _v1; /** * The value of the VEV of the higgs that couples to the down-type sector * \f$ g*sqrt(2)M_W\cos\beta \f$ */ Energy _v2; /** * The top quark trilinear coupling */ complex<Energy> _triTp; /** * The bottom quark trilinear coupling */ complex<Energy> _triBt; /** * A pointer to the top quark */ tcPDPtr _top; /** * A pointer to the bottom quark */ tcPDPtr _bt; /** * CP-even Higgs mixing matrix */ MixingMatrixPtr _mixS; /** * CP-even Higgs mixing matrix */ MixingMatrixPtr _mixP; /** * \f$\tilde{t}\f$ mixing matrix */ MixingMatrixPtr _mixQt; /** * \f$\tilde{b}\f$ mixing matrix */ MixingMatrixPtr _mixQb; /** * \f$ \sin\beta\f$ */ double _sb; /** * \f$ \cos\beta\f$ */ double _cb; /** * The top and bottom quark masses calculated at the last value * of \f$q^2\f$ */ pair<Energy, Energy> _masslast; /** * The scale at which the coupling was last evaluated */ Energy2 _q2last; /** * The value of the overall normalisation when the coupling was last * evaluated. */ double _couplast; /** * The value of the weak coupling was last * evaluated. */ double _coup; /** * The PDG code of the Higgs particle when the vertex was last evaluated */ long _hlast; /** * Whether the tensor coefficient need recalculating or not */ bool _recalc; //@} }; } #endif /* HERWIG_NMSSMGGHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMGOGOHVertex.h b/Models/Susy/NMSSM/NMSSMGOGOHVertex.h --- a/Models/Susy/NMSSM/NMSSMGOGOHVertex.h +++ b/Models/Susy/NMSSM/NMSSMGOGOHVertex.h @@ -1,184 +1,178 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMGOGOHVertex_H #define HERWIG_NMSSMGOGOHVertex_H // // This is the declaration of the NMSSMGOGOHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * Here is the documentation of the NMSSMGOGOHVertex class. * * @see \ref NMSSMGOGOHVertexInterfaces "The interfaces" * defined for NMSSMGOGOHVertex. */ class NMSSMGOGOHVertex: public FFSVertex { public: /** * The default constructor. */ inline NMSSMGOGOHVertex(); /** @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(); /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3); 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. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMGOGOHVertex> initNMSSMGOGOHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMGOGOHVertex & operator=(const NMSSMGOGOHVertex &); private: /** * The various mixing matrices and couplings */ //@{ /** * The V chargino mixing matrix */ MixingMatrixPtr _mixV; /** * The U chargino mixing matrix */ MixingMatrixPtr _mixU; /** * The neutralino mixing matrix */ MixingMatrixPtr _mixN; /** * The CP-even neutral Higgs mixing matrix */ MixingMatrixPtr _mixS; /** * The CP-odd neutral Higgs mixing matrix */ MixingMatrixPtr _mixP; /** * The tri-linear \f$\lambda\f$ coupling */ double _lambda; /** * The tri-linear \f$\kappa\f$ coupling */ double _kappa; /** * \f$\sin\beta\f$ */ double _sinb; /** * \f$\cos\beta\f$ */ double _cosb; /** * \f$\sin\theta_W\f$ */ double _sw; /** * \f$\cos\theta_W\f$ */ double _cw; /** * The last \f$q^2\f$ the coupling was evaluated at. */ Energy2 _q2last; /** * The last value of the coupling */ double _couplast; //@} }; } #endif /* HERWIG_NMSSMGOGOHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMHHHVertex.h b/Models/Susy/NMSSM/NMSSMHHHVertex.h --- a/Models/Susy/NMSSM/NMSSMHHHVertex.h +++ b/Models/Susy/NMSSM/NMSSMHHHVertex.h @@ -1,282 +1,276 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMHHHVertex_H #define HERWIG_NMSSMHHHVertex_H // // This is the declaration of the NMSSMHHHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Helicity * The NMSSMHHHVertex defines the triple * Higgs coupling in the NMSSM. * * @see \ref NMSSMHHHVertexInterfaces "The interfaces" * defined for NMSSMHHHVertex. */ class NMSSMHHHVertex: public SSSVertex { public: /** * The default constructor. */ NMSSMHHHVertex(); 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(); /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3); 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. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMHHHVertex> initNMSSMHHHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMHHHVertex & operator=(const NMSSMHHHVertex &); private: /** * The mixing matrix combination \f$U^S_{ai}U^S_{bj}U^S_{ck}\f$ * @param a The row element of the first CP-even mixing matrix * @param b The column element of the first CP-even mixing matrix * @param c The row element of the second CP-even mixing matrix * @param i The column element of the second CP-even mixing matrix * @param j The row element of the third CP-even mixing matrix * @param k The column element of the third CP-even mixing matrix */ Complex usMix(unsigned int a, unsigned int b, unsigned int c, unsigned int i, unsigned int j, unsigned int k) const { return (*_mixS)(a,i)*(*_mixS)(b,j)*(*_mixS)(c,k) + (*_mixS)(a,i)*(*_mixS)(c,j)*(*_mixS)(b,k) + (*_mixS)(b,i)*(*_mixS)(a,j)*(*_mixS)(c,k) + (*_mixS)(b,i)*(*_mixS)(c,j)*(*_mixS)(a,k) + (*_mixS)(c,i)*(*_mixS)(a,j)*(*_mixS)(b,k) + (*_mixS)(c,i)*(*_mixS)(b,j)*(*_mixS)(a,k); } /** * The mixing matrix combination \f$U^S_{ai}U^P_{bj}U^P_{ck}\f$ * @param a The row element of the first CP-even mixing matrix * @param b The column element of the first CP-even mixing matrix * @param c The row element of the second CP-even mixing matrix * @param i The column element of the second CP-even mixing matrix * @param j The row element of the third CP-even mixing matrix * @param k The column element of the third CP-even mixing matrix */ Complex upMix(unsigned int a, unsigned int b, unsigned int c, unsigned int i, unsigned int j, unsigned int k) const { return (*_mixS)(a,i)*((*_mixP)(b,j)*(*_mixP)(c,k) + (*_mixP)(c,j)*(*_mixP)(b,k)); } private: /** * A pointer to the object containing the SM parameters */ tcHwSMPtr _theSM; /** * The \f$W\f$ mass */ Energy _mw; /** * The \f$Z\f$ mass */ Energy _mz; /** * The \f$b\f$ mass */ Energy _mb; /** * The \f$t\f$ mass */ Energy _mt; /** * \f$\sin^2\theta_W\f$ */ double _sw2; /** * \f$\cos\theta_W\f$ */ double _cw; /** * The CP-even Higgs mixing matrix */ MixingMatrixPtr _mixS; /** * The CP-odd Higgs mixing matrix */ MixingMatrixPtr _mixP; /** * The coefficient of the trilinear \f$SH_2 H_1\f$ term in the superpotential */ double _lambda; /** * The coefficient of the cubic singlet term in the superpotential */ double _kappa; /** * The product \f$\lambda \langle S\rangle \f$. */ Energy _lambdaVEV; /** * The soft trilinear \f$SH_2 H_1\f$ coupling */ Energy _theAl; /** * The soft cubic \f$S\f$ coupling */ Energy _theAk; /** * \f$\sin\beta\f$ */ double _sb; /** * \f$\cos\beta\f$ */ double _cb; /** * \f$\sin2\beta\f$ */ double _s2b; /** * \f$\cos2\beta\f$ */ double _c2b; /** * The value of the VEV of the higgs that couples to the down-type sector * \f$ g*sqrt(2)M_W\cos\beta \f$ */ Energy _vu; /** * The value of the VEV of the higgs that couples to the up-type sector * i.e. \f$ g*sqrt(2)M_W\sin\beta \f$ */ Energy _vd; /** * The value of the VEV of the singlet higgs */ Energy _s; /** * The scale at which this vertex was last evaluated */ Energy2 _q2last; /** * The value of the EW coupling when it was last evaluated */ double _glast; /** * left 3rd generation scalar quark mass */ Energy _MQ3; /** * right scalar top mass */ Energy _MU2; /** * Whether or onto to include the radiative terms */ bool _includeRadiative; }; } #endif /* HERWIG_NMSSMHHHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMHSFSFVertex.h b/Models/Susy/NMSSM/NMSSMHSFSFVertex.h --- a/Models/Susy/NMSSM/NMSSMHSFSFVertex.h +++ b/Models/Susy/NMSSM/NMSSMHSFSFVertex.h @@ -1,252 +1,246 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMHSFSFVertex_H #define HERWIG_NMSSMHSFSFVertex_H // // This is the declaration of the NMSSMHSFSFVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h" #include "Herwig/Models/StandardModel/StandardModel.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * This class defines the coupling of Higgs bosons to the sfermions * in the NMSSM. * * @see \ref NMSSMHSFSFVertexInterfaces "The interfaces" * defined for NMSSMHSFSFVertex. */ class NMSSMHSFSFVertex: public Helicity::SSSVertex { public: /** * The default constructor. */ NMSSMHSFSFVertex(); /** @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(); /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3); 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. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMHSFSFVertex> initNMSSMHSFSFVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMHSFSFVertex & operator=(const NMSSMHSFSFVertex &); private: /** * Return the coupling of the charged higgs to the sfermions */ Complex chargedHiggs(Energy2 q2, long id1, long id2); private: /** @name Stored parameters for fast access.*/ //@{ /** * A pointer to the Standard Model object */ tcHwSMPtr _theSM; /** * The CP-even higgs mixing matrix */ MixingMatrixPtr _mixS; /** * The CP-odd higgs mixing matrix */ MixingMatrixPtr _mixP; /** * The \f$ \tilde{t}\f$ mixing matrix */ MixingMatrixPtr _mixTp; /** * The \f$ \tilde{b}\f$ mixing matrix */ MixingMatrixPtr _mixBt; /** * The \f$ \tilde{\tau}\f$ mixing matrix */ MixingMatrixPtr _mixTa; /** * The top quark trilinear coupling */ complex<Energy> _triTp; /** * The bottom quark trilinear coupling */ complex<Energy> _triBt; /** * The tau lepton trilinear coupling */ complex<Energy> _triTa; /** * The value of \f$\lambda\f$. */ double _lambda; /** * The value of \f$ \lambda <S> \f$, the * V.E.V of the extra gauge singlet scaled * by \f$\lambda\f$ */ Energy _lambdaVEV; /** * The value of the V.E.V \f$ v_1 \f$ */ Energy _v1; /** * The value of the V.E.V \f$ v_2 \f$ */ Energy _v2; /** * The value of \f$ \sin\theta_W \f$ */ double _sw; /** * The value of \f$ \cos\theta_W \f$ */ double _cw; /** * The value of \f$ M_W \f$ */ Energy _mw; /** * The value of \f$ M_Z \f$ */ Energy _mz; /** * The value of \f$ \sin\beta \f$ */ double _sb; /** * The value of \f$ \cos\beta \f$ */ double _cb; /** * The value of \f$ \tan\beta \f$ */ double _tb; //@} /** @name Store previously calculated values for speed. */ //@{ /** * The scale at which the last calculation took place. */ Energy2 _q2last; /** * The value of the dimensionless coupling \f$g_W\f$ when * last calculated. */ double _couplast; /** * The value of mass of the counterpart SM fermion when * last calculated. */ pair<Energy, Energy> _masslast; /** * The PDG codes of the particles in the vertex when it was last evaluated */ pair<long, long> _idlast; //@} }; } #endif /* HERWIG_NMSSMHSFSFVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMPPHVertex.h b/Models/Susy/NMSSM/NMSSMPPHVertex.h --- a/Models/Susy/NMSSM/NMSSMPPHVertex.h +++ b/Models/Susy/NMSSM/NMSSMPPHVertex.h @@ -1,306 +1,300 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMPPHVertex_H #define HERWIG_NMSSMPPHVertex_H // // This is the declaration of the NMSSMPPHVertex class. // #include "Herwig/Models/General/VVSLoopVertex.h" #include "Herwig/Models/StandardModel/StandardModel.fh" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** * This class implements the effective vertex for a higgs coupling * to a pair of photons in the NMSSM. * * @see \ref NMSSMPPHVertexInterfaces "The interfaces" * defined for NMSSMPPHVertex. */ class NMSSMPPHVertex: public VVSLoopVertex { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ NMSSMPPHVertex(); //@} 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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param p1 ParticleData pointer to first particle *@param p2 ParticleData pointer to second particle *@param p3 ParticleData pointer to third particle */ virtual void setCoupling(Energy2 q2, tcPDPtr p1, tcPDPtr p2, tcPDPtr p3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMPPHVertex> initNMSSMPPHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMPPHVertex & operator=(const NMSSMPPHVertex &); private: /** @name Stored parameters. */ //@{ /** * The SM pointer */ tcHwSMPtr _theSM; /** * \f$ \sin\theta_W\f$ */ double _sw; /** * \f$ \cos\theta_W\f$ */ double _cw; /** * \f$ M_W\f$ */ Energy _mw; /** * \f$ M_Z \f$ */ Energy _mz; /** * The product \f$\lambda \langle S\rangle \f$. */ Energy _lambdaVEV; /** * The coefficient of the trilinear \f$SH_2 H_1\f$ term in the superpotential */ double _lambda; /** * The value of the VEV of the higgs that couples to the up-type sector * \f$ g*sqrt(2)M_W\cos\beta \f$ */ Energy _v1; /** * The value of the VEV of the higgs that couples to the down-type sector * \f$ g*sqrt(2)M_W\cos\beta \f$ */ Energy _v2; /** * The top quark trilinear coupling */ complex<Energy> _triTp; /** * The bottom quark trilinear coupling */ complex<Energy> _triBt; /** * The tau quark trilinear coupling */ complex<Energy> _triTa; /** * A pointer to the top quark */ tcPDPtr _top; /** * A pointer to the bottom quark */ tcPDPtr _bt; /** * A pointer to the tau lepton */ tcPDPtr _tau; /** * CP-even Higgs mixing matrix */ MixingMatrixPtr _mixS; /** * CP-even Higgs mixing matrix */ MixingMatrixPtr _mixP; /** * \f$\tilde{t}\f$ mixing matrix */ MixingMatrixPtr _mixQt; /** * \f$\tilde{b}\f$ mixing matrix */ MixingMatrixPtr _mixQb; /** * \f$\tilde{\tau}\f$ mixing matrix */ MixingMatrixPtr _mixLt; /** * \f$ \sin\beta\f$ */ double _sb; /** * \f$ \cos\beta\f$ */ double _cb; /** * The coefficient of the cubic singlet term in the superpotential */ double _kappa; /** * The value of the VEV of the higgs that couples to the down-type sector * \f$ g*sqrt(2)M_W\cos\beta \f$ */ Energy _vu; /** * The value of the VEV of the higgs that couples to the up-type sector * i.e. \f$ g*sqrt(2)M_W\sin\beta \f$ */ Energy _vd; /** * The value of the VEV of the singlet higgs */ Energy _s; /** * The soft trilinear \f$SH_2 H_1\f$ coupling */ Energy _theAl; /** * The U mixing matrix */ tMixingMatrixPtr _mixU; /** * The V mixing matrix */ tMixingMatrixPtr _mixV; /** * The top and bottom quark masses calculated at the last value * of \f$q^2\f$ */ pair<Energy, Energy> _masslast; /** * The scale at which the coupling was last evaluated */ Energy2 _q2last; /** * The value of the overall normalisation when the coupling was last * evaluated. */ double _couplast; /** * The value of the weak coupling was last * evaluated. */ double _coup; /** * The PDG code of the Higgs particle when the vertex was last evaluated */ long _hlast; /** * Whether the tensor coefficient need recalculating or not */ bool _recalc; //@} }; } #endif /* HERWIG_NMSSMPPHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMWHHVertex.h b/Models/Susy/NMSSM/NMSSMWHHVertex.h --- a/Models/Susy/NMSSM/NMSSMWHHVertex.h +++ b/Models/Susy/NMSSM/NMSSMWHHVertex.h @@ -1,154 +1,148 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMWHHVertex_H #define HERWIG_NMSSMWHHVertex_H // // This is the declaration of the NMSSMWHHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * The NMSSMWHHVertex class implements the coupling of an electroweak" * gauge boson with two Higgs bosons in the NMSSM. * * @see \ref NMSSMWHHVertexInterfaces "The interfaces" * defined for NMSSMWHHVertex. */ class NMSSMWHHVertex: public VSSVertex { public: /** * The default constructor. */ NMSSMWHHVertex(); /** @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(); /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMWHHVertex> initNMSSMWHHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMWHHVertex & operator=(const NMSSMWHHVertex &); private: /** * \f$\sin\beta\f$ */ double _sinb; /** * \f$\cos\beta\f$ */ double _cosb; /** * \f$\sin\theta_W\f$ */ double _sw; /** * \f$\cos\theta_W\f$ */ double _cw; /** * The last \f$q^2\f$ the coupling was evaluated at. */ Energy2 _q2last; /** * The last value of the coupling */ double _couplast; /** * Mixing matrix for the CP-even Higgs bosons */ MixingMatrixPtr _mixS; /** * Mixing matrix for the CP-odd Higgs bosons */ MixingMatrixPtr _mixP; }; } #endif /* HERWIG_NMSSMWHHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMWWHHVertex.h b/Models/Susy/NMSSM/NMSSMWWHHVertex.h --- a/Models/Susy/NMSSM/NMSSMWWHHVertex.h +++ b/Models/Susy/NMSSM/NMSSMWWHHVertex.h @@ -1,160 +1,154 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMWWHHVertex_H #define HERWIG_NMSSMWWHHVertex_H // // This is the declaration of the NMSSMWWHHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the NMSSMWWHHVertex class. * * @see \ref NMSSMWWHHVertexInterfaces "The interfaces" * defined for NMSSMWWHHVertex. */ class NMSSMWWHHVertex: public Helicity::VVSSVertex { public: /** * The default constructor. */ NMSSMWWHHVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3, tcPDPtr part4); 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMWWHHVertex> initNMSSMWWHHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMWWHHVertex & operator=(const NMSSMWWHHVertex &); private: /** * Storage of the couplings. */ //@{ /** * The last value of the electroweak coupling calculated. */ Complex couplast_; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 q2last_; //@} /** * \f$\sin\theta_W\f$ */ double sw_; /** * \f$\cos\theta_W\f$ */ double cw_; /** * \f$\sin\beta\f$ */ double sb_; /** * \f$\cos\beta\f$ */ double cb_; /** * The CP-even Higgs mixing matrix */ MixingMatrixPtr mixS_; /** * The CP-odd Higgs mixing matrix */ MixingMatrixPtr mixP_; }; } #endif /* HERWIG_NMSSMWWHHVertex_H */ diff --git a/Models/Susy/NMSSM/NMSSMWWHVertex.h b/Models/Susy/NMSSM/NMSSMWWHVertex.h --- a/Models/Susy/NMSSM/NMSSMWWHVertex.h +++ b/Models/Susy/NMSSM/NMSSMWWHVertex.h @@ -1,158 +1,152 @@ // -*- C++ -*- #ifndef HERWIG_NMSSMWWHVertex_H #define HERWIG_NMSSMWWHVertex_H // // This is the declaration of the NMSSMWWHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h" #include "Herwig/Models/Susy/MixingMatrix.h" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** \ingroup Helicity * * The NMSSMWWHVertex class is the implementation of the coupling of two electroweak * gauge bosons to the Higgs bosons of the NMSSM. It inherits from VVSVertex and * implements the setCoupling member. * * @see \ref NMSSMWWHVertexInterfaces "The interfaces" * @see VVSVertex * @see SMWWHVertex * defined for NMSSMWWHVertex. */ class NMSSMWWHVertex: public VVSVertex { public: /** * The default constructor. */ NMSSMWWHVertex(); 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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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. */ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<NMSSMWWHVertex> initNMSSMWWHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NMSSMWWHVertex & operator=(const NMSSMWWHVertex &); private: /** * Storage of the couplings. */ //@{ /** * The last value of the electroweak coupling calculated. */ Complex _couplast; /** * The scale \f$q^2\f$ at which the coupling was last evaluated. */ Energy2 _q2last; /** * The mass of the \f$W\f$ boson. */ Energy _mw; /** * The factor for the \f$Z\f$ vertex. */ double _zfact; /** * \f$\sin\beta\f$ */ double _sinb; /** * \f$\cos\beta\f$ */ double _cosb; /** * Mixing matrix for the CP-even Higgs bosons */ MixingMatrixPtr _mixS; //@} }; } #endif /* HERWIG_NMSSMWWHVertex_H */ diff --git a/Models/Susy/SSGVNHVertex.h b/Models/Susy/SSGVNHVertex.h --- a/Models/Susy/SSGVNHVertex.h +++ b/Models/Susy/SSGVNHVertex.h @@ -1,145 +1,139 @@ // -*- C++ -*- #ifndef HERWIG_SSGVNHVertex_H #define HERWIG_SSGVNHVertex_H // // This is the declaration of the SSGVNHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/RFSVertex.h" #include "MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** * The SSGVNHVertex class implements the coupling of the gravitino to * a neutralino and Higgs boson. * * @see \ref SSGVNHVertexInterfaces "The interfaces" * defined for SSGVNHVertex. */ class SSGVNHVertex: public Helicity::RFSVertex { public: /** * The default constructor. */ SSGVNHVertex(); /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3); /** @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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSGVNHVertex> initSSGVNHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSGVNHVertex & operator=(const SSGVNHVertex &); private: /** * The value of \f$\sin\alpha\f$ */ double sa_; /** * The value of \f$\sin\beta\f$ */ double sb_; /** * The value of \f$\cos\alpha\f$ */ double ca_; /** * The value of \f$\cos\beta\f$ */ double cb_; /** * Pointer to the neutralino mixing matrix */ tMixingMatrixPtr nmix_; /** * The Planck mass */ Energy MPlanck_; }; } #endif /* HERWIG_SSGVNHVertex_H */ diff --git a/Models/Susy/SSGVNVVertex.h b/Models/Susy/SSGVNVVertex.h --- a/Models/Susy/SSGVNVVertex.h +++ b/Models/Susy/SSGVNVVertex.h @@ -1,152 +1,146 @@ // -*- C++ -*- #ifndef HERWIG_SSGVNVVertex_H #define HERWIG_SSGVNVVertex_H // // This is the declaration of the SSGVNVVertex class. // #include "ThePEG/Helicity/Vertex/Vector/RFVVertex.h" #include "MixingMatrix.h" namespace Herwig { using namespace ThePEG; /** * The SSGVNVVertex class implements the coupling of the gravitino * to a gaugino and the assoicated gauge boson. * * @see \ref SSGVNVVertexInterfaces "The interfaces" * defined for SSGVNVVertex. */ class SSGVNVVertex: public Helicity::RFVVertex { public: /** * The default constructor. */ SSGVNVVertex(); /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSGVNVVertex> initSSGVNVVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSGVNVVertex & operator=(const SSGVNVVertex &); private: /** * \f$\sin\theta_W\f$ */ double sw_; /** * \f$\sin\theta_W\f$ */ double cw_; /** * The value of \f$\sin\beta\f$ */ double sb_; /** * The value of \f$\cos\beta\f$ */ double cb_; /** * The Z mass */ Energy mz_; /** * Pointer to the neutralino mixing matrix */ tMixingMatrixPtr nmix_; /** * The Planck mass */ Energy MPlanck_; }; } #endif /* HERWIG_SSGVNVVertex_H */ diff --git a/Models/Susy/SSHGGVertex.h b/Models/Susy/SSHGGVertex.h --- a/Models/Susy/SSHGGVertex.h +++ b/Models/Susy/SSHGGVertex.h @@ -1,292 +1,286 @@ // -*- C++ -*- // // SSHGGVertex.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_SSHGGVertex_H #define HERWIG_SSHGGVertex_H // // This is the declaration of the SSHGGVertex class. // #include "Herwig/Models/General/VVSLoopVertex.h" #include "MSSM.h" namespace Herwig { /** * This class implements the effective vertex coupling a higgs * to a pair of gluons in the MSSM. The loop include the stop and sbottom * squarks and the top quark. * * * @see \ref SSHGGVertexInterfaces "The interfaces" * defined for SSHGGVertex. */ class SSHGGVertex: public VVSLoopVertex { public: /** * The default constructor. */ SSHGGVertex(); /** @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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param particle1 ParticleData pointer to first particle *@param particle2 ParticleData pointer to second particle *@param particle3 ParticleData pointer to third particle */ virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2, tcPDPtr particle3); 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: /** * 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(); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSHGGVertex> initSSHGGVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSHGGVertex & operator=(const SSHGGVertex &); private: /** * Switch to turn off squark trilinear couplings via A terms for testing */ bool theIncludeTriLinear; /** * Treat the pseudoscalar as scalar for comparison with ISAJET */ bool thePseudoScalarTreatment; /** * A pointer to the MSSM object */ tMSSMPtr theMSSM; /** * Value of \f$\sin\theta_W\f$ */ double theSw; /** * The mass of the \f$W\f$ boson. */ Energy theMw; /** * The factor \f$\frac{M_Z}{\cos\theta_W}\f$ */ Energy theZfact; /** * The mixing matrix factor \f$Q^{2i}_{11}Q^{2i}_{11}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt1L; /** * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt1R; /** * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt1LR; /** * The mixing matrix factor \f$Q^{2i}_{21}Q^{2i}_{21}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt2L; /** * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt2R; /** * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt2LR; /** * The mixing matrix factor \f$Q^{2i-1}_{11}Q^{2i-1}_{11}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb1L; /** * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb1R; /** * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb1LR; /** * The mixing matrix factor \f$Q^{2i-1}_{21}Q^{2i-1}_{21}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb2L; /** * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb2R; /** * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb2LR; /** * A pointer to the top quark ParticleData object */ tPDPtr thetop; /** * A pointer to the bottom quark ParticleData object */ tPDPtr thebot; /** * The squark masses */ vector<Energy> theSqmass; /** * The value of \f$ \tan\beta \f$ */ double theTanB; /** * The value of \f$ \sin\alpha \f$ */ double theSinA; /** * The value of \f$ \cos\alpha \f$ */ double theCosA; /** * The value of \f$ \sin\beta \f$ */ double theSinB; /** * The value of \f$ \cos\beta \f$ */ double theCosB; /** * The value of \f$ \sin(\alpha + \beta) \f$ */ double theSinApB; /** * The value of \f$ \cos(\alpha + \beta) \f$ */ double theCosApB; /** * Last value of the coupling calculated */ Complex theCouplast; /** * The scale \f$q^2\f$ at which coupling was last evaluated */ Energy2 theq2last; /** * Whether we have calculated the tensor coefficents yet */ bool theHaveCoeff; /** * ID of the higgs */ long theLastID; }; } #endif /* HERWIG_SSHGGVertex_H */ diff --git a/Models/Susy/SSHPPVertex.h b/Models/Susy/SSHPPVertex.h --- a/Models/Susy/SSHPPVertex.h +++ b/Models/Susy/SSHPPVertex.h @@ -1,351 +1,345 @@ // -*- C++ -*- // // SSHPPVertex.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_SSHPPVertex_H #define HERWIG_SSHPPVertex_H // // This is the declaration of the SSHPPVertex class. // #include "Herwig/Models/General/VVSLoopVertex.h" #include "MSSM.h" namespace Herwig { /** * This class implements the effective vertex coupling a higgs * to a pair of photons in the MSSM. The loops include third generation * sfermions and fermions, \f$W^\pm\f$ and \f$H^\pm\f$ * * @see \ref SSHPPVertexInterfaces "The interfaces" * defined for SSHPPVertex. */ class SSHPPVertex: public VVSLoopVertex { public: /** * The default constructor. */ SSHPPVertex(); /** @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(); /** * Calculate couplings *@param q2 Scale at which to evaluate coupling *@param particle1 ParticleData pointer to first particle *@param particle2 ParticleData pointer to second particle *@param particle3 ParticleData pointer to third particle */ virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2, tcPDPtr particle3); 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: /** * 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(); private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSHPPVertex> initSSHPPVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSHPPVertex & operator=(const SSHPPVertex &); private: /** * Switch to turn off squark trilinear couplings via A terms for testing */ bool theIncludeTriLinear; /** * Treat the pseudoscalar as scalar for comparison with ISAJET */ bool thePseudoScalarTreatment; /** * A pointer to the MSSM object */ tMSSMPtr theMSSM; /** * Value of \f$\sin\theta_W\f$ */ double theSw; /** * The mass of the \f$W\f$ boson. */ Energy theMw; /** * The factor \f$\frac{M_Z}{\cos\theta_W}\f$ */ Energy theZfact; /** * The mixing matrix factor \f$Q^{2i}_{11}Q^{2i}_{11}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt1L; /** * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt1R; /** * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt1LR; /** * The mixing matrix factor \f$Q^{2i}_{21}Q^{2i}_{21}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt2L; /** * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt2R; /** * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ * for the \f$\tilde{t}\f$ */ Complex theQt2LR; /** * The mixing matrix factor \f$Q^{2i-1}_{11}Q^{2i-1}_{11}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb1L; /** * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb1R; /** * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb1LR; /** * The mixing matrix factor \f$Q^{2i-1}_{21}Q^{2i-1}_{21}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb2L; /** * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb2R; /** * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ * for the \f$\tilde{b}\f$ */ Complex theQb2LR; /** * The mixing matrix factor \f$L^{2i}_{11}L^{2i}_{11}\f$ * for the \f$\tilde{\tau}\f$ */ Complex theLt1L; /** * The mixing matrix factor \f$L^{2i}_{12}L^{2i}_{12}\f$ * for the \f$\tilde{\tau}\f$ */ Complex theLt1R; /** * The mixing matrix factor \f$L^{2i}_{12}L^{2i}_{12}\f$ * for the \f$\tilde{\tau}\f$ */ Complex theLt1LR; /** * The mixing matrix factor \f$L^{2i}_{21}L^{2i}_{21}\f$ * for the \f$\tilde{\tau}\f$ */ Complex theLt2L; /** * The mixing matrix factor \f$L^{2i}_{22}L^{2i}_{22}\f$ * for the \f$\tilde{\tau}\f$ */ Complex theLt2R; /** * The mixing matrix factor \f$L^{2i}_{22}L^{2i}_{22}\f$ * for the \f$\tilde{\tau}\f$ */ Complex theLt2LR; /** * A pointer to the top quark ParticleData object */ tPDPtr thetop; /** * A pointer to the bottom quark ParticleData object */ tPDPtr thebot; /** * A pointer to the tau lepton ParticleData object */ tPDPtr thetau; /** * The sfermion masses */ vector<Energy> theSfmass; /** * The value of \f$ \tan\beta \f$ */ double theTanB; /** * The value of \f$ \sin\alpha \f$ */ double theSinA; /** * The value of \f$ \cos\alpha \f$ */ double theCosA; /** * The value of \f$ \sin\beta \f$ */ double theSinB; /** * The value of \f$ \cos\beta \f$ */ double theCosB; /** * The value of \f$ \sin(\alpha + \beta) \f$ */ double theSinApB; /** * The value of \f$ \cos(\alpha + \beta) \f$ */ double theCosApB; /** * The value of \f$ \sin(\beta-\alpha) \f$ */ double theSinBmA; /** * The value of \f$ \cos(\beta-\alpha) \f$ */ double theCosBmA; /** * The U mixing matrix */ tMixingMatrixPtr theU; /** * The V mixing matrix */ tMixingMatrixPtr theV; /** * Last value of the coupling calculated */ Complex theCouplast; /** * The scale \f$q^2\f$ at which coupling was last evaluated */ Energy2 theq2last; /** * Whether we have calculated the tensor coefficents yet */ bool theHaveCoeff; /** * ID of the higgs */ long theLastID; }; } #endif /* HERWIG_SSHPPVertex_H */ diff --git a/Models/Susy/SSHSFSFVertex.h b/Models/Susy/SSHSFSFVertex.h --- a/Models/Susy/SSHSFSFVertex.h +++ b/Models/Susy/SSHSFSFVertex.h @@ -1,273 +1,267 @@ // -*- C++ -*- // // SSHSFSFVertex.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_SSHSFSFVertex_H #define HERWIG_SSHSFSFVertex_H // // This is the declaration of the SSHSFSFVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h" #include "MSSM.h" namespace Herwig { using namespace ThePEG; /** * This is the implementation of the coupling for a Higgs in the MSSM * to a pair of sfermions. * * @see \ref SSHSFSFVertexInterfaces "The interfaces" * defined for SSHSFSFVertex. */ class SSHSFSFVertex: public SSSVertex { /** A vector of MixingMatrix pointers. */ typedef vector<MixingMatrixPtr> MMPVector; public: /** * The default constructor. */ SSHSFSFVertex(); /** @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(); /** * Calculate the coupling at the given scale. * @param q2 The scale at which to evaluate the coupling * @param particle1 The first particle at the vertex * @param particle2 The second particle at the vertex * @param particle3 The third particle at the vertex */ void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2, tcPDPtr particle3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSHSFSFVertex> initSSHSFSFVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSHSFSFVertex & operator=(const SSHSFSFVertex &); private: /** @name Functions to calculate the coupling based on the sfermion type. */ //@{ /** * Calculate the coupling for the first higgs * @param q2 scale * @param higgs The ID of the higgs * @param smID The ID of the SM particle to which it is a partner. * @param alpha The mass eigenstate of an sfermion * @param beta The mass eigenstate of the other sfermion */ void downSF(Energy2 q2, long higgs, long smID, unsigned int alpha, unsigned int beta); /** * Calculate the coupling for the second higgs * @param q2 scale * @param higgs The ID of the higgs * @param smID The ID of the SM particle to which it is a partner. * @param alpha The mass eigenstate of an sfermion * @param beta The mass eigenstate of the other sfermion */ void upSF(Energy2 q2, long higgs, long smID, unsigned int alpha, unsigned int beta); /** * Calculate the coupling for the third higgs * @param q2 scale * @param higgs The ID of the higgs * @param smID The ID of the SM particle to which it is a partner. * @param alpha The mass eigenstate of an sfermion * @param beta The mass eigenstate of the other sfermion */ void leptonSF(Energy2 q2, long higgs, long smID, unsigned int alpha, unsigned int beta); /** * Calculate the coupling for the charged higgs * @param q2 scale * @param id1 The ID of the first sfermion * @param id2 The ID of the second sfermion */ void chargedHiggs(Energy2 q2, long id1, long id2); //@} private: /** * A vector containing pointers to the mixing matrices, 0 = stop, * 1 = sbottom, 2 = stau */ MMPVector theMix; /** * A vector containing the trilinear couplings, quarks then leptons */ vector<complex<Energy> > theTriC; /** * The value of \f$\sin\alpha\f$. */ double theSinA; /** * The value of \f$\cos\alpha\f$. */ double theCosA; /** * The value of \f$\sin\beta\f$. */ double theSinB; /** * The value of \f$\cos\beta\f$. */ double theCosB; /** * The value of \f$\tan\beta\f$. */ double theTanB; /** * The value of \f$\sin(\alpha + \beta)\f$. */ double theSinAB; /** * The value of \f$\cos(\alpha + \beta)\f$. */ double theCosAB; /** * The mass of the \f$W\f$. */ Energy theMw; /** * The mass of the \f$Z\f$. */ Energy theMz; /** * The \f$\mu\f$ parameter. */ Energy theMu; /** * The value of \f$\sin\theta_W\f$ */ double theSw; /** * The value of \f$\cos\theta_W\f$ */ double theCw; /** * The value of the coupling when it was last evaluated */ complex<Energy> theCoupLast; /** * The scale at which the coupling was last evaluated */ Energy2 theq2Last; /** * The value of g coupling when it was last evaluated */ double thegLast; /** * The ID of the higgs when the vertex was last evaluated */ long theHLast; /** * The ID of the first sfermion when the vertex was last evaluated */ long theSF1Last; /** * The ID of the second sfermion when the vertex was last evaluated */ long theSF2Last; /** * The Model */ tMSSMPtr theMSSM; }; } #endif /* HERWIG_SSHSFSFVertex_H */ diff --git a/Models/Susy/SSNCTVertex.h b/Models/Susy/SSNCTVertex.h --- a/Models/Susy/SSNCTVertex.h +++ b/Models/Susy/SSNCTVertex.h @@ -1,180 +1,174 @@ // -*- C++ -*- #ifndef HERWIG_SSNCTVertex_H #define HERWIG_SSNCTVertex_H // // This is the declaration of the SSNCTVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h" #include "MSSM.h" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the SSNCTVertex class. * * @see \ref SSNCTVertexInterfaces "The interfaces" * defined for SSNCTVertex. */ class SSNCTVertex: public Helicity::FFSVertex { public: /** * The default constructor. */ SSNCTVertex(); 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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSNCTVertex> initSSNCTVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSNCTVertex & operator=(const SSNCTVertex &); private: /** * High scale for the loops */ Energy MX_; /** * Pointer to the neutralino mixing matrix */ tMixingMatrixPtr nmix_; /** * \f$\sin(\theta_w)\f$ */ double sw_; /** * \f$\cos(\theta_w)\f$ */ double cw_; /** * Mass of the W */ Energy mw_; /** * \f$\sin(\beta)\f$ */ double sb_; /** * \f$\cos(\beta)\f$ */ double cb_; /** * The scale at which the coupling was last evaluated. */ Energy2 q2last_; /** * The value of the normalisation when it was evaluated at _q2last */ Complex couplast_; /** * Store the value of the left coupling when it was last evaluated */ Complex leftlast_; /** * Store the value of the right coupling when it was last evaluated */ Complex rightlast_; /** * Store the id of the last neutralino to be evaluate */ long idlast_; /** * Mixing parameter */ Complex epsilon_; }; } #endif /* HERWIG_SSNCTVertex_H */ diff --git a/Models/Susy/SSWGSSVertex.h b/Models/Susy/SSWGSSVertex.h --- a/Models/Susy/SSWGSSVertex.h +++ b/Models/Susy/SSWGSSVertex.h @@ -1,178 +1,172 @@ // -*- C++ -*- // // SSWGSSVertex.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_SSWGSSVertex_H #define HERWIG_SSWGSSVertex_H // // This is the declaration of the SSWGSSVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h" //#include "SusyBase.h" #include "MSSM.h" namespace Herwig { using namespace ThePEG; /** * This is the implementation of the 4 point gluon-gluon-squark-squark * vertex. It inherits from VVSSVertex and implements the setCouopling * method. * * @see VVSSVertex */ class SSWGSSVertex: public VVSSVertex { 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 default constructor. */ SSWGSSVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3,tcPDPtr part4); public: /** * 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSWGSSVertex> initSSWGSSVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSWGSSVertex & operator=(const SSWGSSVertex &); private: /** * Value of \f$sin(\theta_w)\f$ */ double _sw; /** * Value of \f$cos(\theta_w)\f$ */ double _cw; /** * Scale at which the coupling was last evaluated */ Energy2 _q2last; /** * Value of em coupling when last evaluated */ Complex _emcouplast; /** * Value of strong coupling when last evaluated */ Complex _scouplast; /** * Stop mixing matrix */ tMixingMatrixPtr _stop; /** * Sbottom mixing matrix */ tMixingMatrixPtr _sbottom; /** * The up type squark present when the vertex was evaluated. */ long _ulast; /** * The down type squark present when the vertex was evaluated. */ long _dlast; /** * The gauge boson present when the vertex was last evaluated. */ long _gblast; /** * The value of the mixing matrix dependent part when the vertex was * last evaluated */ Complex _factlast; }; } #endif /* HERWIG_SSWGSSVertex_H */ diff --git a/Models/Susy/SSWSSVertex.h b/Models/Susy/SSWSSVertex.h --- a/Models/Susy/SSWSSVertex.h +++ b/Models/Susy/SSWSSVertex.h @@ -1,175 +1,169 @@ // -*- C++ -*- // // SSWSSVertex.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_SSWSSVertex_H #define HERWIG_SSWSSVertex_H // // This is the declaration of the SSWSSVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "MSSM.h" namespace Herwig { using namespace ThePEG; /** * This is the implementation of the coupling of an SM gauge boson to * a pair of sfermions. * It inherits from VSSVertex and implements the setCoupling() method. * * @see VSSVertex */ class SSWSSVertex: public VSSVertex { public: /** * The default constructor. */ SSWSSVertex(); 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(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSWSSVertex> initSSWSSVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSWSSVertex & operator=(const SSWSSVertex &); /** * Value of \f$sin(\theta_w)\f$ */ double _sw; /** * Value of \f$cos(\theta_w)\f$ */ double _cw; /** * Scale at which the coupling was last evaluated */ Energy2 _q2last; /** * Value of coupling when last evaluated */ Complex _couplast; /** * Stau mixing matrix */ tMixingMatrixPtr _stau; /** * Stop mixing matrix */ tMixingMatrixPtr _stop; /** * Sbottom mixing matrix */ tMixingMatrixPtr _sbottom; /** * The up type sfermion present when the vertex was evaluated. */ long _ulast; /** * The down type sfermion present when the vertex was evaluated. */ long _dlast; /** * The gauge boson present when the vertex was last evaluated. */ long _gblast; /** * The value of the mixing matrix dependent part when the vertex was * last evaluated */ Complex _factlast; }; } #endif /* HERWIG_SSWSSVertex_H */ diff --git a/Models/Susy/SSWWHVertex.h b/Models/Susy/SSWWHVertex.h --- a/Models/Susy/SSWWHVertex.h +++ b/Models/Susy/SSWWHVertex.h @@ -1,170 +1,164 @@ // -*- C++ -*- // // SSWWHVertex.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_SSWWHVertex_H #define HERWIG_SSWWHVertex_H // // This is the declaration of the SSWWHVertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h" #include "MSSM.h" namespace Herwig { using namespace ThePEG; /** * This class implements the coupling of a higgs in the MSSM * to a pair of SM gauge bosons. * * @see \ref SSWWHVertexInterfaces "The interfaces" * defined for SSWWHVertex. */ class SSWWHVertex: public VVSVertex { public: /** * The default constructor. */ SSWWHVertex(); 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(); /** * Calculate the coupling for the vertex * @param q2 The scale to at which evaluate the coupling. * @param particle1 The first particle in the vertex. * @param particle2 The second particle in the vertex. * @param particle3 The third particle in the vertex. */ virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2, tcPDPtr particle3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<SSWWHVertex> initSSWWHVertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SSWWHVertex & operator=(const SSWWHVertex &); private: /** * The value of the factor \f$\frac{m_W \sin(\beta-\alpha)}{\sin\theta_W}\f$ */ Energy theh0Wfact; /** * The value of the factor \f$\frac{m_W \cos(\beta-\alpha)}{\sin\theta_W}\f$ */ Energy theH0Wfact; /** * The value of the factor * \f$\frac{m_Z\sin(\beta-\alpha)}{\sin\theta_W\cos\theta_W}\f$ */ Energy theh0Zfact; /** * The value of the factor * \f$\frac{m_Z\cos(\beta-\alpha)}{\sin\theta_W\cos\theta_W}\f$ */ Energy theH0Zfact; /** * The value of the coupling when it was last evaluated */ complex<Energy> theCoupLast; /** * The value of \f$\sqrt{4\pi \alpha(q2)}\f$ when it was last evaluated. */ Complex theElast; /** * The scale at which the coupling was last evaluated */ Energy2 theq2last; /** * The ID of the last higgs for which the vertex was evaluated */ long theHlast; /** * The ID of the last gauge boson for which the vertex was evaluated */ long theGBlast; }; } #endif /* HERWIG_SSWWHVertex_H */ diff --git a/Models/TTbAsymm/TTbAModel.h b/Models/TTbAsymm/TTbAModel.h --- a/Models/TTbAsymm/TTbAModel.h +++ b/Models/TTbAsymm/TTbAModel.h @@ -1,319 +1,313 @@ // -*- C++ -*- #ifndef HERWIG_TTbAModel_H #define HERWIG_TTbAModel_H // // This is the declaration of the TTbAModel class. // #include "Herwig/Models/General/BSMModel.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "TTbAModel.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * Here is the documentation of the TTbAModel class. * * @see \ref TTbAModelInterfaces "The interfaces" * defined for TTbAModel. */ class TTbAModel: public BSMModel { public: /** * The default constructor. */ TTbAModel(); /** @name Vertices */ //@{ /** * Pointer to the object handling W prime vertex. */ tAbstractFFVVertexPtr vertexWPTD() const {return _theWPTDVertex;} /** * Pointer to the object handling Z prime vertex. */ tAbstractFFVVertexPtr vertexZPQQ() const {return _theZPQQVertex;} 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(); /** * Return the W prime top-down left-handed coupling */ double _cWPTD_left() const {return _gWPTD_L;} /** * Return the W prime top-down right-handed coupling */ double _cWPTD_right() const {return _gWPTD_R;} /** * Return the Z prime top-up left-handed coupling */ double _cZPTU_left() const {return _gZPTU_L;} /** * Return the Z prime top-up right-handed coupling */ double _cZPTU_right() const {return _gZPTU_R;} /** * Return the Z prime up-upbar left-handed coupling */ double _cZPUU_left() const {return _gZPUU_L;} /** * Return the Z prime up-upbar right-handed coupling */ double _cZPUU_right() const {return _gZPUU_R;} /** * Return the Z prime charm-charmbar left-handed coupling */ double _cZPCC_left() const {return _gZPCC_L;} /** * Return the Z prime charm-charmbar right-handed coupling */ double _cZPCC_right() const {return _gZPCC_R;} /** * Return the axigluon q-qbar left-handed coupling */ double _cAGQQ_left() const {return _gAGQQ_L;} /** * Return the axigluon q-qbar right-handed coupling */ double _cAGQQ_right() const {return _gAGQQ_R;} /** * Return the axigluon t-tbar left-handed coupling */ double _cAGTT_left() const {return _gAGTT_L;} /** * Return the axigluon t-tbar right-handed coupling */ double _cAGTT_right() const {return _gAGTT_R;} /** * Return the alphaX value of the SU(2)_X model */ double _alphaX_value() const {return _alphaXparam;} /** * Return the costheta misalignment value of the SU(2)_X model */ double _costhetaX_value() const {return _costhetaXparam;} /** * Return the selected model id */ int _model() const {return _modelselect;} 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(); //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<TTbAModel> initTTbAModel; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ TTbAModel & operator=(const TTbAModel &); /** * Pointer to the object handling the Wp to Top Down vertex. */ AbstractFFVVertexPtr _theWPTDVertex; /** * Pointer to the object handling the Zp to Quark-antiQuark vertex. */ AbstractFFVVertexPtr _theZPQQVertex; /** * Pointer to the object handling the Ag to Quark-antiQuark vertex. */ AbstractFFVVertexPtr _theAGQQVertex; /** * Pointer to the object handling the SU(2)_X vertex. */ AbstractFFVVertexPtr _theSU2XVertex; /** * W prime coupling to top-down (left-handed) */ double _gWPTD_L; /** * W prime coupling to top-down (right-handed) */ double _gWPTD_R; /** * Z prime coupling to top-up (left-handed) */ double _gZPTU_L; /** * Z prime coupling to top-up (right-handed) */ double _gZPTU_R; /** * Z prime coupling to up-upbar (left-handed) */ double _gZPUU_L; /** * Z prime coupling to up-upbar (right-handed) */ double _gZPUU_R; /** * Z prime coupling to charm-charmbar (left-handed) */ double _gZPCC_L; /** * Z prime coupling to charm-charmbar (right-handed) */ double _gZPCC_R; /** * Axigluon coupling to q-qbar (left-handed) */ double _gAGQQ_L; /** * Axigluon coupling to q-qbar (right-handed) */ double _gAGQQ_R; /** * Axigluon coupling to t-tbar (left-handed) */ double _gAGTT_L; /** * Axigluon coupling to t-tbar (right-handed) */ double _gAGTT_R; /** * SU(2)_X alpha_X parameter */ double _alphaXparam; /** * SU(2)_X costheta misalignment angle */ double _costhetaXparam; /** * Model selector */ int _modelselect; }; } #endif /* HERWIG_TTbAModel_H */ diff --git a/Models/TTbAsymm/TTbAModelAGQQVertex.h b/Models/TTbAsymm/TTbAModelAGQQVertex.h --- a/Models/TTbAsymm/TTbAModelAGQQVertex.h +++ b/Models/TTbAsymm/TTbAModelAGQQVertex.h @@ -1,153 +1,148 @@ // -*- C++ -*- // // TTbAModelAGQQVertex.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_TTbAModelAGQQVertex_H #define HERWIG_TTbAModelAGQQVertex_H // // This is the declaration of the TTbAModelAGQQVertex class. #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "Herwig/Models/TTbAsymm/TTbAModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFVVertex * @see VertexBase */ class TTbAModelAGQQVertex: public FFVVertex { public: /** * Default constructor. */ TTbAModelAGQQVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<TTbAModelAGQQVertex> initTTbAModelAGQQVertex; - - /** * Private and non-existent assignment operator. */ TTbAModelAGQQVertex & operator=(const TTbAModelAGQQVertex &); /** * Pointer to the model object. */ tcSMPtr _theModel; private: /** * Storage of the couplings. */ //@{ /** * Axigluon coupling to q-qbar (left-handed) */ double _cAGQQ_L; /** * Axigluon coupling to q-qbar (right-handed) */ double _cAGQQ_R; /** * Axigluon coupling to t-tbar (left-handed) */ double _cAGTT_L; /** * Axigluon coupling to t-tbar (right-handed) */ double _cAGTT_R; /** * Model selector */ int _models; //@} }; } #endif /* HERWIG_TTbAModelAGQQVertex_H */ diff --git a/Models/TTbAsymm/TTbAModelSU2XVertex.h b/Models/TTbAsymm/TTbAModelSU2XVertex.h --- a/Models/TTbAsymm/TTbAModelSU2XVertex.h +++ b/Models/TTbAsymm/TTbAModelSU2XVertex.h @@ -1,149 +1,144 @@ // -*- C++ -*- // // TTbAModelSU2XVertex.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_TTbAModelSU2XVertex_H #define HERWIG_TTbAModelSU2XVertex_H // // This is the declaration of the TTbAModelSU2XVertex class. #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "Herwig/Models/TTbAsymm/TTbAModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFVVertex * @see VertexBase */ class TTbAModelSU2XVertex: public FFVVertex { public: /** * Default constructor. */ TTbAModelSU2XVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<TTbAModelSU2XVertex> initTTbAModelSU2XVertex; - - /** * Private and non-existent assignment operator. */ TTbAModelSU2XVertex & operator=(const TTbAModelSU2XVertex &); /** * Pointer to the model object. */ tcSMPtr _theModel; private: /** * Storage of the couplings. */ //@{ /** * alpha_X coupling for the SU(2)_X gauge */ double _alphaX; /** * Misalignment angle cosine */ double _costhetaX; /** * coupling strength for the SU(2)_X gauge */ double _gX; /** * Model selector */ int _models; //@} }; } #endif /* HERWIG_TTbAModelSU2XVertex_H */ diff --git a/Models/TTbAsymm/TTbAModelWPTDVertex.h b/Models/TTbAsymm/TTbAModelWPTDVertex.h --- a/Models/TTbAsymm/TTbAModelWPTDVertex.h +++ b/Models/TTbAsymm/TTbAModelWPTDVertex.h @@ -1,143 +1,138 @@ // -*- C++ -*- // // TTbAModelWPTDVertex.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_TTbAModelWPTDVertex_H #define HERWIG_TTbAModelWPTDVertex_H // // This is the declaration of the TTbAModelWPTDVertex class. #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "Herwig/Models/TTbAsymm/TTbAModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFVVertex * @see VertexBase */ class TTbAModelWPTDVertex: public FFVVertex { public: /** * Default constructor. */ TTbAModelWPTDVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<TTbAModelWPTDVertex> initTTbAModelWPTDVertex; - - /** * Private and non-existent assignment operator. */ TTbAModelWPTDVertex & operator=(const TTbAModelWPTDVertex &); /** * Pointer to the model object. */ tcSMPtr _theModel; private: /** * Storage of the couplings. */ //@{ /** * W prime coupling to top-down (left-handed) */ double _cWPTD_L; /** * W prime coupling to top-down (right-handed) */ double _cWPTD_R; /** * Model selector */ int _models; //@} }; } #endif /* HERWIG_TTbAModelWPTDVertex_H */ diff --git a/Models/TTbAsymm/TTbAModelZPQQVertex.h b/Models/TTbAsymm/TTbAModelZPQQVertex.h --- a/Models/TTbAsymm/TTbAModelZPQQVertex.h +++ b/Models/TTbAsymm/TTbAModelZPQQVertex.h @@ -1,166 +1,161 @@ // -*- C++ -*- // // TTbAModelZPQQVertex.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_TTbAModelZPQQVertex_H #define HERWIG_TTbAModelZPQQVertex_H // // This is the declaration of the TTbAModelZPQQVertex class. #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "Herwig/Models/TTbAsymm/TTbAModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFVVertex * @see VertexBase */ class TTbAModelZPQQVertex: public FFVVertex { public: /** * Default constructor. */ TTbAModelZPQQVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<TTbAModelZPQQVertex> initTTbAModelZPQQVertex; - - /** * Private and non-existent assignment operator. */ TTbAModelZPQQVertex & operator=(const TTbAModelZPQQVertex &); /** * Pointer to the model object. */ tcSMPtr _theModel; private: /** * Storage of the couplings. */ //@{ /** * Z prime coupling to top-up (left-handed) */ double _cZPTU_L; /** * Z prime coupling to top-up (right-handed) */ double _cZPTU_R; /** * Z prime coupling to up-upbar (left-handed) */ double _cZPUU_L; /** * Z prime coupling to up-upbar (right-handed) */ double _cZPUU_R; /** * Z prime coupling to charm-charmbar (left-handed) */ double _cZPCC_L; /** * Z prime coupling to charm-charmbar (right-handed) */ double _cZPCC_R; /** * Model selector */ int _models; //@} }; } #endif /* HERWIG_TTbAModelZPQQVertex_H */ diff --git a/Models/UED/UEDBase.h b/Models/UED/UEDBase.h --- a/Models/UED/UEDBase.h +++ b/Models/UED/UEDBase.h @@ -1,347 +1,341 @@ // -*- C++ -*- // // UEDBase.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_UEDBase_H #define HERWIG_UEDBase_H // // This is the declaration of the UEDBase class. // #include "Herwig/Models/General/BSMModel.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "UEDBase.fh" namespace Herwig { using namespace ThePEG; /** * This class serves as a base class for all UED models. It stores the * values of the inverse radius and the product \f$\Lambda R \f$ and has functions * to calculate the radiative corrections to the nth level KK excitations. * * To use this class for n > 1 simply inherit off it, calculate the necessary masses * using the provided functions for the new excitations and add the * appropriate vertices. * * @see \ref UEDBaseInterfaces "The interfaces" * defined for UEDBase. */ class UEDBase: public BSMModel { public: /** Typedef for ID-Mass pair. */ typedef pair<long, Energy> IDMassPair; /** Typedef for unsigned int/double map to store Weinburg angles.*/ typedef map<unsigned int, double> WAMap; public: /** * The default constructor. */ UEDBase(); /** @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(); public: /** @name Public Access Functions.*/ //@{ /** * Return the compactification radius */ InvEnergy compactRadius() const { return 1./theInvRadius; } /** * Return the Weinburg mixing angle for any level. */ double sinThetaN(const unsigned int n) const; /** * Return the Weinburg mixing angle for \f$n = 1\f$ */ double sinThetaOne() const { return theSinThetaOne; } //@} protected: /** * Add a new ID,mass pair to the mass storage * @param elem The element to add in to storage */ void addMassElement(IDMassPair elem) { theMasses.push_back(elem); } /** * Add a new mixing angle to the storage * @param n The level * @param val The value */ void addMixingAngle(const unsigned int n, const double val) { theMixingAngles.insert(make_pair(n, val)); } private: /** @name Utility Functions for calculating masses. */ //@{ /** * Calculate the radiative corrections to the masses of the KK excitations * @param n The KK-level for which to calculate the masses. */ void calculateKKMasses(const unsigned int n); /** * Calculate the radiative corrections to the spin-0 and spin-1 * masses of the KK excitations * @param n The KK-level for which to calculate the masses. */ void bosonMasses(const unsigned int n); /** * Calculate the radiative corrections to the spin-1/2 * masses of the KK excitations. * @param n The KK-level for which to calculate the masses. */ void fermionMasses(const unsigned int n); /** * Reset the mass of the ParticleData object *@param id The id of the particles mass to reset *@param value The new mass */ void resetMass(long id, Energy value); /** * Calculate the Weinburg Mixing angle for the appropriate level. * @param n The KK-level for which to calculate the mixing angle. */ double calculateMixingAngle(const unsigned int n); //@} /** * Write out a spectrum file ordered in mass (name can be set by an interface). */ void writeSpectrum(); /** * A predicate for sorting the list of masses. */ static bool lowerMass(const pair<long, Energy> & p1, const pair<long, Energy> & p2) { return p1.second < p2.second; } 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. */ //@{ virtual void doinit(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDBase> initUEDBase; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDBase & operator=(const UEDBase &); private: /** * Whether to calculate the radiative corrections to the KK masses */ bool theRadCorr; /** * Store the radius of the compactified dimension. */ Energy theInvRadius; /** * The value of \f$\Lambda R \f$. */ double theLambdaR; /** * The boundary mass term for the Higgs. */ Energy theMbarH; /** * The values of \f$\sin\theta_N\f$ */ WAMap theMixingAngles; /** * Store \f$\sin\theta_1\f$ for faster access */ double theSinThetaOne; /** * Store the masses of the new particles */ vector<IDMassPair> theMasses; /** * The value of the vacuum expectation value of the higgs field. */ Energy theVeV; /** * Include SM masses in calculation of KK masses */ bool includeSMMass_; /** * Use fixed couplings for the mass calculation */ bool fixedCouplings_; /** * Include gauge boson mixing */ bool includeGaugeMixing_; /** @name The level 1 UED vertices. */ //@{ /** * The \f$\bar{f}^{(1)}f^{(1)}Z^{(0)}\f$ */ AbstractFFVVertexPtr theF1F1Z0Vertex; /** * The \f$\bar{f}^{(1)}f^{(1)}g^{(0)}\f$ */ AbstractFFVVertexPtr theF1F1G0Vertex; /** * The \f$\bar{f}^{(1)}f^{(0)}g^{(1)}\f$ */ AbstractFFVVertexPtr theF1F0G1Vertex; /** * The \f$g^{(1)}g^{(1)}g\f$ vertex */ AbstractVVVVertexPtr theG1G1G0Vertex; /** * The \f$g\,g\,g^{(1)},g^{(1)}\f$ vertex */ AbstractVVVVVertexPtr theG0G0G1G1Vertex; /** * The \f$\bar{f}^{(1)}f^{(1)}\gamma\f$ */ AbstractFFVVertexPtr theF1F1P0Vertex; /** * The \f$\bar{f}^{(1)}f^{(1)}W\f$ */ AbstractFFVVertexPtr theF1F1W0Vertex; /** * The \f$\bar{f}^{(1)}f^{(0)}W^{(1)}\f$ */ AbstractFFVVertexPtr theF1F0W1Vertex; /** * The \f$\bar{f}^{(1)}f^{(0)}H^{(1)}\f$ */ AbstractFFSVertexPtr theF1F0H1Vertex; /** * The \f$ A^\mu_{(0)}H^+_{(1)}H-_{(1)}\f$ */ AbstractVSSVertexPtr theP0H1H1Vertex; /** * The \f$ Z^\mu_{(0)}H^+_{(1)}H-_{(1)}\f$ */ AbstractVSSVertexPtr theZ0H1H1Vertex; /** * The \f$ W^\pm_{\mu(0)}A_{(1)}H^\mp_{(1)}\f$ */ AbstractVSSVertexPtr theW0A1H1Vertex; /** * The \f$ Z^\mu_{\mu(0)}A_{(1)}h_{(1)}\f$ */ AbstractVSSVertexPtr theZ0A1h1Vertex; /** * The \f$W^{(1)}Z^{(1)}W_{(0)}\f$ vertex */ AbstractVVVVertexPtr theW0W1W1Vertex; //@} }; } #endif /* HERWIG_UEDBase_H */ diff --git a/Models/UED/UEDF1F0G1Vertex.h b/Models/UED/UEDF1F0G1Vertex.h --- a/Models/UED/UEDF1F0G1Vertex.h +++ b/Models/UED/UEDF1F0G1Vertex.h @@ -1,111 +1,105 @@ // -*- C++ -*- // // UEDF1F0G1Vertex.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_UEDF1F0G1Vertex_H #define HERWIG_UEDF1F0G1Vertex_H // // This is the declaration of the UEDF1F0G1Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This is the implementation of the \f$\bar{f}^{1}f^{0}g^{(1)}\f$ vertex * * @see \ref UEDF1F0G1VertexInterfaces "The interfaces" * defined for UEDF1F0G1Vertex. */ class UEDF1F0G1Vertex: public FFVVertex { public: /** * The default constructor. */ UEDF1F0G1Vertex(); /** * 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static NoPIOClassDescription<UEDF1F0G1Vertex> initUEDF1F0G1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F0G1Vertex & operator=(const UEDF1F0G1Vertex &); private: /** * The energy at which the coupling was last evaluated */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated */ Complex theCoupLast; }; } #endif /* HERWIG_UEDF1F0G1Vertex_H */ diff --git a/Models/UED/UEDF1F0H1Vertex.h b/Models/UED/UEDF1F0H1Vertex.h --- a/Models/UED/UEDF1F0H1Vertex.h +++ b/Models/UED/UEDF1F0H1Vertex.h @@ -1,181 +1,175 @@ // -*- C++ -*- // // UEDF1F0H1Vertex.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_UEDF1F0H1Vertex_H #define HERWIG_UEDF1F0H1Vertex_H // // This is the declaration of the UEDF1F0H1Vertex class. // #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * The implementation of the \f$ f_{(1)}f_{(0)}H_{(1)}^\pm\f$ vertex. It inherits * from FFSVertex and implements the setCoupling member function. * * @see \ref UEDF1F0H1VertexInterfaces "The interfaces" * defined for UEDF1F0H1Vertex. */ class UEDF1F0H1Vertex: public FFSVertex { public: /** * The default constructor. */ UEDF1F0H1Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDF1F0H1Vertex> initUEDF1F0H1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F0H1Vertex & operator=(const UEDF1F0H1Vertex &); private: /** * The compactification radius. */ InvEnergy theRadius; /** * The mass of the \f$W\f$-boson. */ Energy theMw; /** * The mass of the \f$Z\f$-boson. */ Energy theMz; /** * The value of \f$\sin\Theta_W\f$. */ double theSinThetaW; /** * The value of \f$\cos\Theta_W\f$. */ double theCosThetaW; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated. */ Complex theCoupLast; /** * The value of the left coupling when it was last evaluated. */ Complex theLeftLast; /** * The value of the right coupling when it was last evaluated. */ Complex theRightLast; /** * The PDG code of the 1st particle at the vertex when it was last evaluated */ long theAntiLast; /** * The PDG code of the 2nd particle at the vertex when it was last evaluated */ long theFermLast; /** * The PDG code of the Higgs particle at the vertex when it was last * evaluated */ long theHLast; }; } #endif /* HERWIG_UEDF1F0H1Vertex_H */ diff --git a/Models/UED/UEDF1F0W1Vertex.h b/Models/UED/UEDF1F0W1Vertex.h --- a/Models/UED/UEDF1F0W1Vertex.h +++ b/Models/UED/UEDF1F0W1Vertex.h @@ -1,191 +1,185 @@ // -*- C++ -*- // // UEDF1F0W1Vertex.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_UEDF1F0W1Vertex_H #define HERWIG_UEDF1F0W1Vertex_H // // This is the declaration of the UEDF1F0W1Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This is the \f$ \bar{f}^{(1)} f^{(0)} W^{(1)}\f$ coupling, where * \f$W^{(1)}\f$ is any level 1 EW gauge boson. The class * inherits from FFVVertex and implements the setCoupling virtual member. * * @see \ref UEDF1F0W1VertexInterfaces "The interfaces" * defined for UEDF1F0W1Vertex. */ class UEDF1F0W1Vertex: public FFVVertex { public: /** * The default constructor. */ UEDF1F0W1Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDF1F0W1Vertex> initUEDF1F0W1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F0W1Vertex & operator=(const UEDF1F0W1Vertex &); private: /** * The value of \f$\sin\theta_W\f$ */ double theSinW; /** * The value of \f$\cos\theta_W\f$ */ double theCosW; /** * The value of \f$\sin\theta_1\f$ */ double theSinOne; /** * The value of \f$\cos\theta_1\f$ */ double theCosOne; /** * The value of \f$\sin(\theta_W - \theta_1)\f$ */ double theSinWmO; /** * The value of \f$\cos(\theta_W - \theta_1)\f$ */ double theCosWmO; /** * Store the CKM matrix for the \f$W\f$ interactions */ vector< vector<Complex> > theCKM; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2last; /** * The value of \f$\sqrt{4\pi\alpha}\f$ when it was last evaluated. */ Complex theCouplast; /** * The value of the left coupling when it was last evaluated. */ Complex theLlast; /** * The value of the right coupling when it was last evaluated. */ Complex theRlast; /** * The last gauge boson in the vertex */ long theGBlast; /** * The last KK-fermion in the vertex */ long theKKlast; /** * The last SM fermion in the vertex */ long theSMlast; }; } #endif /* HERWIG_UEDF1F0W1Vertex_H */ diff --git a/Models/UED/UEDF1F1G0Vertex.h b/Models/UED/UEDF1F1G0Vertex.h --- a/Models/UED/UEDF1F1G0Vertex.h +++ b/Models/UED/UEDF1F1G0Vertex.h @@ -1,111 +1,105 @@ // -*- C++ -*- // // UEDF1F1G0Vertex.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_UEDF1F1G0Vertex_H #define HERWIG_UEDF1F1G0Vertex_H // // This is the declaration of the UEDF1F1G0Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This is the implementation of the \f$\bar{f}^{1}f^{(1)}g\f$ vertex * * @see \ref UEDF1F1G0VertexInterfaces "The interfaces" * defined for UEDF1F1G0Vertex. */ class UEDF1F1G0Vertex: public FFVVertex { public: /** * The default constructor. */ UEDF1F1G0Vertex(); /** * 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static NoPIOClassDescription<UEDF1F1G0Vertex> initUEDF1F1G0Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F1G0Vertex & operator=(const UEDF1F1G0Vertex &); private: /** * The energy at which the coupling was last evaluated */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated */ Complex theCoupLast; }; } #endif /* HERWIG_UEDF1F1G0Vertex_H */ diff --git a/Models/UED/UEDF1F1P0Vertex.h b/Models/UED/UEDF1F1P0Vertex.h --- a/Models/UED/UEDF1F1P0Vertex.h +++ b/Models/UED/UEDF1F1P0Vertex.h @@ -1,127 +1,121 @@ // -*- C++ -*- // // UEDF1F1P0Vertex.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_UEDF1F1P0Vertex_H #define HERWIG_UEDF1F1P0Vertex_H // // This is the declaration of the UEDF1F1P0Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This class implements the coupling of a pair of level-1 KK * fermions to a standard Model photon. * * @see \ref UEDF1F1P0VertexInterfaces "The interfaces" * defined for UEDF1F1P0Vertex. */ class UEDF1F1P0Vertex: public FFVVertex { public: /** * The default constructor. */ UEDF1F1P0Vertex(); /** * 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static NoPIOClassDescription<UEDF1F1P0Vertex> initUEDF1F1P0Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F1P0Vertex & operator=(const UEDF1F1P0Vertex &); private: /** * The value of the coupling when it was last evaluated . */ Complex theCoupLast; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2Last; /** * The id of the last fermion that the vertex was evaluated for */ long thefermLast; /** * The value of the left/right coupling when it was last evaluated. */ Complex theLRLast; /** * The charges of the fermions */ vector<double> theCharges; }; } #endif /* HERWIG_UEDF1F1P0Vertex_H */ diff --git a/Models/UED/UEDF1F1W0Vertex.h b/Models/UED/UEDF1F1W0Vertex.h --- a/Models/UED/UEDF1F1W0Vertex.h +++ b/Models/UED/UEDF1F1W0Vertex.h @@ -1,154 +1,148 @@ // -*- C++ -*- // // UEDF1F1W0Vertex.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_UEDF1F1W0Vertex_H #define HERWIG_UEDF1F1W0Vertex_H // // This is the declaration of the UEDF1F1W0Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This class implements the coupling of a pair of level-1 * fermions to the SM $W$ boson. * * @see \ref UEDF1F1W0VertexInterfaces "The interfaces" * defined for UEDF1F1W0Vertex. */ class UEDF1F1W0Vertex: public FFVVertex { public: /** * The default constructor. */ UEDF1F1W0Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDF1F1W0Vertex> initUEDF1F1W0Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F1W0Vertex & operator=(const UEDF1F1W0Vertex &); private: /** * Whether or not to include mixing */ bool includeMixing_; /** * The value of the inverse radius */ InvEnergy theRadius; /** * The scale at which the coupling was last evaluated. */ Energy2 theQ2Last; /** * The value of the coupling when it was last evaluated. */ Complex theCoupLast; /** * The value of the left coupling when it was last evaluated. */ Complex theLeftLast; /** * The PDG code of the first fermion for which the vertex was last evaluated. */ long thefermALast; /** * The PDG code of the second fermion for which the vertex was last evaluated. */ long thefermBLast; }; } #endif /* HERWIG_UEDF1F1W0Vertex_H */ diff --git a/Models/UED/UEDF1F1Z0Vertex.h b/Models/UED/UEDF1F1Z0Vertex.h --- a/Models/UED/UEDF1F1Z0Vertex.h +++ b/Models/UED/UEDF1F1Z0Vertex.h @@ -1,170 +1,164 @@ // -*- C++ -*- // // UEDF1F1Z0Vertex.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_UEDF1F1Z0Vertex_H #define HERWIG_UEDF1F1Z0Vertex_H // // This is the declaration of the UEDF1F1Z0Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This is the implementation of the level-1 fermion-fermion Z-boson. * It inherits from FFVVertex and implements the setCoupling member. * * @see \ref UEDF1F1Z0VertexInterfaces "The interfaces" * defined for UEDF1F1Z0Vertex. */ class UEDF1F1Z0Vertex: public FFVVertex { public: /** * The default constructor. */ UEDF1F1Z0Vertex(); 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(); public: /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDF1F1Z0Vertex> initUEDF1F1Z0Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDF1F1Z0Vertex & operator=(const UEDF1F1Z0Vertex &); private: /** * The value if \f$\sin^2\theta_W\f$ */ double theSin2ThW; /** * The value if \f$\cos\theta_W\f$ */ double theCosThW; /** * The value of the inverse radius */ InvEnergy theRadius; /** * The PDG code of the 1st fermion when the vertex was last evaluated */ long theID1Last; /** * The PDG code of the 2nd fermion when the vertex was last evaluated */ long theID2Last; /** * The energy where the coupling was last evaluated */ Energy2 theq2Last; /** * * The value of the coupling when it was last evaluated */ Complex theCoupLast; /** * * The value of the coupling when it was last evaluated */ Complex theLeftLast; /** * * The value of the coupling when it was last evaluated */ Complex theRightLast; }; } #endif /* HERWIG_UEDF1F1Z0Vertex_H */ diff --git a/Models/UED/UEDP0H1H1Vertex.h b/Models/UED/UEDP0H1H1Vertex.h --- a/Models/UED/UEDP0H1H1Vertex.h +++ b/Models/UED/UEDP0H1H1Vertex.h @@ -1,114 +1,108 @@ // -*- C++ -*- // // UEDP0H1H1Vertex.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_UEDP0H1H1Vertex_H #define HERWIG_UEDP0H1H1Vertex_H // // This is the declaration of the UEDP0H1H1Vertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * The implementation of the \f$A^\mu_{(0)}H_{(1)}^+H_{(1)}^-\f$ vertex. This * class inherits from VSSVertex and implements the setCoupling member function. * * @see \ref UEDP0H1H1VertexInterfaces "The interfaces" * defined for UEDP0H1H1Vertex. */ class UEDP0H1H1Vertex: public VSSVertex { public: /** * The default constructor. */ UEDP0H1H1Vertex(); public: /** * 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static NoPIOClassDescription<UEDP0H1H1Vertex> initUEDP0H1H1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDP0H1H1Vertex & operator=(const UEDP0H1H1Vertex &); private: /** * The scale at which the coupling was last evaluated. */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated. */ Complex theCoupLast; }; } #endif /* HERWIG_UEDP0H1H1Vertex_H */ diff --git a/Models/UED/UEDW0A1H1Vertex.h b/Models/UED/UEDW0A1H1Vertex.h --- a/Models/UED/UEDW0A1H1Vertex.h +++ b/Models/UED/UEDW0A1H1Vertex.h @@ -1,147 +1,141 @@ // -*- C++ -*- // // UEDW0A1H1Vertex.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_UEDW0A1H1Vertex_H #define HERWIG_UEDW0A1H1Vertex_H // // This is the declaration of the UEDW0A1H1Vertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This is the coupling for the vertex \f$ W_{\mu(0)}^\pm A_{(1)}^0 H^\mp_{(1)}\f$. * It takes the form: * \f[\pm\frac{g(m_W^2 R^2 + 1/2)}{\sqrt{(1 + m_W^2)(1 + m_Z^2)}} * \left(p(H_1^\mp) - p(A_1)\right)_\mu \f] * * @see \ref UEDW0A1H1VertexInterfaces "The interfaces" * defined for UEDW0A1H1Vertex. */ class UEDW0A1H1Vertex: public VSSVertex { public: /** * The default constructor. */ UEDW0A1H1Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDW0A1H1Vertex> initUEDW0A1H1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDW0A1H1Vertex & operator=(const UEDW0A1H1Vertex &); private: /** * The mass-squared of the \f$W\f$ boson. */ Energy2 theMw2; /** * The mass-squared of the \f$Z\f$ boson. */ Energy2 theMz2; /** * The square of the compactification radius. */ InvEnergy2 theR2; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated. */ Complex theCoupLast; }; } #endif /* HERWIG_UEDW0A1H1Vertex_H */ diff --git a/Models/UED/UEDW0W1W1Vertex.h b/Models/UED/UEDW0W1W1Vertex.h --- a/Models/UED/UEDW0W1W1Vertex.h +++ b/Models/UED/UEDW0W1W1Vertex.h @@ -1,167 +1,161 @@ // -*- C++ -*- // // UEDW0W1W1Vertex.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_UEDW0W1W1Vertex_H #define HERWIG_UEDW0W1W1Vertex_H // // This is the declaration of the UEDW0W1W1Vertex class. // #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; using ThePEG::Helicity::Direction; /** * The coupling for the \f$ W\,W^{(1)}Z^{(1)}\f$ and \f$ W\,W^{(1)}\gamma^{(1)}\f$ * vertex . The class inherits from VVVVertex and implements * the setCoupling member. * * @see \ref UEDW0W1W1VertexInterfaces "The interfaces" * defined for UEDW0W1W1Vertex. */ class UEDW0W1W1Vertex: public VVVVertex { public: /** * The default constructor. */ UEDW0W1W1Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDW0W1W1Vertex> initUEDW0W1W1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDW0W1W1Vertex & operator=(const UEDW0W1W1Vertex &); private: /** * The value of \f$\sin\theta_W\f$. */ double theSinW; /** * The value of \f$\cos\theta_W\f$. */ double theCosW; /** * The value of \f$\sin\theta_1\f$. */ double theSinThetaOne; /** * The value of \f$\cos\theta_1\f$. */ double theCosThetaOne; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2last; /** * The value of \f$ \sqrt{4\pi\alpha}\f$ when it was last evaluated. */ Complex theElast; /** * The value of the coupling when it was last evaluated. */ Complex theCouplast; /** * The PDG code of the last SM particle in the vertex */ long theSMlast; /** * The PDG code of the last KK-particle in the vertex */ long theKKlast; }; } #endif /* HERWIG_UEDW0W1W1Vertex_H */ diff --git a/Models/UED/UEDZ0A1h1Vertex.h b/Models/UED/UEDZ0A1h1Vertex.h --- a/Models/UED/UEDZ0A1h1Vertex.h +++ b/Models/UED/UEDZ0A1h1Vertex.h @@ -1,140 +1,134 @@ // -*- C++ -*- // // UEDZ0A1h1Vertex.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_UEDZ0A1h1Vertex_H #define HERWIG_UEDZ0A1h1Vertex_H // // This is the declaration of the UEDZ0A1h1Vertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * This class implements the coupling for the \f$A_{(1)}h_{(1)}Z^\mu_{{0}}\f$ * vertex. It inherits from VSSVertex and implements the setCoupling member. * * @see \ref UEDZ0A1h1VertexInterfaces "The interfaces" * defined for UEDZ0A1h1Vertex. */ class UEDZ0A1h1Vertex: public VSSVertex { public: /** * The default constructor. */ UEDZ0A1h1Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDZ0A1h1Vertex> initUEDZ0A1h1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDZ0A1h1Vertex & operator=(const UEDZ0A1h1Vertex &); private: /** * The value of \f$ \sin 2\theta_W \f$. */ double theSin2ThetaW; /** * The value of \f$m_kk/\sqrt{m_kk^2 + m_z^2}\f$ */ double theKappa; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated. */ Complex theCoupLast; }; } #endif /* HERWIG_UEDZ0A1h1Vertex_H */ diff --git a/Models/UED/UEDZ0H1H1Vertex.h b/Models/UED/UEDZ0H1H1Vertex.h --- a/Models/UED/UEDZ0H1H1Vertex.h +++ b/Models/UED/UEDZ0H1H1Vertex.h @@ -1,154 +1,148 @@ // -*- C++ -*- // // UEDZ0H1H1Vertex.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_UEDZ0H1H1Vertex_H #define HERWIG_UEDZ0H1H1Vertex_H // // This is the declaration of the UEDZ0H1H1Vertex class. // #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h" #include "UEDBase.h" namespace Herwig { using namespace ThePEG; /** * The implementation of the \f$Z^\mu_{(0)}H_{(1)}^+H_{(1)}^-\f$ vertex. This * class inherits from VSSVertex and implements the setCoupling member function. * * The vertex is taken to have the form: * \f[\frac{g}{1 + m_W^2R^2}\left(\frac{\cos 2\theta_W}{2\cos\theta_W} - * m_W^2 R^2\cos^2\theta_W \right)\left(p(H_{(1)}^-) - p(H_{(1)}^+)\right) \f] * * @see \ref UEDZ0H1H1VertexInterfaces "The interfaces" * defined for UEDZ0H1H1Vertex. */ class UEDZ0H1H1Vertex: public VSSVertex { public: /** * The default constructor. */ UEDZ0H1H1Vertex(); 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(); /** Calculate the coupling *@param q2 The scale at which to evaluate the coupling *@param part1 The first interacting particle *@param part2 The second interacting particle *@param part3 The third interacting particle */ virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3); 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(); //@} private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<UEDZ0H1H1Vertex> initUEDZ0H1H1Vertex; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ UEDZ0H1H1Vertex & operator=(const UEDZ0H1H1Vertex &); private: /** * The value of \f$\cos\theta_W\f$. */ double theCosThetaW; /** * The value of \f$\cos 2\theta_W\f$. */ double theCosTheta2W; /** * The mass-squared of the \f$W\f$ boson. */ Energy2 theMw2; /** * The square of the compactification radius. */ InvEnergy2 theR2; /** * The scale at which the coupling was last evaluated. */ Energy2 theq2Last; /** * The value of the coupling when it was last evaluated. */ Complex theCoupLast; }; } #endif /* HERWIG_UEDZ0H1H1Vertex_H */ diff --git a/Models/Zprime/ZprimeModel.h b/Models/Zprime/ZprimeModel.h --- a/Models/Zprime/ZprimeModel.h +++ b/Models/Zprime/ZprimeModel.h @@ -1,430 +1,424 @@ // -*- C++ -*- #ifndef HERWIG_ZprimeModel_H #define HERWIG_ZprimeModel_H // // This is the declaration of the ZprimeModel class. // #include "Herwig/Models/General/BSMModel.h" #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" #include "ZprimeModel.fh" namespace Herwig { using namespace ThePEG; using namespace ThePEG::Helicity; /** * Here is the documentation of the ZprimeModel class. * * @see \ref ZprimeModelInterfaces "The interfaces" * defined for ZprimeModel. */ class ZprimeModel: public BSMModel { public: /** * The default constructor. */ ZprimeModel(); /** @name Vertices */ //@{ /** * Pointer to the object handling Z prime quark-anti-quark vertex. */ tAbstractFFVVertexPtr vertexZPQQ() const {return _theZPQQVertex;} 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(); /** * Return the Z prime top-up left-handed coupling */ double _cZPTU_left() const {return _gZPTU_L;} /** * Return the Z prime top-up right-handed coupling */ double _cZPTU_right() const {return _gZPTU_R;} /** * Return the Z prime d-dbar left-handed coupling */ double _cZPDD_left() const {return _gZPDD_L;} /** * Return the Z prime d-dbar right-handed coupling */ double _cZPDD_right() const {return _gZPDD_R;} /** * Return the Z prime top-anti-top left-handed coupling */ double _cZPTT_left() const {return _gZPTT_L;} /** * Return the Z prime top-anti-top right-handed coupling */ double _cZPTT_right() const {return _gZPTT_R;} /** * Return the Z prime u-ubar left-handed coupling */ double _cZPUU_left() const {return _gZPUU_L;} /** * Return the Z prime u-ubar right-handed coupling */ double _cZPUU_right() const {return _gZPUU_R;} /** * Return the Z prime c-cbar left-handed coupling */ double _cZPCC_left() const {return _gZPCC_L;} /** * Return the Z prime c-cbar right-handed coupling */ double _cZPCC_right() const {return _gZPCC_R;} /** * Return the Z prime b-bbar left-handed coupling */ double _cZPBB_left() const {return _gZPBB_L;} /** * Return the Z prime b-bbar right-handed coupling */ double _cZPBB_right() const {return _gZPBB_R;} /** * Return the Z prime s-sbar left-handed coupling */ double _cZPSS_left() const {return _gZPSS_L;} /** * Return the Z prime c-cbar right-handed coupling */ double _cZPSS_right() const {return _gZPSS_R;} /** * Return the Z prime e+e- left-handed coupling */ double _cZPee_left() const {return _gZPee_L;} /** * Return the Z prime e+e- right-handed coupling */ double _cZPee_right() const {return _gZPee_R;} /** * Return the Z prime mu+mu- left-handed coupling */ double _cZPmm_left() const {return _gZPmm_L;} /** * Return the Z prime mu+mu- right-handed coupling */ double _cZPmm_right() const {return _gZPmm_R;} /** * Return the Z prime tau+tau- left-handed coupling */ double _cZPtt_left() const {return _gZPtt_L;} /** * Return the Z prime tau+tau- right-handed coupling */ double _cZPtt_right() const {return _gZPtt_R;} /** * Return the Z prime nu_e nu_ebar left-handed coupling */ double _cZPnuenue_left() const {return _gZPnuenue_L;} /** * Return the Z prime nu_e nu_ebar right-handed coupling */ double _cZPnuenue_right() const {return _gZPnuenue_R;} /** * Return the Z prime nu_mu nu_mubar left-handed coupling */ double _cZPnumnum_left() const {return _gZPnumnum_L;} /** * Return the Z prime nu_mu nu_mubar right-handed coupling */ double _cZPnumnum_right() const {return _gZPnumnum_R;} /** * Return the Z prime nu_tau nu_taubar left-handed coupling */ double _cZPnutnut_left() const {return _gZPnutnut_L;} /** * Return the Z prime nu_tau nu_taubar right-handed coupling */ double _cZPnutnut_right() const {return _gZPnutnut_R;} /** * Return the overall coupling of the Z prime to quark-anti-quark */ double _cZPoverallCoup() const {return _ZPoverall;} 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(); //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** 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; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** - * The static object used to initialize the description of this class. - * Indicates that this is a concrete class with persistent data. - */ - static ClassDescription<ZprimeModel> initZprimeModel; - - /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ ZprimeModel & operator=(const ZprimeModel &); /** * Pointer to the object handling the Zp to Quark-antiQuark vertex. */ AbstractFFVVertexPtr _theZPQQVertex; /** * Z prime coupling to u-ubar (left-handed) */ double _gZPUU_L; /** * Z prime coupling to u-ubar (right-handed) */ double _gZPUU_R; /** * Z prime coupling to d-dbar (left-handed) */ double _gZPDD_L; /** * Z prime coupling to d-dbar (right-handed) */ double _gZPDD_R; /** * Z prime coupling to c-cbar (left-handed) */ double _gZPCC_L; /** * Z prime coupling to c-cbar (right-handed) */ double _gZPCC_R; /** * Z prime coupling to s-sbar (left-handed) */ double _gZPSS_L; /** * Z prime coupling to s-sbar (right-handed) */ double _gZPSS_R; /** * Z prime coupling to b-bbar (left-handed) */ double _gZPBB_L; /** * Z prime coupling to b-bbar (right-handed) */ double _gZPBB_R; /** * Z prime coupling to top-up (left-handed) */ double _gZPTU_L; /** * Z prime coupling to top-up (right-handed) */ double _gZPTU_R; /** * Z prime coupling to top-anti-top (left-handed) */ double _gZPTT_L; /** * Z prime coupling to top-anti-top (right-handed) */ double _gZPTT_R; /** * Z prime coupling to e+e- (left-handed) */ double _gZPee_L; /** * Z prime coupling to e+e- (right-handed) */ double _gZPee_R; /** * Z prime coupling to mu+mu- (left-handed) */ double _gZPmm_L; /** * Z prime coupling to mu+mu- (right-handed) */ double _gZPmm_R; /** * Z prime coupling to tau+tau- (left-handed) */ double _gZPtt_L; /** * Z prime coupling to tau+tau- (right-handed) */ double _gZPtt_R; /** * Z prime coupling to nu_e nu_ebar (left-handed) */ double _gZPnuenue_L; /** * Z prime coupling to nu_e nu_ebar (right-handed) */ double _gZPnuenue_R; /** * Z prime coupling to nu_mu nu_mubar (left-handed) */ double _gZPnumnum_L; /** * Z prime coupling to nu_mu nu_mubar (right-handed) */ double _gZPnumnum_R; /** * Z prime coupling to nu_tau nu_taubar (left-handed) */ double _gZPnutnut_L; /** * Z prime coupling to nu_tau nu_taubar (right-handed) */ double _gZPnutnut_R; /** * Z prime overall coupling */ double _ZPoverall; }; } #endif /* HERWIG_ZprimeModel_H */ diff --git a/Models/Zprime/ZprimeModelZPQQVertex.h b/Models/Zprime/ZprimeModelZPQQVertex.h --- a/Models/Zprime/ZprimeModelZPQQVertex.h +++ b/Models/Zprime/ZprimeModelZPQQVertex.h @@ -1,268 +1,263 @@ // -*- C++ -*- // // ZprimeModelZPQQVertex.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_ZprimeModelZPQQVertex_H #define HERWIG_ZprimeModelZPQQVertex_H // // This is the declaration of the ZprimeModelZPQQVertex class. #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" #include "Herwig/Models/Zprime/ZprimeModel.h" #include "ThePEG/PDT/EnumParticles.h" namespace Herwig { using namespace ThePEG; /** \ingroup Helicity * * This is the implementation of the vertex coupling the Standard Model Higgs * to the Standard Model fermions for helicity amplitude calculations * * @see FFVVertex * @see VertexBase */ class ZprimeModelZPQQVertex: public FFVVertex { public: /** * Default constructor. */ ZprimeModelZPQQVertex(); /** * Calculate the couplings. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); 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; /** 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; //@} protected: /** * 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(); private: /** - * Describe a concrete class with persistent data. - */ - static ClassDescription<ZprimeModelZPQQVertex> initZprimeModelZPQQVertex; - - /** * Private and non-existent assignment operator. */ ZprimeModelZPQQVertex & operator=(const ZprimeModelZPQQVertex &); /** * Pointer to the model object. */ tcSMPtr _theModel; private: /** * Storage of the couplings. */ //@{ /** * Z prime coupling to top-up (left-handed) */ double _cZPTU_L; /** * Z prime coupling to top-up (right-handed) */ double _cZPTU_R; /** * Z prime coupling to top-anti-top (left-handed) */ double _cZPTT_L; /** * Z prime coupling to top-anti-top (right-handed) */ double _cZPTT_R; /** * Z prime coupling to u-ubar (left-handed) */ double _cZPUU_L; /** * Z prime coupling to u-ubar (right-handed) */ double _cZPUU_R; /** * Z prime coupling to c-cbar (left-handed) */ double _cZPCC_L; /** * Z prime coupling to c-cbar (right-handed) */ double _cZPCC_R; /** * Z prime coupling to s-sbar (left-handed) */ double _cZPSS_L; /** * Z prime coupling to s-sbar (right-handed) */ double _cZPSS_R; /** * Z prime coupling to d-dbar (left-handed) */ double _cZPDD_L; /** * Z prime coupling to d-dbar (right-handed) */ double _cZPDD_R; /** * Z prime coupling to d-dbar (left-handed) */ double _cZPBB_L; /** * Z prime coupling to d-dbar (right-handed) */ double _cZPBB_R; /** * Z prime coupling to e+e- (left-handed) */ double _cZPee_L; /** * Z prime coupling to e+e- (right-handed) */ double _cZPee_R; /** * Z prime coupling to mu+mu- (left-handed) */ double _cZPmm_L; /** * Z prime coupling to mu+mu- (right-handed) */ double _cZPmm_R; /** * Z prime coupling to tau+tau- (left-handed) */ double _cZPtt_L; /** * Z prime coupling to tau+tau- (right-handed) */ double _cZPtt_R; /** * Z prime coupling to nu_e nu_ebar (left-handed) */ double _cZPnuenue_L; /** * Z prime coupling to nu_e nu_ebar (right-handed) */ double _cZPnuenue_R; /** * Z prime coupling to nu_mu nu_mubar (left-handed) */ double _cZPnumnum_L; /** * Z prime coupling to nu_mu nu_mubar (right-handed) */ double _cZPnumnum_R; /** * Z prime coupling to nu_tau nu_taubar (left-handed) */ double _cZPnutnut_L; /** * Z prime coupling to nu_tau nu_taubar (right-handed) */ double _cZPnutnut_R; /** * Z prime overall coupling */ double _cZP_o; //@} }; } #endif /* HERWIG_ZprimeModelZPQQVertex_H */