00001 #ifndef RAD_TDFun
00002 #define RAD_TDFun
00003
00004 #include <cmath>
00005 #include "TRadSpline.h"
00006
00007 class TDFun{
00008 protected:
00009 double fxmin;
00010 double fxmax;
00011 double fD0;
00012 double fb2;
00013 TRadSpline3 *fd;
00014 public:
00015 TDFun();
00016 TDFun(const double&, const double&);
00017 ~TDFun();
00018 void Init();
00019 void Init(const double&, const double&);
00020
00021 inline double EvalSpline(const double &z){return fd->Eval(z);}
00022
00023 inline double Eval(const double &z){
00024 double x = 1 - z;
00025
00026
00027 double D = fb2*pow(x,fb2-1)*fD0 - 0.5*fb2*(1+z) -
00028 fb2*fb2/8*(4*(1+z)*log(x)+(1+3*z*z)/x*log1p(-x)+5+z);
00029 return D;
00030 }
00031
00032 inline double Eval(const double &z, const double &b2, const double &D0){
00033 double x = 1 - z;
00034
00035
00036 double D = b2*pow(x,b2-1)*D0 - 0.5*b2*(1+z) -
00037 b2*b2/8*(4*(1+z)*log(x)+(1+3*z*z)/x*log1p(-x)+5+z);
00038 return D;
00039 }
00040
00041 inline double EvalSoft(const double &x){
00042 double z = 1 - x;
00043 double lx = log(x);
00044 double t1 = exp(-fb2*lx);
00045 double t2 = t1*x;
00046
00047
00048 double D = fD0 - t2*(0.5*(1+z) + fb2/8*( 4*(1+z)*lx + 4 + (1+z))) -
00049 fb2/8*t1*(1+3*z*z)*log1p(-x);
00050 return D;
00051 }
00052
00053 inline double EvalSoft(const double &x, const double &b2, const double &D0){
00054 double z = 1 - x;
00055 double lx = log(x);
00056 double t1 = exp(-b2*lx);
00057 double t2 = t1*x;
00058
00059
00060 double D = D0 - t2*(0.5*(1+z) + b2/8*( 4*(1+z)*lx + 4 + (1+z))) -
00061 b2/8*t1*(1+3*z*z)*log1p(-x);
00062 return D;
00063 }
00064
00065 };
00066
00067 #endif //#ifndef RAD_TDFun