Generating random points#

The code provides simple methods to generate uniform random points. These random coordinates can be enhanced to draw samples from an array of observed redshifts or weights, if desired, which allows to directly build a Catalog of random points for correlation measurements.

The simplest methods generates randoms within a rectangular footprint on sky, i.e. in a fixed window of right ascension and declination:

import yaw
from yaw.randoms import BoxRandoms

generator = BoxRandoms(
    ra_min=0.0,
    ra_max=90.0,
    dec_min=0.0,
    dec_max=90.0,
    # redshifts=None,
    # weights=None,
    # seed: int = 12345,
)

cat = yaw.Catalog.from_random(
    "path/to/cache",
    generator,
    num_randoms=10_000_000,
    # patch_centers=None,
    patch_num=64,
    # overwrite=False,
    progress=True,  # shows a progress bar, default: False
)
Example redshift estiamte

Example distribution of randomly generated points from the example above in an equal-area projection.#

The figure above can be generated with the following code:

import numpy as np
from matplotlib import pyplot as plt

# need to iterate over patches and load coordinates manually
coords = yaw.AngularCoordinates.from_coords(
    patch.coords for patch in cat.values()
)

plt.figure(dpi=100)
# histogram with equal area bins in ra/dec
plt.hist2d(coords.ra, np.sin(coords.dec), bins=90)
plt.xlabel(r"$\alpha$")
plt.ylabel(r"$\sin{\delta}$")

If healpy, the python wrapper for HealPix, is installed, random points can also be generated in a HealPix-map. The map can be either interpreted as a binary mask, or as in this example, as a density map, where the map value is the relative probabilty of assigning random points to each pixel.

For illustration purposes we generate a dummy map at the lowest possible map resolution, i.e. an array with 12 pixel values.

import yaw
from yaw.randoms import HealPixRandoms

dummy_map = range(12)  # the simplest possible map

generator = HealPixRandoms(
    pix_values=dummy_map,
    # is_mask = False,
    # redshifts=None,
    # weights=None,
    # seed: int = 12345,
)

cat = yaw.Catalog.from_random(
    "cache",
    generator,
    num_randoms=10_000_000,
    # patch_centers=None,
    patch_num=64,
    overwrite=True,
    progress=True,  # shows a progress bar, default: False
)
Example redshift estiamte

Example distribution of randomly generated points from the example above in an equal-area projection.#

The figure above can be generated with the following code:

import numpy as np
from matplotlib import pyplot as plt

# need to iterate over patches and load coordinates manually
coords = yaw.AngularCoordinates.from_coords(
    patch.coords for patch in cat.values()
)

plt.figure(dpi=100, figsize=(10, 4))
plt.subplot(1, 1, 1, projection="mollweide")  # equal area projection

# we cannot use plt.hist2d directly, so we use a trick to compute a
# histogram with equal area bins in ra/dec
ra_bins = np.linspace(0.0, 2.0 * np.pi, 91)
dec_bins = np.arcsin(np.linspace(-1.0, 1.0, 46))

hist, ra_bins, dec_bins = np.histogram2d(
    coords.ra, coords.dec, bins=(ra_bins, dec_bins)
)
plt.pcolor(ra_bins - np.pi, dec_bins, hist.T)

plt.xlabel(r"$\alpha$")
plt.ylabel(r"$\delta$")