Note
Go to the end to download the full example code
Filling factor of various sky grids for the Dorado mission#
First, some imports.
Select a HEALPix resolution for spatial calculations.
hpx = HEALPix(nside=512, frame=ICRS())
Determine the area of the field of view.
fov = mission.dorado().fov
fov_area = len(fov.footprint_healpix(hpx)) * hpx.pixel_area
Compute the filling factor for all sky grid methods.
methods = {
'geodesic(class_="I")': partial(skygrid.geodesic, class_='I'),
'geodesic(class_="II")': partial(skygrid.geodesic, class_='II'),
'geodesic(class_="III")': partial(skygrid.geodesic, class_='III'),
'golden_angle_spiral': skygrid.golden_angle_spiral,
'sinusoidal': skygrid.sinusoidal
}
fig_width, fig_height = plt.rcParams['figure.figsize']
fig, (ax1, ax2) = plt.subplots(
1, 2, figsize=(2 * fig_width, fig_height), sharey=True)
ax1.set_xlabel('Number of tiles')
ax2.set_xlabel('Requested area per tile (deg$^2$)')
ax1.set_ylabel('1 - filling factor')
ax1.set_yscale('log')
areas = np.geomspace(0.5 * fov_area, fov_area).to(u.deg**2)
for method_name, method in methods.items():
number_of_tiles = np.empty(len(areas), dtype=int)
one_minus_fill_factors = np.empty(len(areas), dtype=float)
for i, area in enumerate(areas):
centers = method(area)
rolls = np.asarray([0]) * u.deg
pixels = set()
for more_pixels, in fov.footprint_healpix_grid(hpx, centers, rolls):
pixels |= set(more_pixels)
number_of_tiles[i] = len(centers)
one_minus_fill_factors[i] = 1 - len(pixels) / hpx.npix
ax1.plot(number_of_tiles, one_minus_fill_factors, '.-', label=method_name)
ax2.plot(areas, one_minus_fill_factors, '.-', label=method_name)
ax1.legend()
<matplotlib.legend.Legend object at 0x7fd0551c6f50>
Total running time of the script: (10 minutes 51.276 seconds)