Sanity check:

For a grid of observatories at different positions on Earth, and for a list of targets near both celestial poles and near the celestial aquator, verify which targets will rise and set.


In [12]:
%matplotlib inline
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

from astropy.coordinates import (get_sun, EarthLocation, Latitude, 
                                 Longitude, SkyCoord)
import astropy.units as u
from astropy.time import Time
import numpy as np
import matplotlib.pyplot as plt
import astroplan
reload(astroplan)
from astroplan import Observer, FixedTarget

observers = []
N_observers = 8
longitudes = np.linspace(0, 360, 8)
latitudes = np.linspace(-85, 85, 8)
time = Time('2000-06-21 00:00:00')

for longitude, latitude in zip(longitudes, latitudes):
    observers.append(Observer(location=EarthLocation.from_geodetic(longitude,
                                                                   latitude, 0)))
# Targets chosen to span a broad range of RA and Dec, in both hemispheres
# In order from highest to lowest dec
target_names = ['Polaris', 'eta Vir', 'tet Aql', 'tau Oct']
targets = [FixedTarget.from_name(name) for name in target_names]

In [13]:
rise_times = np.zeros((len(observers), len(targets)))
set_times = np.zeros((len(observers), len(targets)))
transit_times = np.zeros((len(observers), len(targets)))

for i, obs in enumerate(observers):
    for j, target in enumerate(targets):
        try:
            rise_times[i, j] = obs.calc_rise(time, target).jd
        except ValueError:
            pass
        try:
            transit_times[i, j] = obs.calc_transit(time, target).jd
        except ValueError:
            pass
        try:
            set_times[i, j] = obs.calc_set(time, target).jd
        except ValueError:
            pass

In [14]:
def printtable(matrix, header=''):
    print(header)
    print('(Lon, Lat)\t'+'\t\t'.join(target_names))
    print(5*'-------\t\t')
    for i, longitude, latitude in zip(range(len(longitudes)), longitudes, latitudes):
        print('({:.1f}, {:.1f})\t{}'.format(longitude, latitude, 
                                             '\t\t'.join(map(str, matrix[i,:]))))
printtable(rise_times != 0, 'Does the target rise?')
printtable(set_times != 0, '\nDoes the target set?')
printtable(transit_times != 0, '\nDoes the target transit?')


Does the target rise?
(Lon, Lat)	Polaris		eta Vir		tet Aql		tau Oct
-------		-------		-------		-------		-------		
(0.0, -85.0)	False		True		True		False
(51.4, -60.7)	False		True		True		False
(102.9, -36.4)	False		True		True		False
(154.3, -12.1)	False		True		True		False
(205.7, 12.1)	False		True		True		False
(257.1, 36.4)	False		True		True		False
(308.6, 60.7)	False		True		True		False
(360.0, 85.0)	False		True		True		False

Does the target set?
(Lon, Lat)	Polaris		eta Vir		tet Aql		tau Oct
-------		-------		-------		-------		-------		
(0.0, -85.0)	False		True		True		False
(51.4, -60.7)	False		True		True		False
(102.9, -36.4)	False		True		True		False
(154.3, -12.1)	False		True		True		False
(205.7, 12.1)	False		True		True		False
(257.1, 36.4)	False		True		True		False
(308.6, 60.7)	False		True		True		False
(360.0, 85.0)	False		True		True		False

Does the target transit?
(Lon, Lat)	Polaris		eta Vir		tet Aql		tau Oct
-------		-------		-------		-------		-------		
(0.0, -85.0)	True		True		True		True
(51.4, -60.7)	True		True		True		True
(102.9, -36.4)	True		True		True		True
(154.3, -12.1)	True		True		True		True
(205.7, 12.1)	True		True		True		True
(257.1, 36.4)	True		True		True		True
(308.6, 60.7)	True		True		True		True
(360.0, 85.0)	True		True		True		True

In [ ]: