# PartialWaveFunctions

Julia native implementation of the special functions used in the Partial Wave Analysis for High Energy Physics. Currently, Wigner D-functions and Clebsch-Gordan(CG) coefficients are available. The implementation of the CG coefficient is by factor 4 faster than the C++ code from the GSL package (see details in test/timing).

## Installation

`] add PartialWaveFunctions`

## Usage

```
using PartialWaveFunctions
# convenient call for integer indices
let j=3, (m1,m2) = (1,-1), cosθ=0.3
wignerd(j,m1,m2,cosθ)
end # return 0.293
clebschgordan(1,0,1,0,1,0) # <1, 0; 1, 0 | 1, 0> = 0.0 : ρ⁰ → π⁰ π⁰
CG(1,0,1,0,1,0) # a shortcut
```

General implementation includes the half-integer indices:

```
let two_j=3, (two_m1,two_m2) = (1,-1), cosθ=0.3
wignerd_doublearg(two_j,two_m1,two_m2, cosθ)
end # return -0.562
clebschgordan_doublearg(2,0,1,1,1,1) # <1, 0; 1/2, 1/2 | 1/2, 1/2> = -0.577
CG_doublearg(2,0,1,1,1,1) # a shortcut
```

## Related packages:

- python calls via
`SymPy.jl`

. Ideal for symbolic calculations. Works pretty with jupyter notebooks due to the latex output. See details in the test/physics. - WignerD.jl interfaces
`Fortran`

for the`WignerD`

. - WignerSymbols.jl
`Julia`

package specialized on Symbols. Particularly it contains the Clebsch-Gordan coefficients. - GSL.jl interfaces
`C++`

. It can calculate Sperical Harmionics, Legendre polynomials.`WignerD`

is not wrapped-up.

## References

- The Wigner functions are expressed via the Jacobi polynomials Pₙ⁽ᵃᵇ⁾(z) using Eq. (3.74) of L. Biedenharn, J. Louck, and P. Carruthers, Angular Momentum in Quantum Physics: Theory and Application
- The Jacobi polynomials Pₙ⁽ᵃᵇ⁾(z) are codded using a series expression in powers of (1-z), see e.g. wikipedia page.
- Clebsch-Gordan coefficients are computed from explicit expression via a finite series, see e.g. wikipedia page