32void EvtCGCoefSingle::init(
int j1,
int j2 ) {
37 _Jmax =
abs( j1 + j2 );
38 _Jmin =
abs( j1 - j2 );
40 _table.resize( ( _Jmax - _Jmin ) / 2 + 1 );
45 if ( j2 < j1 ) lenmax = j2 + 1;
48 for ( J = _Jmax; J >= _Jmin; J -= 2 )
50 _table[( J - _Jmin ) / 2].resize( J + 1 );
51 for ( M = J; J >= -M; M -= 2 )
53 int len = ( ( _j1 + _j2 ) -
abs( M ) ) / 2 + 1;
54 if ( len > lenmax ) len = lenmax;
55 _table[( J - _Jmin ) / 2][( M + J ) / 2].resize( len );
60 for ( J = _Jmax; J >= _Jmin; J -= 2 )
63 if ( J == _Jmax ) { cg( J, J, _j1, _j2 ) = 1.0; }
66 int n = ( _Jmax - J ) / 2 + 1;
67 std::vector<double>* vectors =
new std::vector<double>[
n - 1];
69 for ( i = 0; i <
n - 1; i++ )
72 vectors[i].resize(
n );
73 for ( k = 0; k <
n; k++ )
75 double tmp = _table[( _Jmax - _Jmin ) / 2 - i][( J + _Jmax - 2 * i ) / 2][k];
79 EvtOrthogVector getOrth(
n, vectors );
80 std::vector<double> orth = getOrth.getOrthogVector();
82 if ( orth[
n - 1] < 0.0 ) sign = -1;
83 for ( k = 0; k <
n; k++ ) { _table[( J - _Jmin ) / 2][J][k] = sign * orth[k]; }
85 for ( M = J - 2; M >= -J; M -= 2 )
87 int len = ( ( _j1 + _j2 ) -
abs( M ) ) / 2 + 1;
88 if ( len > lenmax ) len = lenmax;
90 if ( mmin < -j1 ) mmin = -j1;
92 for (
m1 = mmin;
m1 < mmin + len * 2;
m1 += 2 )
96 float fkwTmp = _j1 * ( _j1 + 2 ) - (
m1 + 2 ) *
m1;
101 if (
m1 + 2 <= _j1 ) sum += 0.5 * sqrt( fkwTmp ) * cg( J, M + 2,
m1 + 2,
m2 );
102 fkwTmp = _j2 * ( _j2 + 2 ) - (
m2 + 2 ) *
m2;
103 if (
m2 + 2 <= _j2 ) sum += 0.5 * sqrt( fkwTmp ) * cg( J, M + 2,
m1,
m2 + 2 );
104 fkwTmp = J * ( J + 2 ) - ( M + 2 ) * M;
105 sum /= ( 0.5 * sqrt( fkwTmp ) );
106 cg( J, M,
m1,
m2 ) = sum;
117 return cg( J, M,
m1,
m2 );
120double& EvtCGCoefSingle::cg(
int J,
int M,
int m1,
int m2 ) {
122 assert( M ==
m1 +
m2 );
123 assert(
abs( M ) <= J );
124 assert( J <= _Jmax );
125 assert( J >= _Jmin );
126 assert(
abs(
m1 ) <= _j1 );
127 assert(
abs(
m2 ) <= _j2 );
133 if ( mmin < -_j1 ) mmin = -_j1;
137 return _table[( J - _Jmin ) / 2][( M + J ) / 2][
n / 2];
double coef(int J, int M, int j1, int j2, int m1, int m2)