# pynkowski.data.utils

View Source

      1import numpy as np
      2import healpy as hp
      3
      4
      5
      6def get_theta(nside):
      7    """Define a HEALPix map with the value of θ in each pixel at the input `nside`
      8
      9    Parameters
     10    ----------
     11    nside : int
     12        The `nside` of the map
     13
     14    Returns
     15    -------
     16    theta : np.array
     17        A healpix map with the value of theta in each pixel, in radians.
     18
     19    """
     20    theta, _ = hp.pix2ang(nside, np.arange(12 * nside ** 2))
     21    return np.pi/2. - theta
     22
     23def derivatives(mapp, lmax=None, gradient=False, **kwargs):
     24    """Find the derivatives d_theta, d_phi of a Healpix map. It uses the healpy alm2map_der1 function.
     25
     26    Parameters
     27    ----------
     28    mapp : np.array
     29        The Healpix map to find its derivatives.
     30
     31    lmax : int, optional
     32        Maximum multipole to get the alm and the derivatives. It can create numerical errors if it is too high. Default: 3*nside-1.
     33
     34    gradient : bool, optional
     35        If True, return the covariant derivatives. If False, return the partial derivatives. Default: False.
     36
     37    **kwargs :
     38        Extra keywords to pass to the map2alm function.
     39
     40    Returns
     41    -------
     42    d_theta : np.array
     43        A healpix map with the derivative with respect to theta.
     44
     45    d_phi : np.array
     46        A healpix map with the derivatives with respect to phi, without normalizing.
     47
     48    """
     49    nside = hp.get_nside(mapp)
     50    if lmax is None:
     51        lmax = 3 * nside - 1
     52
     53    alm = hp.map2alm(mapp, lmax=lmax, **kwargs)
     54    [_, d_theta, d_phiosin] = hp.alm2map_der1(alm, nside, lmax=lmax)
     55    d_theta = -d_theta
     56
     57    if gradient:
     58        return (d_theta, d_phiosin)
     59
     60    theta = get_theta(nside)
     61
     62    d_phi = d_phiosin * np.cos(theta)
     63    return (d_theta, d_phi)
     64
     65
     66
     67def second_derivatives(d_theta, d_phi, lmax=None, **kwargs):
     68    """Find the Second derivatives for every pixel of a Healpix map given the first partial derivatives.
     69
     70    Parameters
     71    ----------
     72    d_theta : np.array
     73        The partial theta derivative of the Healpix map.
     74
     75    d_phi : np.array
     76        The partial phi derivative of the Healpix map.
     77
     78    lmax : int, optional
     79        Maximum multipole to get the alm and the derivatives. It can create numerical errors if it is too high. Default: 3*nside-1.
     80
     81    Returns
     82    -------
     83    d_thetatheta : np.array
     84        A Healpix map of the second partial derivative wrt theta.
     85
     86    d_phiphi : np.array
     87        A Healpix map of the second partial derivative wrt phi.
     88
     89    d_phitheta : np.array
     90        A Healpix map of the second partial derivative wrt theta and phi.
     91
     92    """
     93    nside = hp.get_nside(d_theta)
     94
     95    theta = get_theta(nside)
     96
     97    if lmax is None:
     98        lmax = 3 * nside - 1
     99
    100    d_phitheta, d_phiphi = derivatives(d_phi, lmax=lmax, **kwargs)
    101
    102    alm_theta = hp.map2alm(d_theta, lmax=lmax, **kwargs)
    103    [_, d_thetatheta, _] = hp.alm2map_der1(alm_theta, nside, lmax=lmax)
    104    d_thetatheta = -d_thetatheta
    105
    106
    107    return (d_thetatheta, d_phiphi, d_phitheta)
    108
    109
    110__docformat__ = "numpy"

def get_theta(nside) View Source

     7def get_theta(nside):
     8    """Define a HEALPix map with the value of θ in each pixel at the input `nside`
     9
    10    Parameters
    11    ----------
    12    nside : int
    13        The `nside` of the map
    14
    15    Returns
    16    -------
    17    theta : np.array
    18        A healpix map with the value of theta in each pixel, in radians.
    19
    20    """
    21    theta, _ = hp.pix2ang(nside, np.arange(12 * nside ** 2))
    22    return np.pi/2. - theta

Define a HEALPix map with the value of θ in each pixel at the input `nside`

###### Parameters

- nside (int): The `nside` of the map

###### Returns

- theta (np.array): A healpix map with the value of theta in each pixel, in radians.

