Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <algorithm>
#include <cmath>
#include "qft++Extension/SphericalHarmonic.hh"
#include "Utils/MathUtils.hh"
#include "qft++/relativistic-quantum-mechanics/Utils.hh"
namespace SphericalHarmonic{
double LegendrePolynomial(unsigned int l, int m, double cosT){
int LplusM=l+m;
double prefac1= MathUtils::factorial(LplusM);
int LminusM=l-m;
double prefac2= MathUtils::factorial(LminusM);
double result=prefac1/prefac2*Wigner_d((int) l, m, 0, acos(cosT));
return result;
}
std::complex<double> SphericalHarmonicFunc(int l, int m, double theta, double phi){
// double prefac1=(2.*l+1.)/(4*M_PI);
// int LminusM=l-m;
// double prefac2= MathUtils::factorial(LminusM);
// int LplusM=l+m;
// double prefac3= MathUtils::factorial(LplusM);
// double prefacAll=sqrt(prefac1*prefac2/prefac3);
// // if(m>0) prefacAll*=pow(-1.,m);
// std::complex<double> exp_imphi(cos(m*phi), sin(m*phi));
// std::complex<double> result=prefacAll*LegendrePolynomial(l, m, cos(theta))*exp_imphi;
double prefac=sqrt((2.*l+1.)/(4*M_PI));
std::complex<double> result=prefac*conj(Wigner_D(phi, theta, 0, l, m, 0));
if(result.imag()!=0.){
std::cout << "result: " << result << std::endl;
}
return result;
}
}