Partial Wave Analysis specific special funtions
Author mmikhasenko
2 Stars
Updated Last
2 Years Ago
Started In
May 2020


Build Status Build Status Codecov

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).


] add PartialWaveFunctions


using PartialWaveFunctions

# convenient call for integer indices
let j=3, (m1,m2) = (1,-1), cosθ=0.3
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.


  • 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