LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenBase - EvtdFunctionSingle.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 38 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 7 0.0 %

          Line data    Source code
       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 "EvtGenBase/EvtPatches.hh"
      23             : #include <stdlib.h>
      24             : #include <math.h>
      25             : #include <iostream>
      26             : #include <assert.h>
      27             : #include "EvtGenBase/EvtdFunctionSingle.hh"
      28             : 
      29           0 : EvtdFunctionSingle::EvtdFunctionSingle(){
      30           0 :   _j=0;
      31           0 :   _m1=0;
      32           0 :   _m2=0;
      33           0 :   _coef=0;
      34           0 :   _kmin=0;
      35           0 :   _kmax=0;
      36           0 : }
      37             : 
      38             : 
      39           0 : EvtdFunctionSingle::~EvtdFunctionSingle(){
      40           0 :   if (_coef!=0) delete [] _coef;
      41           0 : }
      42             : 
      43             : 
      44             : void EvtdFunctionSingle::init(int j,int m1,int m2){
      45             : 
      46           0 :   assert(abs(m2)>=abs(m1));
      47           0 :   assert(m2>=0);
      48             : 
      49           0 :   _j=j;
      50           0 :   _m1=m1;
      51           0 :   _m2=m2;
      52             : 
      53           0 :   _kmin=_m2-_m1;
      54           0 :   _kmax=_j-_m1;
      55             : 
      56           0 :   assert(_kmin<=_kmax);
      57             : 
      58           0 :   _coef=new double[(_kmax-_kmin)/2+1];
      59             : 
      60             :   int k;
      61             : 
      62           0 :   for(k=_kmin;k<=_kmax;k+=2){
      63             :     int sign=1;
      64           0 :     if ((k-_m2+_m1)%4!=0) sign=-sign;
      65           0 :     double tmp = fact((_j+_m2)/2)*fact((_j-_m2)/2)
      66           0 :                    *fact((_j+_m1)/2)*fact((_j-_m1)/2);
      67           0 :     _coef[(k-_kmin)/2]=sign*sqrt(tmp)/
      68           0 :       (fact((_j+_m2-k)/2)*fact(k/2)*fact((_j-_m1-k)/2)*fact((k-_m2+_m1)/2));
      69             : 
      70             :   }
      71             : 
      72           0 : }
      73             : 
      74             : 
      75             : double EvtdFunctionSingle::d(int j,int m1,int m2, double theta){
      76             : 
      77           0 :   assert(j==_j); _unused( j );
      78           0 :   assert(m1==_m1);
      79           0 :   assert(m2==_m2);
      80             : 
      81           0 :   double c2=cos(0.5*theta);
      82           0 :   double s2=sin(0.5*theta);
      83             : 
      84             :   double d=0.0;
      85             :   
      86             :   int k;
      87           0 :   for(k=_kmin;k<=_kmax;k+=2){
      88           0 :     d+=_coef[(k-_kmin)/2]*pow(c2,(2*_j-2*k+m2-m1)/2)*pow(s2,(2*k-m2+m1)/2);
      89             :   }
      90             : 
      91           0 :   return d;
      92             :   
      93             : }
      94             : 
      95             : 
      96             : int EvtdFunctionSingle::fact(int n){
      97             : 
      98           0 :   assert(n>=0);
      99             : 
     100             :   int f=1;
     101             : 
     102             :   int k;
     103           0 :   for(k=2;k<=n;k++) f*=k;
     104             : 
     105           0 :   return f;
     106             : 
     107             : }
     108             : 
     109             : 
     110             : 

Generated by: LCOV version 1.11