def derivatives(mapp, lmax=None, gradient=False, **kwargs) View Source

    24def derivatives(mapp, lmax=None, gradient=False, **kwargs):
    25    """Find the derivatives d_theta, d_phi of a Healpix map. It uses the healpy alm2map_der1 function.
    26
    27    Parameters
    28    ----------
    29    mapp : np.array
    30        The Healpix map to find its derivatives.
    31
    32    lmax : int, optional
    33        Maximum multipole to get the alm and the derivatives. It can create numerical errors if it is too high. Default: 3*nside-1.
    34
    35    gradient : bool, optional
    36        If True, return the covariant derivatives. If False, return the partial derivatives. Default: False.
    37
    38    **kwargs :
    39        Extra keywords to pass to the map2alm function.
    40
    41    Returns
    42    -------
    43    d_theta : np.array
    44        A healpix map with the derivative with respect to theta.
    45
    46    d_phi : np.array
    47        A healpix map with the derivatives with respect to phi, without normalizing.
    48
    49    """
    50    nside = hp.get_nside(mapp)
    51    if lmax is None:
    52        lmax = 3 * nside - 1
    53
    54    alm = hp.map2alm(mapp, lmax=lmax, **kwargs)
    55    [_, d_theta, d_phiosin] = hp.alm2map_der1(alm, nside, lmax=lmax)
    56    d_theta = -d_theta
    57
    58    if gradient:
    59        return (d_theta, d_phiosin)
    60
    61    theta = get_theta(nside)
    62
    63    d_phi = d_phiosin * np.cos(theta)
    64    return (d_theta, d_phi)

Find the derivatives d_theta, d_phi of a Healpix map. It uses the healpy alm2map_der1 function.

###### Parameters

- mapp (np.array): The Healpix map to find its derivatives.
- lmax (int, optional): Maximum multipole to get the alm and the derivatives. It can create numerical errors if it is too high. Default: 3*nside-1.
- gradient (bool, optional): If True, return the covariant derivatives. If False, return the partial derivatives. Default: False.
- **kwargs :: Extra keywords to pass to the map2alm function.

###### Returns

- d_theta (np.array): A healpix map with the derivative with respect to theta.
- d_phi (np.array): A healpix map with the derivatives with respect to phi, without normalizing.

def second_derivatives(d_theta, d_phi, lmax=None, **kwargs) View Source

     68def second_derivatives(d_theta, d_phi, lmax=None, **kwargs):
     69    """Find the Second derivatives for every pixel of a Healpix map given the first partial derivatives.
     70
     71    Parameters
     72    ----------
     73    d_theta : np.array
     74        The partial theta derivative of the Healpix map.
     75
     76    d_phi : np.array
     77        The partial phi derivative of the Healpix map.
     78
     79    lmax : int, optional
     80        Maximum multipole to get the alm and the derivatives. It can create numerical errors if it is too high. Default: 3*nside-1.
     81
     82    Returns
     83    -------
     84    d_thetatheta : np.array
     85        A Healpix map of the second partial derivative wrt theta.
     86
     87    d_phiphi : np.array
     88        A Healpix map of the second partial derivative wrt phi.
     89
     90    d_phitheta : np.array
     91        A Healpix map of the second partial derivative wrt theta and phi.
     92
     93    """
     94    nside = hp.get_nside(d_theta)
     95
     96    theta = get_theta(nside)
     97
     98    if lmax is None:
     99        lmax = 3 * nside - 1
    100
    101    d_phitheta, d_phiphi = derivatives(d_phi, lmax=lmax, **kwargs)
    102
    103    alm_theta = hp.map2alm(d_theta, lmax=lmax, **kwargs)
    104    [_, d_thetatheta, _] = hp.alm2map_der1(alm_theta, nside, lmax=lmax)
    105    d_thetatheta = -d_thetatheta
    106
    107
    108    return (d_thetatheta, d_phiphi, d_phitheta)

Find the Second derivatives for every pixel of a Healpix map given the first partial derivatives.

###### Parameters

- d_theta (np.array): The partial theta derivative of the Healpix map.
- d_phi (np.array): The partial phi derivative of the Healpix map.
- lmax (int, optional): Maximum multipole to get the alm and the derivatives. It can create numerical errors if it is too high. Default: 3*nside-1.

###### Returns

- d_thetatheta (np.array): A Healpix map of the second partial derivative wrt theta.
- d_phiphi (np.array): A Healpix map of the second partial derivative wrt phi.
- d_phitheta (np.array): A Healpix map of the second partial derivative wrt theta and phi.