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