BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtdFunctionSingle.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
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.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 2000 Caltech, UCSB
10//
11// Module: EvtdFunctionSingle.cc
12//
13// Description: Evaluates one Wigner d-Functions.
14//
15// Modification history:
16//
17// fkw February 2, 2001 changes to satisfy KCC
18// RYD August 10, 2000 Module created
19//
20//------------------------------------------------------------------------
21//
22#include "EvtdFunctionSingle.hh"
23#include "EvtPatches.hh"
24#include <assert.h>
25#include <iostream>
26#include <math.h>
27#include <stdlib.h>
28
30 _j = 0;
31 _m1 = 0;
32 _m2 = 0;
33 _coef = 0;
34 _kmin = 0;
35 _kmax = 0;
36}
37
39 if ( _coef != 0 ) delete[] _coef;
40}
41
42void EvtdFunctionSingle::init( int j, int m1, int m2 ) {
43
44 assert( abs( m2 ) >= abs( m1 ) );
45 assert( m2 >= 0 );
46
47 _j = j;
48 _m1 = m1;
49 _m2 = m2;
50
51 _kmin = _m2 - _m1;
52 _kmax = _j - _m1;
53
54 assert( _kmin <= _kmax );
55
56 _coef = new double[( _kmax - _kmin ) / 2 + 1];
57
58 int k;
59
60 for ( k = _kmin; k <= _kmax; k += 2 )
61 {
62 int sign = 1;
63 if ( ( k - _m2 + _m1 ) % 4 != 0 ) sign = -sign;
64 // fkw change to satisfy KCC
65 double fkwTmp = fact( ( _j + _m2 ) / 2 ) * fact( ( _j - _m2 ) / 2 ) *
66 fact( ( _j + _m1 ) / 2 ) * fact( ( _j - _m1 ) / 2 );
67 _coef[( k - _kmin ) / 2] =
68 sign * sqrt( fkwTmp ) /
69 ( fact( ( _j + _m2 - k ) / 2 ) * fact( k / 2 ) * fact( ( _j - _m1 - k ) / 2 ) *
70 fact( ( k - _m2 + _m1 ) / 2 ) );
71
72 // fkw _coef[(k-_kmin)/2]=sign*sqrt(fact((_j+_m2)/2)*fact((_j-_m2)/2)*
73 // fkw fact((_j+_m1)/2)*fact((_j-_m1)/2))/
74 // fkw (fact((_j+_m2-k)/2)*fact(k/2)*fact((_j-_m1-k)/2)*fact((k-_m2+_m1)/2));
75
76 // report(INFO,"EvtGen") << "k, coef:"<<k/2<<" "<<_coef[(k-_kmin)/2]<<endl;
77 }
78}
79
80double EvtdFunctionSingle::d( int j, int m1, int m2, double theta ) {
81
82 // report(INFO,"EvtGen") << "j,m1,m2:"<<j<<","<<m1<<","<<m2<<" theta:"<<theta<<endl;
83
84 assert( j == _j );
85 assert( m1 == _m1 );
86 assert( m2 == _m2 );
87
88 double c2 = cos( 0.5 * theta );
89 double s2 = sin( 0.5 * theta );
90
91 double d = 0.0;
92
93 int k;
94 for ( k = _kmin; k <= _kmax; k += 2 )
95 {
96 d += _coef[( k - _kmin ) / 2] * pow( c2, ( 2 * _j - 2 * k + m2 - m1 ) / 2 ) *
97 pow( s2, ( 2 * k - m2 + m1 ) / 2 );
98 }
99
100 return d;
101}
102
103int EvtdFunctionSingle::fact( int n ) {
104
105 assert( n >= 0 );
106
107 int f = 1;
108
109 int k;
110 for ( k = 2; k <= n; k++ ) f *= k;
111
112 return f;
113}
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
const Int_t n
double d(int j, int m1, int m2, double theta)
void init(int j, int m1, int m2)
double double * m2
Definition qcdloop1.h:83
double * m1
Definition qcdloop1.h:83