#include <EvtdFunctionSingle.hh>
Public Member Functions | |
EvtdFunctionSingle () | |
~EvtdFunctionSingle () | |
void | init (int j, int m1, int m2) |
double | d (int j, int m1, int m2, double theta) |
Private Member Functions | |
int | fact (int n) |
Private Attributes | |
int | _j |
int | _m1 |
int | _m2 |
double * | _coef |
int | _kmin |
int | _kmax |
Definition at line 24 of file EvtdFunctionSingle.hh.
EvtdFunctionSingle::EvtdFunctionSingle | ( | ) |
EvtdFunctionSingle::~EvtdFunctionSingle | ( | ) |
double EvtdFunctionSingle::d | ( | int | j, | |
int | m1, | |||
int | m2, | |||
double | theta | |||
) |
Definition at line 81 of file EvtdFunctionSingle.cc.
References _coef, _j, _kmax, _kmin, _m1, _m2, cos(), and sin().
Referenced by EvtdFunction::d().
00081 { 00082 00083 //report(INFO,"EvtGen") << "j,m1,m2:"<<j<<","<<m1<<","<<m2<<" theta:"<<theta<<endl; 00084 00085 assert(j==_j); 00086 assert(m1==_m1); 00087 assert(m2==_m2); 00088 00089 double c2=cos(0.5*theta); 00090 double s2=sin(0.5*theta); 00091 00092 double d=0.0; 00093 00094 int k; 00095 for(k=_kmin;k<=_kmax;k+=2){ 00096 d+=_coef[(k-_kmin)/2]*pow(c2,(2*_j-2*k+m2-m1)/2)*pow(s2,(2*k-m2+m1)/2); 00097 } 00098 00099 return d; 00100 00101 }
int EvtdFunctionSingle::fact | ( | int | n | ) | [private] |
Definition at line 104 of file EvtdFunctionSingle.cc.
Referenced by init().
00104 { 00105 00106 assert(n>=0); 00107 00108 int f=1; 00109 00110 int k; 00111 for(k=2;k<=n;k++) f*=k; 00112 00113 return f; 00114 00115 }
void EvtdFunctionSingle::init | ( | int | j, | |
int | m1, | |||
int | m2 | |||
) |
Definition at line 44 of file EvtdFunctionSingle.cc.
References _coef, _j, _kmax, _kmin, _m1, _m2, abs, fact(), and sign().
Referenced by EvtdFunction::d().
00044 { 00045 00046 assert(abs(m2)>=abs(m1)); 00047 assert(m2>=0); 00048 00049 _j=j; 00050 _m1=m1; 00051 _m2=m2; 00052 00053 _kmin=_m2-_m1; 00054 _kmax=_j-_m1; 00055 00056 assert(_kmin<=_kmax); 00057 00058 _coef=new double[(_kmax-_kmin)/2+1]; 00059 00060 int k; 00061 00062 for(k=_kmin;k<=_kmax;k+=2){ 00063 int sign=1; 00064 if ((k-_m2+_m1)%4!=0) sign=-sign; 00065 //fkw change to satisfy KCC 00066 double fkwTmp = fact((_j+_m2)/2)*fact((_j-_m2)/2) 00067 *fact((_j+_m1)/2)*fact((_j-_m1)/2); 00068 _coef[(k-_kmin)/2]=sign*sqrt(fkwTmp)/ 00069 (fact((_j+_m2-k)/2)*fact(k/2)*fact((_j-_m1-k)/2)*fact((k-_m2+_m1)/2)); 00070 00071 //fkw _coef[(k-_kmin)/2]=sign*sqrt(fact((_j+_m2)/2)*fact((_j-_m2)/2)* 00072 //fkw fact((_j+_m1)/2)*fact((_j-_m1)/2))/ 00073 //fkw (fact((_j+_m2-k)/2)*fact(k/2)*fact((_j-_m1-k)/2)*fact((k-_m2+_m1)/2)); 00074 00075 //report(INFO,"EvtGen") << "k, coef:"<<k/2<<" "<<_coef[(k-_kmin)/2]<<endl; 00076 } 00077 00078 }
double* EvtdFunctionSingle::_coef [private] |
Definition at line 43 of file EvtdFunctionSingle.hh.
Referenced by d(), EvtdFunctionSingle(), init(), and ~EvtdFunctionSingle().
int EvtdFunctionSingle::_j [private] |
Definition at line 39 of file EvtdFunctionSingle.hh.
Referenced by d(), EvtdFunctionSingle(), and init().
int EvtdFunctionSingle::_kmax [private] |
Definition at line 47 of file EvtdFunctionSingle.hh.
Referenced by d(), EvtdFunctionSingle(), and init().
int EvtdFunctionSingle::_kmin [private] |
Definition at line 46 of file EvtdFunctionSingle.hh.
Referenced by d(), EvtdFunctionSingle(), and init().
int EvtdFunctionSingle::_m1 [private] |
Definition at line 40 of file EvtdFunctionSingle.hh.
Referenced by d(), EvtdFunctionSingle(), and init().
int EvtdFunctionSingle::_m2 [private] |
Definition at line 41 of file EvtdFunctionSingle.hh.
Referenced by d(), EvtdFunctionSingle(), and init().