Sky Grid (dorado.scheduling.skygrid)#

Methods for tesselating the sky into survey tiles.

The functions in this module provide a variety of different methods of selecting points on the unit sphere with approximately uniform density per unit area. All of thee functions take one required argument, area, which is the average area per tile. Some (like geodesic()) take additional optional keyword arguments.

Note that in the case of geodesic() and healpix(), the number of tiles that may be returned is constrained to certain values. For these methods, the number of tiles will be the smallest possible number that is greater than or equal to 4 pi / area.

geodesic(area[, base, class_])

Generate a geodesic polyhedron with the fewest vertices >= n.

golden_angle_spiral(area)

Generate a tile grid from a spiral employing the golden angle.

healpix(area)

Generate a grid in HEALPix coordinates.

sinusoidal(area)

Generate a uniform grid on a sinusoidal equal area projection.

Example

>>> from astropy import units as u
>>> from dorado.scheduling import skygrid
>>> points = skygrid.sinusoidal(100 * u.deg**2)
dorado.scheduling.skygrid.geodesic(area, base='icosahedron', class_='I')#

Generate a geodesic polyhedron with the fewest vertices >= n.

Parameters:
  • area (astropy.units.Quantity) – The average area per tile in any Astropy solid angle units: for example, 10 * astropy.units.deg**2 or 0.1 * astropy.units.steradian.

  • base ({'icosahedron', 'octahedron', 'tetrahedron'}) – The base polyhedron of the tesselation.

  • class ({'I', 'II', 'III'}) – The class of the geodesic polyhedron, which constrains the allowed values of the number of points. Class III permits the most freedom.

Returns:

coords – The coordinates of the vertices of the geodesic polyhedron.

Return type:

astropy.coordinates.SkyCoord

Example

from astropy import units as u
from matplotlib import pyplot as plt
import ligo.skymap.plot
import numpy as np

from dorado.scheduling import skygrid

n_vertices_target = 1024
vertices = skygrid.geodesic(4 * np.pi * u.sr / n_vertices_target)
n_vertices = len(vertices)

ax = plt.axes(projection='astro globe', center='0d 25d')
plt.suptitle('Class I')
ax.set_title(f'{n_vertices} vertices (goal was {n_vertices_target})')
ax.plot_coord(vertices, '.')
ax.grid()

(Source code)

../_images/skygrid-2.svg
vertices = skygrid.geodesic(4 * np.pi * u.sr / n_vertices_target,
                            class_='II')
n_vertices = len(vertices)

ax = plt.axes(projection='astro globe', center='0d 25d')
plt.suptitle('Class II')
ax.set_title(f'{n_vertices} vertices (goal was {n_vertices_target})')
ax.plot_coord(vertices, '.')
ax.grid()

(Source code)

../_images/skygrid-3.svg
vertices = skygrid.geodesic(4 * np.pi * u.sr / n_vertices_target,
                                class_='III')
n_vertices = len(vertices)

ax = plt.axes(projection='astro globe', center='0d 25d')
plt.suptitle('Class III')
ax.set_title(f'{n_vertices} vertices (goal was {n_vertices_target})')
ax.plot_coord(vertices, '.')
ax.grid()

(Source code)

../_images/skygrid-4.svg
dorado.scheduling.skygrid.golden_angle_spiral(area)#

Generate a tile grid from a spiral employing the golden angle.

This is a spiral-based spherical packing scheme that was used by GRANDMA during LIGO/Virgo O3 (see doi:10.1093/mnras/staa1846).

Parameters:

area (astropy.units.Quantity) – The average area per tile in any Astropy solid angle units: for example, 10 * astropy.units.deg**2 or 0.1 * astropy.units.steradian.

Returns:

coords – The coordinates of the tiles.

Return type:

astropy.coordinates.SkyCoord

dorado.scheduling.skygrid.healpix(area)#

Generate a grid in HEALPix coordinates.

Parameters:

area (astropy.units.Quantity) – The average area per tile in any Astropy solid angle units: for example, 10 * astropy.units.deg**2 or 0.1 * astropy.units.steradian.

Returns:

coords – The coordinates of the tiles.

Return type:

astropy.coordinates.SkyCoord

dorado.scheduling.skygrid.sinusoidal(area)#

Generate a uniform grid on a sinusoidal equal area projection.

This is similar to what was used for GRANDMA follow-up in LIGO/Virgo Observing Run 3 (O3), but is more efficient at tiling the poles. See doi:10.3847/2041-8213/ab3399.

Parameters:

area (astropy.units.Quantity) – The average area per tile in any Astropy solid angle units: for example, 10 * astropy.units.deg**2 or 0.1 * astropy.units.steradian.

Returns:

coords – The coordinates of the tiles.

Return type:

astropy.coordinates.SkyCoord