I went to https://eventhorizontelescope.org/array and read about the ten sites listed as part of the EHT, I have a mashed-up screen shot of them below.
I made a little script also shown below with approximate coordinates, and saw that Sgr A* is at a declination of about -29.5 degrees (South). I spun it around the earth, calculated the dot product between each of the sites' position vectors and all normals pointing to Sgr A* as it rotates around the Earth.
I then plotted the elevation angle above the horizon for all ten sites. I was quite surprised!
- Sgr A* is never above the horizon for the Greenland telescope!
- Sgr A* is never simultaneously visible even to all of the remaining nine telescopes
Have I made a mistake? If not, how do these ten sites combine their data to image Sgr A*?
class Site(object):
def __init__(self, name, lat, lon, alt):
self.name = str(name)
self.lat = rads * float(lat)
self.lon = rads * float(lon)
self.alt = km * float(alt)
(clat, slat), (clon, slon) = [[f(x) for f in (np.cos, np.sin)] for x in (self.lat, self.lon)]
self.norm = np.array([clon*clat, slon*clat, slat])
data = (('Northern Extended Millimeter Array', (44.634, 5.908, 2550.)),
('IRAM 30 meter telescope', (37.066, -3.393, 2850.)),
('The Greenland Telescope now near Thule Air Base', (76.531, -68.703, 10.)),
('Combined Array for Research in Millimeter-wave Astronomy CARMA', (37.280, -118.142, 2196.)),
('Kitt Peak National Observatory 12 meter Submillimeter Telescope (SMT)', (1.9583, -111.5967, 2096.)),
('Mt. Graham International Observatory 12 meter ALMA prototye', (32.701, -109.892, 3191.)),
('The Large Millimeter Telescope Alfonso Serrano', (18.985, -97.315, 4600.)),
('ALMA', (-22.971, -67.703, 4800.)),
('Caltech Submillimeter Observatory', (19.823, -155.476, 4140.)),
('South Pole Telescope', (-90.0, 0.0, 2800.)))
# https://eventhorizontelescope.org/array
# https://astronomy.stackexchange.com/questions/26413/math-behind-a-uv-plot-in-interferometry
datadict = dict(data)
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Topos, Loader, EarthSatellite
from mpl_toolkits.mplot3d import Axes3D
halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180
km = 0.001
sites = [Site(a, *b) for a, b in datadict.items()]
Dec = rads * -29.5 # SgrA_star
cDec, sDec = [f(Dec) for f in (np.cos, np.sin)]
th = twopi * np.linspace(0, 1, 100001)[:-1]
cth, sth = [f(th) for f in (np.cos, np.sin)]
zth, oth = np.zeros_like(th), np.ones_like(th)
SgrA_star = np.stack([cDec*cth, cDec*sth, sDec*oth], axis=1)
for site in sites:
site.elev = np.arcsin(np.dot(SgrA_star, site.norm))
if True:
for site in sites:
plt.plot(degs*site.elev)
plt.plot(zth, '-k', linewidth=2)
plt.ylim(-90, 90)
plt.ylabel('elevation (deg)', fontsize=16)
plt.show()