In contrast to unstructured domains, these domains have an assigned geometry.

In contrast to unstructured domains, these domains have an assigned geometry.

NIFTy requires them to provide the volume elements of their grid cells.

NIFTy requires them to provide the volume elements of their grid cells.

The additional methods are specified in the abstract class

The additional methods are specified in the abstract class

...

@@ -81,15 +87,17 @@ The additional methods are specified in the abstract class

...

@@ -81,15 +87,17 @@ The additional methods are specified in the abstract class

NIFTy comes with several concrete subclasses of :class:`StructuredDomain`:

NIFTy comes with several concrete subclasses of :class:`StructuredDomain`:

- :class:`RGSpace` represents a regular Cartesian grid with an arbitrary

.. currentmodule:: nifty5.domains

- :class:`rg_space.RGSpace` represents a regular Cartesian grid with an arbitrary

number of dimensions, which is supposed to be periodic in each dimension.

number of dimensions, which is supposed to be periodic in each dimension.

- :class:`HPSpace` and :class:`GLSpace` describe pixelisations of the

- :class:`hp_space.HPSpace` and :class:`gl_space.GLSpace` describe pixelisations of the

2-sphere; their counterpart in harmonic space is :class:`LMSpace`, which

2-sphere; their counterpart in harmonic space is :class:`lm_space.LMSpace`, which

contains spherical harmonic coefficients.

contains spherical harmonic coefficients.

- :class:`PowerSpace` is used to describe one-dimensional power spectra.

- :class:`power_space.PowerSpace` is used to describe one-dimensional power spectra.

Among these, :class:`RGSpace` can be harmonic or not (depending on constructor arguments), :class:`GLSpace`, :class:`HPSpace`, and :class:`PowerSpace` are

Among these, :class:`rg_space.RGSpace` can be harmonic or not (depending on constructor arguments), :class:`gl_space.GLSpace`, :class:`hp_space.HPSpace`, and :class:`power_space.PowerSpace` are

pure position domains (i.e. nonharmonic), and :class:`LMSpace` is always

pure position domains (i.e. nonharmonic), and :class:`lm_space.LMSpace` is always

harmonic.

harmonic.

...

@@ -281,6 +289,62 @@ The properties :attr:`~LinearOperator.adjoint` and

...

@@ -281,6 +289,62 @@ The properties :attr:`~LinearOperator.adjoint` and

were the original operator's adjoint or inverse, respectively.

were the original operator's adjoint or inverse, respectively.

Operators

=========

Operator classes (represented by NIFTy5's abstract :class:`Operator` class) are used to construct

the equations of a specific inference problem.

Most operators are defined via a position, which is a :class:`MultiField` object,

their value at this position, which is again a :class:`MultiField` object and a Jacobian derivative,

which is a :class:`LinearOperator` and is needed for the minimization procedure.

Using the existing basic operator classes one can construct more complicated operators, as

NIFTy allows for easy and self-consinstent combination via point-wise multiplication,

addition and subtraction. The operator resulting from these operations then automatically

contains the correct Jacobians, positions and values.

Notably, :class:`Constant` and :class:`Variable` allow for an easy way to turn

inference of specific quantities on and off.

The basic operator classes also allow for more complex operations on operators such as

the application of :class:`LinearOperators` or local non-linearities.

As an example one may consider the following combination of ``x``, which is an operator of type

:class:`Variable` and ``y``, which is an operator of type :class:`Constant`::

z = x*x + y

``z`` will then be an operator with the following properties::

z.value = x.value*x.value + y.value

z.position = Union(x.position, y.position)

z.jacobian = 2*makeOp(x.value)

Basic operators

---------------

# FIXME All this is outdated!

Basic operator classes provided by NIFTy are

- :class:`Constant` contains a constant value and has a zero valued Jacobian.

Like other operators, it has a position, but its value does not depend on it.

- :class:`Variable` returns the position as its value, its derivative is one.

- :class:`LinearModel` applies a :class:`LinearOperator` on the model.

- :class:`LocalModel` applies a non-linearity locally on the model.

value and Jacobian are combined into corresponding :class:`MultiFields` and operators.

Advanced operators

------------------

NIFTy also provides a library of more sophisticated operators which are used for more

specific inference problems. Currently these are:

- :class:`AmplitudeOperator`, which returns a smooth power spectrum.

- :class:`InverseGammaOperator`, which models point sources which follow a inverse gamma distribution.

- :class:`CorrelatedField`, which models a diffuse log-normal field. It takes an amplitude operator

to specify the correlation structure of the field.

@@ -179,23 +180,22 @@ NIFTy takes advantage of this formulation in several ways:

...

@@ -179,23 +180,22 @@ NIFTy takes advantage of this formulation in several ways:

The reconstruction of a non-Gaussian signal with unknown covarinance from a non-trivial (tomographic) response is demonstrated in demos/getting_started_3.py. Here, the uncertainty of the field and the power spectrum of its generating process are probed via posterior samples provided by the MGVI algorithm.

The reconstruction of a non-Gaussian signal with unknown covarinance from a non-trivial (tomographic) response is demonstrated in demos/getting_started_3.py. Here, the uncertainty of the field and the power spectrum of its generating process are probed via posterior samples provided by the MGVI algorithm.