hosted by CEDAR HepForge |
00001 00012 #ifndef LOWE_H 00013 #define LOWE_H 00014 00015 #include <iostream> 00016 #include <fstream> 00017 #include <sstream> 00018 #include <cstring> 00019 #include "def.h" 00020 #include "utils.h" 00021 #include "linalg.h" 00022 #include "rge.h" 00023 using namespace softsusy; 00024 00025 namespace softsusy { 00026 const double MUP = 2.4e-3; 00027 const double MDOWN = 4.75e-3; 00028 const double MSTRANGE = 0.104; 00029 const double MCHARM = 1.27; 00030 const double MBOTTOM = 4.20; 00031 const double MTOP = 165.0; 00032 00033 const double MELECTRON = 5.10998902e-4; 00034 const double MMUON = 1.05658357e-1; 00035 const double MTAU = 1.77699; 00036 const double ALPHASMZ = 0.1176; 00037 const double ALPHAMZ = 1.0 / 127.925; 00038 00039 const double PMTOP = 171.4; 00040 const double PMBOTTOM = 4.9; 00041 00042 const double THETA12CKM = 0.229206; 00043 const double THETA13CKM = 0.003960; 00044 const double THETA23CKM = 0.042223; 00045 00047 typedef enum {mUp=1, mCharm, mTop, mDown, mStrange, mBottom, mElectron, 00048 mMuon, mTau} mass; 00050 typedef enum {ALPHA=1, ALPHAS} leGauge; 00051 } 00052 00054 DoubleVector gaugeDerivs(double, const DoubleVector &); 00055 00057 class QedQcd: public RGE 00058 { 00059 private: 00060 DoubleVector a; 00061 DoubleVector mf; 00062 double mtPole, mbPole; 00063 double mbMb; 00064 double mtauPole; 00065 00066 public: 00067 QedQcd(); 00068 QedQcd(const QedQcd &); 00069 const QedQcd& operator=(const QedQcd & m); 00070 virtual ~QedQcd() {}; 00071 00072 void setPoleMt(double mt) { mtPole = mt; }; 00073 void setPoleMb(double mb) { mbPole = mb; }; 00074 void setPoleMtau(double mtau) { mtauPole = mtau; }; 00075 void setMbMb(double mb) { mbMb = mb; }; 00076 00077 void setMass(mass mno, double m) { mf(mno) = m; }; 00079 void setAlpha(leGauge ai, double ap) { a(ai) = ap; }; 00081 void set(const DoubleVector &); 00082 00084 double displayPoleMt() const { return mtPole; }; 00086 double displayPoleMtau() const { return mtauPole; }; 00088 double displayPoleMb() const { return mbPole; }; 00090 const DoubleVector & displayMass() const { return mf; }; 00092 double displayMass(mass mno) const { return mf.display(mno); }; 00094 double displayAlpha(leGauge ai) const { return a.display(ai); }; 00096 DoubleVector display() const; 00098 double displayMbMb() const { return mbMb; } 00099 00100 int flavours(double) const; 00101 00102 double qedBeta() const; 00103 double qcdBeta() const; 00104 void massBeta(DoubleVector &) const; 00105 00106 DoubleVector beta() const; 00107 00109 void runGauge(double start, double end); 00111 double extractPoleMb(double asMb); 00113 double extractRunningMb(double asMb); 00115 void calcRunningMb(); 00118 void calcPoleMb(); 00119 00121 void toMt(); 00123 void toMz(); 00128 // alpha1 is in the GUT normalisation. sinth = sin^2 thetaW(Q) in MSbar 00129 // scheme 00130 DoubleVector getGaugeMu(const double m2, const 00131 double sinth) const; 00132 }; 00133 00135 ostream & operator <<(ostream &, const QedQcd &); 00137 istream & operator >>(istream &left, QedQcd &m); 00138 00142 void readIn(QedQcd & oneset, const char fname[80]); 00145 double getRunMt(double poleMt, double asmt); 00148 double getAsmt(double mtop, double alphasMz); 00150 double getRunMtFromMz(double poleMt, double asMZ); 00151 00152 inline QedQcd::QedQcd(const QedQcd &m) 00153 : a(m.a), mf(m.mf), mtPole(m.mtPole), mbPole(m.mbPole), mbMb(m.mbMb), 00154 mtauPole(m.mtauPole) { 00155 setPars(11); 00156 setMu(m.displayMu()); 00157 setLoops(m.displayLoops()); 00158 setThresholds(m.displayThresholds()); 00159 } 00160 00162 void massFermions(const QedQcd & r, DoubleMatrix & mDon, 00163 DoubleMatrix & mUpq, DoubleMatrix & mEle); 00164 #endif 00165
1.5.5