diff --git a/MatrixElement/EW/EWCouplings.h b/MatrixElement/EW/EWCouplings.h --- a/MatrixElement/EW/EWCouplings.h +++ b/MatrixElement/EW/EWCouplings.h @@ -1,449 +1,449 @@ // -*- C++ -*- #ifndef Herwig_EWCouplings_H #define Herwig_EWCouplings_H // // This is the declaration of the EWCouplings class. // #include "ThePEG/Interface/Interfaced.h" #include #include #include "EWCouplings.fh" namespace Herwig { using namespace ThePEG; /** * Here is the documentation of the EWCouplings class. * * @see \ref EWCouplingsInterfaces "The interfaces" * defined for EWCouplings. */ class EWCouplings: public Interfaced { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ EWCouplings(unsigned int loops=2, unsigned int steps=200, - Energy highScale=10.*TeV, Energy lowScale=10.*GeV); + Energy highScale=14.*TeV, Energy lowScale=10.*GeV); /** * The destructor. */ virtual ~EWCouplings(); //@} /** * Initialize the running couplings */ void initialize(); /** * Number of dynamical quarks at $\log\mu = x$ (in GeV) * N.B.Integrate out top quark at Mz, not at Mt. */ unsigned int numberOfFlavours(double x) { return x >= std::log(ewScale_/GeV) ? 6 : 5; } public: /** * Set whether or not to include \f$SU(3)\f$ running */ void SU3(bool includeSU3) {includeSU3_ = includeSU3;} /** * Whether or not to include \f$SU(3)\f$ running */ bool SU3() { return includeSU3_;} /** * Set whether or not to include EW running */ void EW(bool includeEW) {includeEW_ = includeEW;} /** * Whether or not to include EW running */ bool EW() { return includeEW_;} /** * alpha for the U1 gauge coupling at energy mu (in GeV): */ double a1(Energy mu) { if (includeEW_) { if (mu>=ewScale_) { return (3.0/5.0)*interpolate(log(mu/GeV),1); } return interpolateLow(log(mu/GeV),1); } else return 0.0; } /** * alpha for the SU2 gauge coupling at energy mu (in GeV): */ double a2(Energy mu) { if (includeEW_) { if (mu=ewScale_) { return interpolate(log(mu/GeV),3); } else { return interpolateLow(log(mu/GeV),2); } } else return 0.0; } /** * alpha for EM */ double aEM(Energy mu) { if (includeEW_) { if (mu<=ewScale_) { return interpolateLow(log(mu/GeV),1); } else { double alpha1=a1(mu); double alpha2=a2(mu); return alpha1*alpha2/(alpha1+alpha2); } } return 0.0; } double aS(Energy mu) { if(includeSU3_) { if (mu<=ewScale_) { return interpolateLow(log(mu/GeV),2); } else { return interpolate(log(mu/GeV),3); } } else return 0.0; } /** * Top quark Yukawa coupling */ double y_t(Energy mu) { if (includeEW_) { if(mu & y); /** * Assigns numerical values to beta functions * Takes in a point x = log(mu) and the values of y[i] at x and assigns dydx[i] the * value beta[i](mu). The function Derivs farms out the plugging in to the three * functions BetaGauge, BetaYukawa, and BetaHiggs, which evaluates the beta functions * for the gauge couplings, yukawa matrices, and higgs quartic coupling/vev, respectively. */ void derivatives(const double x, vector< Complex > &y, vector< Complex > & dydx); /** * Beta function for the gauge interactions */ void betaGauge(const double x, vector &y, vector &dydx); /** * Beta function for the gauge interactions at low scales */ void lowBetaGauge(const double x, vector &y, vector &dydx); /** * Beta function for the Yukawa interactions */ void betaYukawa(const double x, vector &y, vector &dydx); /** * Beta function for the Higgs interactions */ void betaHiggs(const double x, vector &y, vector &dydx); /** * Update the couplings using 4-th order RK * Takes in a vector y[i] of function values at a point x and the values of the * first derivatives dydx[i] ( = dy[i]/dx ) alon with a step size stepsize. The * function then defines assigns the value of y[i](x+stepsize) to the variable yout[i]. * (Adapted from sample code in Numerical Recipes in C++ Press, Teukolsky, et. al.) */ void RK4(vector & y, vector &dydx, const double x, const double stepsize, vector &yout); /** * Initialize the low energy parameters */ void initializeLow(); /** * Interpolate the table, t = ln(mu) */ double interpolate(double t, int paramIndex); /** * Interpolate the tabel, t = ln(mu) */ double interpolateLow(double t, int paramIndex); private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ EWCouplings & operator=(const EWCouplings &); private: /** * Electoweak Scale */ Energy ewScale_; /** * High Scale */ Energy highScale_; /** * Low Scale */ Energy lowScale_; /** * Whether or not to include SU3 */ bool includeSU3_; /** * Whether or not to include EW */ bool includeEW_; /** * Whether or not the running couplings have been initialized */ bool initialized_; /** * Masses of Standard Model particles */ //@{ /** * Mass Choice */ bool massChoice_; /** * Z mass */ Energy mZ_; /** * W mass */ Energy mW_; /** * Top mass */ Energy mT_; /** * Higgs boson mass */ Energy mH_; //@} /** * Number of loops */ unsigned int loops_; /** * Number of steps for Runga-Kutta (High scale) */ unsigned int highSteps_; /** * Number of steps for Runga-Kutta (Low scale) */ unsigned int lowSteps_; /** * Matrix to store the parameters */ boost::numeric::ublas::matrix table_; /** * Matrix to store the low energy parameters. * This will hold only aEM and a3 at mu lowTable_; }; } #endif /* Herwig_EWCouplings_H */