00001 #include <cmath>
00002 #include "TKFun.h"
00003 #include "TGlobal.h"
00004 #include "TConstants.h"
00005
00006 TKFun *kjr = NULL;
00007
00008 double TKFun::kfun(const double &co){
00009 double sa = sqrt((1.-co)*0.5);
00010 double sa2 = sa*sa;
00011 double ca = sqrt((1.+co)*0.5);
00012 double ca2 = ca*ca;
00013 double c1 = log(sa);
00014 double c2 = log(ca);
00015 double co2 = co*co;
00016 double co3 = co2*co;
00017 double co4 = co2*co2;
00018 double k = -1. + 2.*TLi2::Eval(ca2) - 2.*TLi2::Eval(sa2)+
00019 (gConst->Pi2()/3.*(2.*co4 - 3.*co3 - 15.*co) +
00020 2*(2*co4 - 3*co3 + 9*co2 + 3*co + 21.)*(c1*c1) -
00021 4.*(co4 + co2 - 2.*co)*c2*c2 -
00022 4.*(co3 + 4.*co2 + 5.*co + 6.)*(c1-c2)*(c1-c2) +
00023 2.*(co3 - 3.*co2 + 7.*co - 5.)*c2 +
00024 2.*(3.*co3 + 9.*co2 + 5.*co + 31.)*c1)/((3.+co2)*(3.+co2));
00025 return k;
00026 };
00027
00028 double tkfun(double *x){
00029 return kjr->kfun(*x);
00030 }
00031
00032
00033
00034
00035
00036 TKFun::TKFun(){
00037 fk = NULL;
00038 kjr = this;
00039 Init(gGlobal->Get_ThetaMin());
00040 }
00041
00042 void TKFun::Init(){
00043 Init(gGlobal->Get_ThetaMin());
00044 }
00045
00046 void TKFun::Init(const double &theta){
00047 fxmin = -cos(theta);
00048 fxmax = cos(theta);
00049
00050 if(fk)delete fk;
00051 fk = new TRadSpline3("k", fxmin, fxmax, tkfun, 10001);
00052 }
00053
00054 TKFun::TKFun(const double &theta){
00055 fk = NULL;
00056 kjr = this;
00057 Init(theta);
00058 }
00059
00060 TKFun::~TKFun(){
00061 delete fk;
00062 }
00063