README.md 6.6 KB
Newer Older
Jait Dixit's avatar
Jait Dixit committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
NIFTY - Numerical Information Field Theory
==========================================
[![build status](https://gitlab.mpcdf.mpg.de/ift/NIFTy/badges/master/build.svg)](https://gitlab.mpcdf.mpg.de/ift/NIFTy/commits/master)
[![coverage report](https://gitlab.mpcdf.mpg.de/ift/NIFTy/badges/master/coverage.svg)](https://gitlab.mpcdf.mpg.de/ift/NIFTy/commits/master)

**NIFTY** project homepage:
[http://www.mpa-garching.mpg.de/ift/nifty/](http://www.mpa-garching.mpg.de/ift/nifty/)

Summary
-------

### Description

**NIFTY**, "**N**umerical **I**nformation **F**ield **T**heor**y**", is
a versatile library designed to enable the development of signal
inference algorithms that operate regardless of the underlying spatial
grid and its resolution. Its object-oriented framework is written in
Martin Reinecke's avatar
updates  
Martin Reinecke committed
18
Python, although it accesses libraries written in C++ and C for
Jait Dixit's avatar
Jait Dixit committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
efficiency.

NIFTY offers a toolkit that abstracts discretized representations of
continuous spaces, fields in these spaces, and operators acting on
fields into classes. Thereby, the correct normalization of operations on
fields is taken care of automatically without concerning the user. This
allows for an abstract formulation and programming of inference
algorithms, including those derived within information field theory.
Thus, NIFTY permits its user to rapidly prototype algorithms in 1D, and
then apply the developed code in higher-dimensional settings of real
world problems. The set of spaces on which NIFTY operates comprises
point sets, *n*-dimensional regular grids, spherical spaces, their
harmonic counterparts, and product spaces constructed as combinations of
those.

### Class & Feature Overview

The NIFTY library features three main classes: **spaces** that represent
certain grids, **fields** that are defined on spaces, and **operators**
that apply to fields.

-   [Spaces](http://www.mpa-garching.mpg.de/ift/nifty/space.html)
Martin Reinecke's avatar
updates  
Martin Reinecke committed
41 42 43 44
    -   `RGSpace` - *n*-dimensional regular Euclidean grid
    -   `LMSpace` - spherical harmonics
    -   `GLSpace` - Gauss-Legendre grid on the 2-sphere
    -   `HPSpace` - [HEALPix](http://sourceforge.net/projects/healpix/)
Jait Dixit's avatar
Jait Dixit committed
45 46
        grid on the 2-sphere
-   [Fields](http://www.mpa-garching.mpg.de/ift/nifty/field.html)
Martin Reinecke's avatar
updates  
Martin Reinecke committed
47
    -   `Field` - generic class for (discretized) fields
Jait Dixit's avatar
Jait Dixit committed
48 49 50

<!-- -->

Martin Reinecke's avatar
updates  
Martin Reinecke committed
51 52
    Field.conjugate     Field.dim          Field.norm
    Field.dot           Field.set_val      Field.weight
Jait Dixit's avatar
Jait Dixit committed
53 54

-   [Operators](http://www.mpa-garching.mpg.de/ift/nifty/operator.html)
Martin Reinecke's avatar
updates  
Martin Reinecke committed
55
    -   `DiagonalOperator` - purely diagonal matrices in a specified
Jait Dixit's avatar
Jait Dixit committed
56
        basis
Martin Reinecke's avatar
updates  
Martin Reinecke committed
57
    -   `ProjectionOperator` - projections onto subsets of a specified
Jait Dixit's avatar
Jait Dixit committed
58
        basis
Martin Reinecke's avatar
updates  
Martin Reinecke committed
59
    -   `PropagatorOperator` - information propagator in Wiener filter
Jait Dixit's avatar
Jait Dixit committed
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
        theory
    -   (and more)
-   (and more)

*Parts of this summary are taken from* [1] *without marking them
explicitly as quotations.*

Installation
------------

### Requirements

-   [Python](http://www.python.org/) (v2.7.x)
    -   [NumPy](http://www.numpy.org/)

### Download

Martin Reinecke's avatar
updates  
Martin Reinecke committed
77
The current version of Nifty3 can be obtained by cloning the repository:
Jait Dixit's avatar
Jait Dixit committed
78 79 80 81 82 83 84 85 86 87 88 89

    git clone https://gitlab.mpcdf.mpg.de/ift/NIFTy.git

### Installation on Ubuntu

This is for you if you want to install NIFTy on your personal computer
running with an Ubuntu-like linux system were you have root priviledges.
Starting with a fresh Ubuntu installation move to a folder like
`~/Downloads`:

-   Install basic packages like python, python-dev, gsl and others:

Martin Reinecke's avatar
updates  
Martin Reinecke committed
90
        sudo apt-get install curl git autoconf python-dev python-pip python-numpy
Jait Dixit's avatar
Jait Dixit committed
91

92
-   Install pyHealpix:
Jait Dixit's avatar
Jait Dixit committed
93

Martin Reinecke's avatar
Martin Reinecke committed
94
        git clone https://gitlab.mpcdf.mpg.de/ift/pyHealpix.git
95
        cd pyHealpix
96
        autoreconf -i && ./configure --prefix=$HOME/.local --enable-openmp --enable-native-optimizations && make -j4 && make install
Jait Dixit's avatar
Jait Dixit committed
97 98 99 100 101
        cd ..

-   Finally, NIFTy:

        git clone https://gitlab.mpcdf.mpg.de/ift/NIFTy.git
Martin Reinecke's avatar
updates  
Martin Reinecke committed
102 103
        cd NIFTy
        python setup.py install --user
104
        cd ..
Jait Dixit's avatar
Jait Dixit committed
105

Martin Reinecke's avatar
updates  
Martin Reinecke committed
106
### Installation on Linux systems in general
Jait Dixit's avatar
Jait Dixit committed
107

Martin Reinecke's avatar
updates  
Martin Reinecke committed
108 109 110 111 112 113
Since all the "unconventional" packages (i.e. pyHealpix and NIFTy) listed in the
section above are installed
within the home directory of the user, the installation instructions for these
should also work on any Linux machine where you do not have root access.
In this case you have to ensure with your system administrators that the
"standard" dependencies (python, numpy, etc.) are installed system-wide.
114

Jait Dixit's avatar
Jait Dixit committed
115 116
### Installation on OS X 10.11

117
We advise to install the following packages in the order as they appear
Jait Dixit's avatar
Jait Dixit committed
118 119 120 121 122 123
below. We strongly recommend to install all needed packages via
MacPorts. Please be aware that not all packages are available on
MacPorts, missing ones need to be installed manually. It may also be
mentioned that one should only use one package manager, as multiple ones
may cause trouble.

Martin Reinecke's avatar
updates  
Martin Reinecke committed
124
-   Install numpy:
Jait Dixit's avatar
Jait Dixit committed
125 126 127

        sudo port install py27-numpy

128
-   Install pyHealpix:
Jait Dixit's avatar
Jait Dixit committed
129

Martin Reinecke's avatar
Martin Reinecke committed
130
        git clone https://gitlab.mpcdf.mpg.de/ift/pyHealpix.git
131
        cd pyHealpix
132
        autoreconf -i && ./configure --prefix=`python-config --prefix` --enable-openmp --enable-native-optimizations && make -j4 && sudo make install
Jait Dixit's avatar
Jait Dixit committed
133 134
        cd ..

Martin Reinecke's avatar
updates  
Martin Reinecke committed
135 136 137 138
    (The third command installs the package system-wide. User-specific
    installation would be preferrable, but we haven't found a simple recipe yet
    how to determine the installation prefix ...)

Jait Dixit's avatar
Jait Dixit committed
139 140 141
-   Install NIFTy:

        git clone https://gitlab.mpcdf.mpg.de/ift/NIFTy.git
Martin Reinecke's avatar
updates  
Martin Reinecke committed
142 143
        cd NIFTy
        python setup.py install --user
144
        cd ..
Jait Dixit's avatar
Jait Dixit committed
145

Theo Steininger's avatar
Theo Steininger committed
146 147 148 149 150 151
### Running the tests

In oder to run the tests one needs two additional packages:

    pip install nose
    pip install parameterized
152 153

Afterwards the tests (including a coverage report) are run using the following
Theo Steininger's avatar
Theo Steininger committed
154
command in the repository root:
155

Theo Steininger's avatar
Theo Steininger committed
156 157 158
    nosetests --exe --cover-html


Jait Dixit's avatar
Jait Dixit committed
159 160 161 162 163 164
### First Steps

For a quickstart, you can browse through the [informal
introduction](http://www.mpa-garching.mpg.de/ift/nifty/start.html) or
dive into NIFTY by running one of the demonstrations, e.g.:

165
    python demos/wiener_filter.py
Jait Dixit's avatar
Jait Dixit committed
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192

Acknowledgement
---------------

Please, acknowledge the use of NIFTY in your publication(s) by using a
phrase such as the following:

> *"Some of the results in this publication have been derived using the
> NIFTY package [Selig et al., 2013]."*

### References

Release Notes
-------------

The NIFTY package is licensed under the
[GPLv3](http://www.gnu.org/licenses/gpl.html) and is distributed
*without any warranty*.

* * * * *

**NIFTY** project homepage:
[](http://www.mpa-garching.mpg.de/ift/nifty/)

[1] Selig et al., "NIFTY - Numerical Information Field Theory - a
versatile Python library for signal inference", [A&A, vol. 554, id.
A26](http://dx.doi.org/10.1051/0004-6361/201321236), 2013;
193
[arXiv:1301.4499](http://www.arxiv.org/abs/1301.4499)