Multipole Vector formalism
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



C implementation:

An implementation of the multipole direction decomposition as outlined in
C.J. Copi, D. Huterer, and G.D. Starkman, Phys. Rev. D, 70, 043515 (2004).
This solves the coupled set of quadratic equations in equation (A3) from
Appendix A of that paper.  The equations are solved using routines from the
gsl library.  It has most recently been tested with gsl version 1.16,
though should work with much older versions.  See for more information.  You must have this
library installed to use the implementation provided here.

The code is released under a BSD license (see source files for exact
terms).  Note that it relies upon gsl which is released under the GNU
General Public License which may place other restrictions on your usage.
This implementation is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY

The two main files are

  includes the definitions of important structures and prototypes of the
  important routines.

  includes the source code for the routines and some internal routines
  useful for the decomposition.

The simplest routine to use is mpd_decomp_full_fit.  This does the full
decomposition of the Lth multipole given the alm.  Since the CMB map is
real valued all the information is given in the 2L+1 coefficients al0 al1re
al1im al2re al2im ... where al1re is the real part of the coeffcient al1,
etc.  An example of using this routine is given in mpd_driver.c.  This
routine makes a number of assumptions and can thus sometimes fail when
doing a decomposition.

The workhorse routine is mpd_decomp_fit.  This routine peels off one
vector, returning the resulting unit vector and rank l-1 symmetric
traceless tensor.  A vector can then be peeled off from this tensor using
the same routine, ..., until we are left with just two vectors.  An example
of this is the mpd_decomp_full_fit routine which is just does the book
keeping for you and relies on mpd_decomp_fit to do the actual

Python version:

The algorithm is also implemented in Python using NumPy and SciPy.

File: : This serves as both a Python module and stand alone
	        program.  It is run in the same way as the C program.

The latest version and other information on this implementation can always
be found at

The original site with more, older information still exists at

Questions, bug reports, etc can be sent to
Please make sure you are using the latest version.  Please include the
version of the code your are using (see mpd_decomp.h or

  19 Jun 2006 : (v1.9) Fixed a memory leak in mpd_decomp_vector_create.
                (Found by Bjarne Thomsen)
  27 Jun 2006 : (v1.10) Changed the normalization.  A^l may be correct
                now.  It seems to be correct for quadrupoles.  Also changed
		all size_t to unsigned int.
  27 Jun 2006 : (v1.11) Changed the normalization again.  Now A^l is
                correct for alm = delta_{m,0}.
  16 Sep 2007 : (v1.12) Fixed memory leak in mpd_decomp_full_fit.
                (Found by Cristian Armendariz-Picon)
  06 Jul 2016 : (v1.20) Removed the equations for the 'b'.  These were
     	        redundant and not used for anything.  They just wasted
		memory and computational time!  Updated documentation,
		including reference to the Python implementation.