Functions over SO(3)
PySOFFT samples functions over SO(3) at the Euler angles defined here.
For a given bandwidth bw a function \(f\) over SO(3) is given by a real or complex numpy array of shape
\[ (2\mathrm{bw},2\mathrm{bw},2\mathrm{bw}) \quad \text{with axes} \quad (\gamma,\alpha,\beta)\]
Why \((\gamma,\alpha,\beta)\) and not \((\alpha,\beta,\gamma)\) ?
In short, for performance reasons.
The implemented SO(3) Fourier transform consists of 2 normal FFTs over the axes belonging to \(\alpha\) and \(\gamma\) followed by a Wigner transform over the \(\beta\) axes.
For perfomance reason it is beneficial to compute the FFTs over adjecient axes.
Finially the C contiguouse array \((\gamma,\alpha,\beta)\) has the Fortran contiguous coordinates \((\beta,\alpha,\gamma)\) with
\(\beta\) beeing the innermost, i.e. fast, axis, over which the final Wigner transform is computed.