1 //--------------------------------------------------------------------------
4 // This software is part of the EvtGen package developed jointly
5 // for the BaBar and CLEO collaborations. If you use all or part
6 // of it, please give an appropriate acknowledgement.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 2000 Caltech, UCSB
11 // Module: EvtdFunctionSingle.cc
13 // Description: Evaluates one Wigner d-Functions.
15 // Modification history:
17 // fkw February 2, 2001 changes to satisfy KCC
18 // RYD August 10, 2000 Module created
20 //------------------------------------------------------------------------
22 #include "EvtGenBase/EvtPatches.hh"
27 #include "EvtGenBase/EvtdFunctionSingle.hh"
29 EvtdFunctionSingle::EvtdFunctionSingle(){
39 EvtdFunctionSingle::~EvtdFunctionSingle(){
40 if (_coef!=0) delete [] _coef;
44 void EvtdFunctionSingle::init(int j,int m1,int m2){
46 assert(abs(m2)>=abs(m1));
58 _coef=new double[(_kmax-_kmin)/2+1];
62 for(k=_kmin;k<=_kmax;k+=2){
64 if ((k-_m2+_m1)%4!=0) sign=-sign;
65 double tmp = fact((_j+_m2)/2)*fact((_j-_m2)/2)
66 *fact((_j+_m1)/2)*fact((_j-_m1)/2);
67 _coef[(k-_kmin)/2]=sign*sqrt(tmp)/
68 (fact((_j+_m2-k)/2)*fact(k/2)*fact((_j-_m1-k)/2)*fact((k-_m2+_m1)/2));
75 double EvtdFunctionSingle::d(int j,int m1,int m2, double theta){
81 double c2=cos(0.5*theta);
82 double s2=sin(0.5*theta);
87 for(k=_kmin;k<=_kmax;k+=2){
88 d+=_coef[(k-_kmin)/2]*pow(c2,(2*_j-2*k+m2-m1)/2)*pow(s2,(2*k-m2+m1)/2);
96 int EvtdFunctionSingle::fact(int n){
103 for(k=2;k<=n;k++) f*=k;