space.py 3.07 KB
Newer Older
1
2
3
4
# This 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.
5
#
6
7
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
8
9
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
11
# You should have received a copy of the GNU General Public License
12
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Theo Steininger's avatar
Theo Steininger committed
13
14
15
16
17
#
# Copyright(C) 2013-2017 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
Marco Selig's avatar
Marco Selig committed
18

19
import abc
Martin Reinecke's avatar
Martin Reinecke committed
20
from ..domain_object import DomainObject
Ultimanet's avatar
Ultimanet committed
21

22

23
class Space(DomainObject):
Martin Reinecke's avatar
Martin Reinecke committed
24
    """The abstract base class for all NIFTy spaces.
25

Martin Reinecke's avatar
Martin Reinecke committed
26
    An instance of a space contains information about the manifold's
27
    geometry and enhances the functionality of DomainObject by methods that
Martin Reinecke's avatar
Martin Reinecke committed
28
    are needed for power spectrum analysis and smoothing.
29
    """
30

31
    def __init__(self):
Martin Reinecke's avatar
Martin Reinecke committed
32
        super(Space, self).__init__()
theos's avatar
theos committed
33

34
35
    @abc.abstractproperty
    def harmonic(self):
Martin Reinecke's avatar
Martin Reinecke committed
36
        """ Returns True iff this space is a harmonic space."""
37
        raise NotImplementedError
38

39
    def get_k_length_array(self):
Martin Reinecke's avatar
Martin Reinecke committed
40
        """The length of the k vector for every pixel.
Martin Reinecke's avatar
Martin Reinecke committed
41
        This method is only implemented for harmonic spaces.
Theo Steininger's avatar
Theo Steininger committed
42

43
44
        Returns
        -------
45
        Field
Martin Reinecke's avatar
Martin Reinecke committed
46
            An array containing the  k vector lengths
47
        """
Martin Reinecke's avatar
Martin Reinecke committed
48
        raise NotImplementedError
49

50
    def get_unique_k_lengths(self):
Martin Reinecke's avatar
Martin Reinecke committed
51
52
53
54
        """ Returns an array of floats containing the unique k vector lengths
        for this space.
        This method is only implemented for harmonic spaces.
        """
Martin Reinecke's avatar
Martin Reinecke committed
55
56
        raise NotImplementedError

57
    def get_fft_smoothing_kernel_function(self, sigma):
Martin Reinecke's avatar
Martin Reinecke committed
58
        """This method returns a smoothing kernel function.
Theo Steininger's avatar
Theo Steininger committed
59
60
61
62
63
64
65

        This method, which is only implemented for harmonic spaces, helps
        smoothing fields that live in a position space that has this space as
        its harmonic space. The returned function multiplies field values of a
        field with a zero centered Gaussian which corresponds to a convolution
        with a Gaussian kernel and sigma standard deviation in position space.

66
67
        Parameters
        ----------
Theo Steininger's avatar
Theo Steininger committed
68
69
70
71
72
73
74
75
        sigma : float
            A real number representing a physical scale on which the smoothing
            takes place. The smoothing is defined with respect to the real
            physical field and points that are closer together than one sigma
            are blurred together. Mathematically sigma is the standard
            deviation of a convolution with a normalized, zero-centered
            Gaussian that takes place in position space.

76
77
        Returns
        -------
Theo Steininger's avatar
Theo Steininger committed
78
79
80
        function (array-like -> array-like)
            A smoothing operation that multiplies values with a Gaussian
            kernel.
81
        """
Martin Reinecke's avatar
Martin Reinecke committed
82
        raise NotImplementedError