#include <EvtdFunctionSingle.hh>
Public Member Functions | |
double | d (int j, int m1, int m2, double theta) |
EvtdFunctionSingle () | |
void | init (int j, int m1, int m2) |
~EvtdFunctionSingle () | |
Private Member Functions | |
int | fact (int n) |
Private Attributes | |
double * | _coef |
int | _j |
int | _kmax |
int | _kmin |
int | _m1 |
int | _m2 |
|
|
|
00039 { 00040 if (_coef!=0) delete [] _coef; 00041 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
|
|
|
|
|
|
|
|
|
|
|