README.md 6.64 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

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

Martin Reinecke's avatar
updates  
Martin Reinecke committed
81 82 83 84 85
and switching to the "master" branch:

    cd NIFTy
    git checkout master

Jait Dixit's avatar
Jait Dixit committed
86 87 88 89 90 91 92 93 94
### 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
95
        sudo apt-get install curl git autoconf python-dev python-pip python-numpy
Jait Dixit's avatar
Jait Dixit committed
96

97
-   Install pyHealpix:
Jait Dixit's avatar
Jait Dixit committed
98

Martin Reinecke's avatar
Martin Reinecke committed
99
        git clone https://gitlab.mpcdf.mpg.de/ift/pyHealpix.git
100
        cd pyHealpix
Martin Reinecke's avatar
updates  
Martin Reinecke committed
101
        autoreconf -i && ./configure --prefix=$HOME/.local && make -j4 && make install
Jait Dixit's avatar
Jait Dixit committed
102 103 104 105 106
        cd ..

-   Finally, NIFTy:

        git clone https://gitlab.mpcdf.mpg.de/ift/NIFTy.git
Martin Reinecke's avatar
updates  
Martin Reinecke committed
107 108 109
        cd NIFTy
        git checkout master
        python setup.py install --user
110
        cd ..
Jait Dixit's avatar
Jait Dixit committed
111

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

Martin Reinecke's avatar
updates  
Martin Reinecke committed
114 115 116 117 118 119
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.
120

Jait Dixit's avatar
Jait Dixit committed
121 122
### Installation on OS X 10.11

123
We advise to install the following packages in the order as they appear
Jait Dixit's avatar
Jait Dixit committed
124 125 126 127 128 129
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
130
-   Install numpy:
Jait Dixit's avatar
Jait Dixit committed
131 132 133

        sudo port install py27-numpy

134
-   Install pyHealpix:
Jait Dixit's avatar
Jait Dixit committed
135

Martin Reinecke's avatar
Martin Reinecke committed
136
        git clone https://gitlab.mpcdf.mpg.de/ift/pyHealpix.git
137
        cd pyHealpix
Martin Reinecke's avatar
Martin Reinecke committed
138
        autoreconf -i && ./configure --prefix=`python-config --prefix` && make -j4 && sudo make install
Jait Dixit's avatar
Jait Dixit committed
139 140
        cd ..

Martin Reinecke's avatar
updates  
Martin Reinecke committed
141 142 143 144
    (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
145 146 147
-   Install NIFTy:

        git clone https://gitlab.mpcdf.mpg.de/ift/NIFTy.git
Martin Reinecke's avatar
updates  
Martin Reinecke committed
148 149 150
        cd NIFTy
        git checkout master
        python setup.py install --user
151
        cd ..
Jait Dixit's avatar
Jait Dixit committed
152

Theo Steininger's avatar
Theo Steininger committed
153 154 155 156 157 158
### Running the tests

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

    pip install nose
    pip install parameterized
159 160

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

Theo Steininger's avatar
Theo Steininger committed
163 164 165
    nosetests --exe --cover-html


Jait Dixit's avatar
Jait Dixit committed
166 167 168 169 170 171
### 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.:

172
    python demos/wiener_filter.py
Jait Dixit's avatar
Jait Dixit committed
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

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;
200
[arXiv:1301.4499](http://www.arxiv.org/abs/1301.4499)