5#include <gsl/gsl_sf_legendre.h>
13N(N),coefA(N),coefASq(2*N)
15 for (
unsigned int i=0;i<N;i++) {
16 std::ostringstream stream;
17 stream <<
"Fraction " << i;
18 fraction.push_back(
new Parameter(stream.str(), 0.5, 0.0, 1.0));
20 for (
unsigned int i=0;i<N;i++) {
21 std::ostringstream stream;
22 stream <<
"Phase " << i;
23 phase.push_back(
new Parameter(stream.str(), M_PI, 0.0, 2.0*M_PI));
29 for (
unsigned int i=0;i<N;i++) {
38 N(right.N),coefA(right.N), coefASq(2*right.N)
40 for (
unsigned int i=0;i<N;i++) {
41 fraction.push_back(
new Parameter(*right.fraction[i]));
42 phase.push_back(
new Parameter(*right.phase[i]));
49 std::vector<double> Pk(N+1);
50 gsl_sf_legendre_Pl_array(N, x, &Pk[0]);
52 std::complex<double> P=0.0;
53 std::complex<double> I(0,1.0);
56 double Pn=sqrt((2*n+1.0)/2.0)*Pk[n];
62 double Pn=sqrt((2*n+1.0)/2.0)*Pk[n];
99 unsigned int LMAX=coefA.getLMax();
100 for (
unsigned int L=0;L<=2*LMAX;L++) {
102 for (
unsigned int l1=0;l1<=LMAX;l1++) {
103 for (
unsigned int l2=0;l2<=LMAX;l2++) {
104 if (((l1+l2) >= L) && abs(l1-l2) <=
int(L)) {
105 coefASq(L) += (coefA(l1)*
107 sqrt((2*l1+1)*(2*l2+1)/4.0)*
108 pow(ClebschGordan(l1,l2,0,0,L,0),2));
119 std::complex<double> P=0.0;
120 std::complex<double> I(0,1.0);
131 coefA(n)=exp(I*px)*sqrt(f*fn);
#define FUNCTION_OBJECT_IMP(classname)
Parameter * getFraction(unsigned int i)
LegendreFit(unsigned int N)
Parameter * getPhase(unsigned int i)
void recomputeCoefficients() const
unsigned int order() const
const LegendreCoefficientSet & coefficientsASq() const
virtual double operator()(double argument) const override
const LegendreCoefficientSet & coefficientsA() const
virtual double getValue() const
Parameter(std::string name, double value, double lowerLimit=-1e100, double upperLimit=1e100)