Introduction
The SO3 code provides functionality to perform fast and exact Wigner transforms based on the sampling theorem on the rotation group derived in McEwen et al (2015).
This documentation outlines the various harmonic transforms supported in SO3, before describing installation details and documenting the C, and Matlab source code. Reference, version, and license information then follows.
Installation
The SO3 package contains a C implementations and a Matlab interface to the C implementation.
Dependencies
SO3 requires the FFTW and the SSHT package. Obviously suitable C compilers will be required to build the implementation. Both C and Matlab mex compilers will be required to build the Matlab interface to the C implementation.
Compiling
A makefile is provided to build the code. Before compiling you will need to edit the makefile to specify your compiler and to link with the appropriate libraries.
Once you have set the makefile up for your system, SO3 may be compiled by running:
>> make all
This will build the library, unit tests, test program and Matlab interface. If your system is configured to build all of these components then you are done. If you prefer to build only a subset of these components then read on.
You may alternatively build the individual components of SO3. To build the library only run:
>> make lib
To build the unit tests run:
>> make unittest
To build the test program run:
>> make test
To build the Matlab interface run (which will also build the library if it has not already been built):
>> make matlab
Testing
Run the test program to verify your installation. A default test may be performed by running:
>> make runtest
If SO3 is installed correctly the test program should run and print test results to the terminal. The test program performs an inverse Wigner transform of a random signal, followed by a forward transform. The error between the original and recovered Wigner coefficients is computed and displayed. All errors should be of the order of numerical precision.
Alternatively, you may run the test program directly by running:
>> ./bin/c/so3_test <L> <N> <L0>
where <L>
and <N>
are the harmonic and orientational band-limit, respectively, and <L0>
is the lower harmonic band-limit of your test.
To check the version and build numbers of your version run:
>> ./bin/c/so3_about
Documentation
The SO3 code is self documenting. Although the package ships with source documentation, you may generate html source documentation by running:
>> make doc
Documentation is generated using doxygen, thus you must have doxygen installed on your system to generate the source documentation.
Cleaning up
To clean up your version of the SO3 code and remove all builds run:
>> make clean
To remove all source documentation run:
>> make cleandoc
Source code documentation
SO3 ships with source documentation that is generated by doxygen. Documentation is available here for the C implementation. The Matlab routines that interface with the C implementation are self documenting (documentation can be access through the help command in Matlab), as discussed below.
Matlab interface
Once the Matlab interface is built, you must have so3/src/matlab
in your path in order to run the Matlab functions. A number of Matlab functions and demos illustrating their use are provided.
Functions
Usage of the SO3 Matlab interface will most frequently require only the functions to perform forward and inverse Wigner transforms (so3_forward
and so3_inverse
respectively). However, a number of additional functions are also provided. A full list of Matlab functions, with brief descriptions are given here:
so3_elmn2ind Convert harmonic indices to vector index so3_forward Compute forward Wigner transform so3_forward_direct Compute forward Wigner transform using direct method so3_ind2elmn Convert vector index to harmonic indices so3_inverse Compute inverse Wigner transform so3_inverse_direct Compute inverse Wigner transform using direct method so3_sampling Compute sample positions
To access the documentation for each function in Matlab, simply run:
>> help <function>
where <function>
is the function name.
Demos
A number of demos are provided to illustrate the use of the Matlab interface:
so3_demo_error_timing Create timing and error plots of round-trip transform. so3_demo_plot_wigner Use SO3 to plot Wigner functions on SO(3). so3_demo_basic Simple demo to compute inverse and forward transform of complex scalar function, using simplest interface with default options. so3_demo_basic_direct Simple demo to compute inverse and forward transform of complex scalar function, using direct method with simplest interface with default options. so3_demo_real_signal Simple demo to compute inverse and forward transform of real scalar function, using simplest interface with default options. so3_demo_real_signal_direct Simple demo to compute inverse and forward transform of real scalar function, using direct method with simplest interface with default options. so3_demo_compact_storage Demo to compute inverse and forward transform of complex scalar function, using compact storage. so3_demo_storage_order Demo to compute inverse and forward transform of complex function, storing the flmn for n = -N+1 first. so3_demo_lower_band_limit Demo to compute inverse and forward transform of complex function, using a non-zero lower harmonic band-limit - i.e. only harmonic coefficients with L greater than or equal to some L0 are non-zero. so3_demo_even_n Demo to compute inverse and forward transform of complex function, using only harmonic coefficients with even n. so3_demo_symmetric_sampling Demo to compute inverse and forward transform of complex function, using a symmetrically sampled signal. so3_demo_covariance This demo runs a series of forward transforms from random coefficients and compares the transformed signal's covariance with the theoretical prediction.
To access the documentation for each demo in Matlab, simply run:
>> help <demo>
where <demo>
is the demo name.
Download
We make the source code of the SO3 package available under the license described below. It can be downloaded from the following site:
Referencing
If you use SO3 for work that results in publication, please reference this site (http://www.jasonmcewen.org/) and our related academic paper:
A novel sampling theorem on the rotation group. J. D. McEwen, M. Büttner, B. Leistedt, H. V. Peiris, Y. Wiaux
License
SO3 package to perform Wigner transforms
Copyright (C) 2014-2015 Martin Büttner, Jason McEwen, and Boris LeistedtThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (LICENSE.txt).
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
About the authors
SO3 was developed by Martin Büttner, Jason McEwen, and Boris Leistedt at University College London (UCL).