00001 // -*- C++ -*- 00002 // 00003 // StandardModelBase.h is a part of ThePEG - Toolkit for HEP Event Generation 00004 // Copyright (C) 1999-2007 Leif Lonnblad 00005 // 00006 // ThePEG is licenced under version 2 of the GPL, see COPYING for details. 00007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 00008 // 00009 #ifndef ThePEG_StandardModelBase_H 00010 #define ThePEG_StandardModelBase_H 00011 // This is the declaration of the StandardModelBase class. 00012 00013 #include "ThePEG/Config/ThePEG.h" 00014 #include "AlphaEMBase.h" 00015 #include "CKMBase.h" 00016 #include "AlphaSBase.h" 00017 // #include "StandardModelBase.fh" 00018 // #include "StandardModelBase.xh" 00019 00020 namespace ThePEG { 00021 00038 class StandardModelBase: public Interfaced { 00039 00041 typedef Ptr<AlphaEMBase>::pointer AEMPtr; 00043 typedef Ptr<AlphaSBase>::pointer ASPtr; 00045 typedef Ptr<CKMBase>::pointer CKMPtr; 00047 typedef Ptr<AlphaEMBase>::transient_pointer tAEMPtr; 00049 typedef Ptr<AlphaSBase>::transient_pointer tASPtr; 00051 typedef Ptr<CKMBase>::transient_pointer tCKMPtr; 00052 00053 public: 00054 00060 StandardModelBase(); 00061 00065 virtual ~StandardModelBase(); 00067 00068 public: 00069 00073 unsigned int families() const { return theFamilies; } 00074 00075 public: 00076 00077 00083 double alphaEM() const { return theAlphaEM; } 00084 00088 double alphaEM(Energy2 scale) const { 00089 return theRunningAlphaEM->value(scale, *this); 00090 } 00091 00095 tAEMPtr alphaEMPtr() const { return theRunningAlphaEM; } 00096 00100 double sin2ThetaW() const { return theSin2ThetaW; } 00101 00105 InvEnergy2 fermiConstant() const {return theGF;} 00106 00110 double enu() const { return theEnu; } 00111 00115 double ee() const { return theEe; } 00116 00120 double eu() const { return theEu; } 00121 00125 double ed() const { return theEd; } 00126 00130 double vnu() const { return theVnu; } 00131 00135 double ve() const { return theVe; } 00136 00140 double vu() const { return theVu; } 00141 00145 double vd() const { return theVd; } 00146 00150 double anu() const { return theAnu; } 00151 00155 double ae() const { return theAe; } 00156 00160 double au() const { return theAu; } 00161 00165 double ad() const { return theAd; } 00166 00170 tCKMPtr CKM() const { return theCKM; } 00171 00177 double CKM(unsigned int uf, unsigned int df) const; 00178 00183 double CKM(const ParticleData & uType, 00184 const ParticleData & dType) const; 00186 00187 public: 00188 00194 unsigned int Nc() const { return theNc; } 00195 00199 unsigned int Nf(Energy2 scale) const { 00200 return theRunningAlphaS->Nf(scale); 00201 } 00202 00206 double alphaS() const { return theAlphaS; } 00207 00211 double alphaS(Energy2 scale) const { 00212 return theRunningAlphaS->value(scale, *this); 00213 } 00214 00218 tASPtr alphaSPtr() const { 00219 return theRunningAlphaS; 00220 } 00221 00225 Energy LambdaQCD(unsigned int nflav) const { 00226 return theRunningAlphaS->LambdaQCD(nflav); 00227 } 00228 00232 Energy LambdaQCD(Energy2 scale) const { return LambdaQCD(Nf(scale)); } 00234 00235 public: 00236 00237 00244 void persistentOutput(PersistentOStream & os) const; 00245 00251 void persistentInput(PersistentIStream & is, int version); 00253 00257 static void Init(); 00258 00259 protected: 00260 00267 virtual IBPtr clone() const; 00268 00273 virtual IBPtr fullclone() const; 00275 00276 00277 protected: 00278 00281 00287 virtual void doinit(); 00289 00290 private: 00291 00295 unsigned int theFamilies; 00296 00300 double theAlphaEM; 00301 00306 AEMPtr theRunningAlphaEM; 00307 00311 double theSin2ThetaW; 00312 00316 InvEnergy2 theGF; 00317 00321 double theEnu; 00322 00326 double theEe; 00327 00331 double theEu; 00332 00336 double theEd; 00337 00341 double theVnu; 00342 00346 double theVe; 00347 00351 double theVu; 00352 00356 double theVd; 00357 00361 double theAnu; 00362 00366 double theAe; 00367 00371 double theAu; 00372 00376 double theAd; 00377 00382 long recalculateEW; 00383 00388 CKMPtr theCKM; 00389 00393 mutable vector< vector<double> > theCKM2Matrix; 00394 00398 unsigned int theNc; 00399 00403 double theAlphaS; 00404 00409 ASPtr theRunningAlphaS; 00410 00411 00412 private: 00413 00417 static ClassDescription<StandardModelBase> initStandardModelBase; 00418 00422 StandardModelBase & operator=(const StandardModelBase &); 00423 00424 }; 00425 00430 template <> 00431 struct BaseClassTrait<StandardModelBase,1>: public ClassTraitsType { 00433 typedef Interfaced NthBase; 00434 }; 00435 00438 template <> 00439 struct ClassTraits<StandardModelBase>: 00440 public ClassTraitsBase<StandardModelBase> { 00442 static string className() { return "ThePEG::StandardModelBase"; } 00443 }; 00444 00447 } 00448 00449 #endif /* ThePEG_StandardModelBase_H */