00001 #ifndef RAD_TDFun_o
00002 #define RAD_TDFun_o
00003
00004 #include <cmath>
00005 #include "TConstant.h"
00006 namespace rb{
00007 class TDFun{
00008 protected:
00009 double fD0;
00010 double fiD0;
00011 double fb2;
00012 double fib2;
00013 public:
00014 TDFun();
00015
00016 TDFun(const double& E){
00017 double L = 2.*log(2.*E/me);
00018 double fBeta = 2.*alpha/M_PI*(L-1.);
00019 fb2 = fBeta/2;
00020 fib2 = 1/fb2;
00021
00022 fD0 = 1.+3./8.*fBeta+fBeta*fBeta/16.*(9./8. - M_PI*M_PI/3);
00023 fiD0 = 1/fD0;
00024 }
00025
00026 ~TDFun(){};
00027
00028 inline double GetD0() const { return fD0;};
00029 inline double GetiD0() const { return fiD0;};
00030 inline double GetBeta2() const { return fb2;};
00031 inline double GetiBeta2() const { return fib2;};
00032
00033 inline double Eval(const double &z){
00034 double x = 1 - z;
00035
00036
00037 double D = fb2*pow(x,fb2-1)*fD0 - 0.5*fb2*(1+z) -
00038 fb2*fb2/8*(4*(1+z)*log(x)+(1+3*z*z)/x*log1p(-x)+5+z);
00039 return D;
00040 }
00041
00042 inline double Eval(const double &z, const double &b2, const double &D0){
00043 double x = 1 - z;
00044
00045
00046 double D = b2*pow(x,b2-1)*D0 - 0.5*b2*(1+z) -
00047 b2*b2/8*(4*(1+z)*log(x)+(1+3*z*z)/x*log1p(-x)+5+z);
00048 return D;
00049 }
00050
00051 inline double EvalSoft(const double &x){
00052 double z = 1 - x;
00053 double lx = log(x);
00054 double t1 = exp(-fb2*lx);
00055 double t2 = t1*x;
00056
00057
00058 double D = fD0 - t2*(0.5*(1+z) + fb2/8*( 4*(1+z)*lx + 4 + (1+z))) -
00059 fb2/8*t1*(1+3*z*z)*log1p(-x);
00060 return D;
00061 }
00062
00063 inline double EvalSoft(const double &x, const double &b2, const double &D0){
00064 double z = 1 - x;
00065 double lx = log(x);
00066 double t1 = exp(-b2*lx);
00067 double t2 = t1*x;
00068
00069
00070 double D = D0 - t2*(0.5*(1+z) + b2/8*( 4*(1+z)*lx + 4 + (1+z))) -
00071 b2/8*t1*(1+3*z*z)*log1p(-x);
00072 return D;
00073 }
00074
00075 };
00076 }
00077
00078 #endif //#ifndef RAD_TDFun