|
|
|||
File indexing completed on 2026-08-06 09:38:31
0001 // -*- C++ -*- 0002 // 0003 // StandardModelBase.h is a part of ThePEG - Toolkit for HEP Event Generation 0004 // Copyright (C) 1999-2019 Leif Lonnblad 0005 // 0006 // ThePEG is licenced under version 3 of the GPL, see COPYING for details. 0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 0008 // 0009 #ifndef ThePEG_StandardModelBase_H 0010 #define ThePEG_StandardModelBase_H 0011 // This is the declaration of the StandardModelBase class. 0012 0013 #include "ThePEG/Config/ThePEG.h" 0014 #include "AlphaEMBase.h" 0015 #include "CKMBase.h" 0016 #include "AlphaSBase.h" 0017 // #include "StandardModelBase.fh" 0018 // #include "StandardModelBase.xh" 0019 0020 namespace ThePEG { 0021 0022 /** 0023 * StandardModelBase is used to handle standard model parameters in an 0024 * EventGenerator. It uses AlphaEMBase, AlphaSBase and CKMBase to help 0025 * with the implementation of the electro-magnetic and QCD couplings 0026 * and the flavour mixing matrix. This means that StandardModelBase 0027 * does not need to be inherited from when it comes to standard model 0028 * parameters. Beyond the standard model parameters should be 0029 * implemented as sub-classes. 0030 * 0031 * @see \ref StandardModelBaseInterfaces "The interfaces" 0032 * defined for StandardModelBase. 0033 * @see EventGenerator 0034 * @see AlphaEMBase 0035 * @see AlphaSBase 0036 * @see CKMBase 0037 */ 0038 class StandardModelBase: public Interfaced { 0039 0040 /** Declare a pointer to an AlphaEMBase object. */ 0041 typedef Ptr<AlphaEMBase>::pointer AEMPtr; 0042 /** Declare a pointer to an AlphaSBase object. */ 0043 typedef Ptr<AlphaSBase>::pointer ASPtr; 0044 /** Declare a pointer to n CKMBase object. */ 0045 typedef Ptr<CKMBase>::pointer CKMPtr; 0046 /** Declare a transient pointer to an AlphaEMBase object. */ 0047 typedef Ptr<AlphaEMBase>::transient_pointer tAEMPtr; 0048 /** Declare a transient pointer to an AlphaSBase object. */ 0049 typedef Ptr<AlphaSBase>::transient_pointer tASPtr; 0050 /** Declare a transient pointer to a CKMBase object. */ 0051 typedef Ptr<CKMBase>::transient_pointer tCKMPtr; 0052 0053 public: 0054 0055 /** @name Standard constructors and destructors. */ 0056 //@{ 0057 /** 0058 * Default constructor. 0059 */ 0060 StandardModelBase(); 0061 0062 /** 0063 * Destructor. 0064 */ 0065 virtual ~StandardModelBase(); 0066 //@} 0067 0068 public: 0069 0070 /** 0071 * Return the number of families assumed in the standard model. 0072 */ 0073 unsigned int families() const { return theFamilies; } 0074 0075 public: 0076 0077 0078 /** @name Functions accessing electro-weak parameters. */ 0079 /** 0080 * Return the electroweak scheme used 0081 */ 0082 unsigned int ewScheme() const { return theElectroWeakScheme; } 0083 0084 /** 0085 * Set the electroweak scheme used 0086 */ 0087 void ewScheme(unsigned int s) { theElectroWeakScheme = s; } 0088 0089 //@{ 0090 /** 0091 * Constant \f$\alpha_{EM}(q^2=0)\f$. 0092 */ 0093 double alphaEM() const { return theAlphaEM; } 0094 0095 /** 0096 * Constant \f$\alpha_{EM}(q^2=m_Z^2)\f$. 0097 */ 0098 double alphaEMMZ() const { return theAlphaEMMZ; } 0099 0100 /** 0101 * The electromagnetic coupling for vertex classes 0102 * in a well defined self-consistent EW scheme if requested 0103 */ 0104 double alphaEMME(Energy2 scale) const { 0105 if(theElectroWeakScheme==0) 0106 return alphaEM(scale); 0107 else if(scale>1e-6*GeV2) 0108 return theAlphaEMMZ; 0109 else 0110 return theAlphaEM; 0111 } 0112 0113 /** 0114 * Running \f$\alpha_{EM}\f$. 0115 */ 0116 double alphaEM(Energy2 scale) const { 0117 return theRunningAlphaEM->value(scale, *this); 0118 } 0119 0120 /** 0121 * Return a pointer to the object handling \f$\alpha_{EM}\f$. 0122 */ 0123 tAEMPtr alphaEMPtr() const { return theRunningAlphaEM; } 0124 0125 /** 0126 * Return \f$\sin^2(\theta_W)\f$. 0127 */ 0128 double sin2ThetaW() const { return theSin2ThetaW; } 0129 0130 /** 0131 * The Fermi constant 0132 */ 0133 InvEnergy2 fermiConstant() const {return theGF;} 0134 0135 /** 0136 * The neutrino-photon coupling. 0137 */ 0138 double enu() const { return theEnu; } 0139 0140 /** 0141 * The charged lepton-photon coupling. 0142 */ 0143 double ee() const { return theEe; } 0144 0145 /** 0146 * The up-type-photon coupling. 0147 */ 0148 double eu() const { return theEu; } 0149 0150 /** 0151 * The down-type-photon coupling. 0152 */ 0153 double ed() const { return theEd; } 0154 0155 /** 0156 * The vector neutrino-\f$Z^0\f$ coupling. 0157 */ 0158 double vnu() const { return theVnu; } 0159 0160 /** 0161 * The vector charged lepton-\f$Z^0\f$ coupling. 0162 */ 0163 double ve() const { return theVe; } 0164 0165 /** 0166 * The vector up-type-\f$Z^0\f$ coupling. 0167 */ 0168 double vu() const { return theVu; } 0169 0170 /** 0171 * The vector down-type-\f$Z^0\f$ coupling. 0172 */ 0173 double vd() const { return theVd; } 0174 0175 /** 0176 * The axial neutrino-\f$Z^0\f$ coupling. 0177 */ 0178 double anu() const { return theAnu; } 0179 0180 /** 0181 * The axial charged lepton-\f$Z^0\f$ coupling. 0182 */ 0183 double ae() const { return theAe; } 0184 0185 /** 0186 * The axial up-type-\f$Z^0\f$ coupling. 0187 */ 0188 double au() const { return theAu; } 0189 0190 /** 0191 * The axial down-type-\f$Z^0\f$ coupling. 0192 */ 0193 double ad() const { return theAd; } 0194 0195 /** 0196 * Return a pointer to the CKMBase object used. 0197 */ 0198 tCKMPtr CKM() const { return theCKM; } 0199 0200 /** 0201 * Return a square of the element of the Cabibbo-Kobayashi-Maskawa 0202 * Matrix. The fatrix element for the \a uf up-type family and \a df 0203 * down-type family. 0204 */ 0205 double CKM(unsigned int uf, unsigned int df) const; 0206 0207 /** 0208 * Return the square of the elements of the Cabibbo-Kobayashi-Maskawa 0209 * Matrix. 0210 */ 0211 double CKM(const ParticleData & uType, 0212 const ParticleData & dType) const; 0213 //@} 0214 0215 public: 0216 0217 /** @name Functions accessing QCD parameters. */ 0218 //@{ 0219 /** 0220 * Return the number of colours. 0221 */ 0222 unsigned int Nc() const { return theNc; } 0223 0224 /** 0225 * Return the number of avtive quark flavours for a given \a scale. 0226 */ 0227 unsigned int Nf(Energy2 scale) const { 0228 return theRunningAlphaS->Nf(scale); 0229 } 0230 0231 /** 0232 * Return the constant strong coupling constant. 0233 */ 0234 double alphaS() const { return theAlphaS; } 0235 0236 /** 0237 * Return the running strong coupling for a given \a scale 0238 */ 0239 double alphaS(Energy2 scale) const { 0240 return theRunningAlphaS->value(scale, *this); 0241 } 0242 0243 /** 0244 * Return a pointer to the object handling \f$\alpha_S\f$. 0245 */ 0246 tASPtr alphaSPtr() const { 0247 return theRunningAlphaS; 0248 } 0249 0250 /** 0251 * Return the \f$\Lambda_{QCD}\f$ for \a nflav active flavours. 0252 */ 0253 Energy LambdaQCD(unsigned int nflav) const { 0254 return theRunningAlphaS->LambdaQCD(nflav); 0255 } 0256 0257 /** 0258 * Return the \f$\Lambda_{QCD}\f$ for the given \a scale. 0259 */ 0260 Energy LambdaQCD(Energy2 scale) const { return LambdaQCD(Nf(scale)); } 0261 //@} 0262 0263 public: 0264 0265 0266 /** @name Functions used by the persistent I/O system. */ 0267 //@{ 0268 /** 0269 * Function used to write out object persistently. 0270 * @param os the persistent output stream written to. 0271 */ 0272 void persistentOutput(PersistentOStream & os) const; 0273 0274 /** 0275 * Function used to read in object persistently. 0276 * @param is the persistent input stream read from. 0277 * @param version the version number of the object when written. 0278 */ 0279 void persistentInput(PersistentIStream & is, int version); 0280 //@} 0281 0282 /** 0283 * Standard Init function used to initialize the interface. 0284 */ 0285 static void Init(); 0286 0287 /** 0288 * Overloaded function from Interfaced 0289 */ 0290 virtual bool preInitialize() const { 0291 return true; 0292 } 0293 0294 protected: 0295 0296 /** @name Clone Methods. */ 0297 //@{ 0298 /** 0299 * Make a simple clone of this object. 0300 * @return a pointer to the new object. 0301 */ 0302 virtual IBPtr clone() const; 0303 0304 /** Make a clone of this object, possibly modifying the cloned object 0305 * to make it sane. 0306 * @return a pointer to the new object. 0307 */ 0308 virtual IBPtr fullclone() const; 0309 //@} 0310 0311 0312 protected: 0313 0314 /** @name Standard Interfaced functions. */ 0315 //@{ 0316 0317 /** 0318 * Initialize this object after the setup phase before saving an 0319 * EventGenerator to disk. 0320 * @throws InitException if object could not be initialized properly. 0321 */ 0322 virtual void doinit(); 0323 //@} 0324 0325 private: 0326 0327 /** 0328 * The number of families. 0329 */ 0330 unsigned int theFamilies; 0331 0332 /** 0333 * The constant \f$\alpha_{EM}\f$. 0334 */ 0335 double theAlphaEM; 0336 0337 /** 0338 * The constant \f$\alpha_{EM}\f$. 0339 */ 0340 double theAlphaEMMZ; 0341 0342 /** 0343 * Pointer to an object capable of calculating the running 0344 * \f$\alpha_{EM}\f$. 0345 */ 0346 AEMPtr theRunningAlphaEM; 0347 0348 /** 0349 * The \f$\sin^2(\theta_W)\f$ 0350 */ 0351 double theSin2ThetaW; 0352 0353 /** 0354 * The Fermi contants \f$G_F\f$ 0355 */ 0356 InvEnergy2 theGF; 0357 0358 /** 0359 * Coupling between a fundamental fermion and the photon. 0360 */ 0361 double theEnu; 0362 0363 /** 0364 * Coupling between a fundamental fermion and the photon. 0365 */ 0366 double theEe; 0367 0368 /** 0369 * Coupling between a fundamental fermion and the photon. 0370 */ 0371 double theEu; 0372 0373 /** 0374 * Coupling between a fundamental fermion and the photon. 0375 */ 0376 double theEd; 0377 0378 /** 0379 * Vector coupling between a fundamental fermion and Z^0. 0380 */ 0381 double theVnu; 0382 0383 /** 0384 * Vector coupling between a fundamental fermion and Z^0. 0385 */ 0386 double theVe; 0387 0388 /** 0389 * Vector coupling between a fundamental fermion and Z^0. 0390 */ 0391 double theVu; 0392 0393 /** 0394 * Vector coupling between a fundamental fermion and Z^0. 0395 */ 0396 double theVd; 0397 0398 /** 0399 * Axial coupling between a fundamental fermions and Z^0. 0400 */ 0401 double theAnu; 0402 0403 /** 0404 * Axial coupling between a fundamental fermions and Z^0. 0405 */ 0406 double theAe; 0407 0408 /** 0409 * Axial coupling between a fundamental fermions and Z^0. 0410 */ 0411 double theAu; 0412 0413 /** 0414 * Axial coupling between a fundamental fermions and Z^0. 0415 */ 0416 double theAd; 0417 0418 /** 0419 * If true, the electro-weak couplings are derived from 0420 * \f$\theta_W\f$ in the initialization. 0421 */ 0422 long recalculateEW; 0423 0424 /** 0425 * A pointer to an object representing the Cabibbo-Kobayashi-Maskawa 0426 * matrix. 0427 */ 0428 CKMPtr theCKM; 0429 0430 /** 0431 * The matrix of squared CKM elements set from theCKM at initialization. 0432 */ 0433 mutable vector< vector<double> > theCKM2Matrix; 0434 0435 /** 0436 * The number of colours; 0437 */ 0438 unsigned int theNc; 0439 0440 /** 0441 * The fixed strong coupling. 0442 */ 0443 double theAlphaS; 0444 0445 /** 0446 * Pointer to an object capable of calculating the running 0447 * \f$\alpha_{S}\f$. 0448 */ 0449 ASPtr theRunningAlphaS; 0450 0451 /** 0452 * Electroweak scheme 0453 */ 0454 unsigned int theElectroWeakScheme; 0455 0456 /** 0457 * Option for the calculation of the W/Z widths 0458 */ 0459 unsigned int theBosonWidthOption; 0460 0461 private: 0462 0463 /** 0464 * Describe a concrete class with persistent data. 0465 */ 0466 static ClassDescription<StandardModelBase> initStandardModelBase; 0467 0468 /** 0469 * Private and non-existent assignment operator. 0470 */ 0471 StandardModelBase & operator=(const StandardModelBase &) = delete; 0472 0473 }; 0474 0475 /** @cond TRAITSPECIALIZATIONS */ 0476 0477 /** This template specialization informs ThePEG about the base classes 0478 * of StandardModelBase. */ 0479 template <> 0480 struct BaseClassTrait<StandardModelBase,1>: public ClassTraitsType { 0481 /** Typedef of the first base class of StandardModelBase. */ 0482 typedef Interfaced NthBase; 0483 }; 0484 0485 /** This template specialization informs ThePEG about the name of the 0486 * StandardModelBase class. */ 0487 template <> 0488 struct ClassTraits<StandardModelBase>: 0489 public ClassTraitsBase<StandardModelBase> { 0490 /** Return a platform-independent class name */ 0491 static string className() { return "ThePEG::StandardModelBase"; } 0492 }; 0493 0494 /** @endcond */ 0495 0496 } 0497 0498 #endif /* ThePEG_StandardModelBase_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|