def radec2azel(self, mjd, ra, dec): """ Given RA/Dec and time returns Az/El. Parameters ---------- mjd : float Date in MJD. ra : float Right ascension in radian. dec : float Declination in radian. Returns ---------- az : float Azimuth in radian. el : float Elevation in radian. """ amprms = slalib.sla_mappa(self.epequi, mjd) self.aoprms = slalib.sla_aoppat(mjd, self.aoprms) ra_app, dec_app = slalib.sla_mapqkz(ra, dec, amprms) az, zd, a, b, c = slalib.sla_aopqk(ra_app, dec_app, self.aoprms) el = np.pi / 2 - zd return az, el
def hor2cel(coord, time, site, copy=True): coord = np.array(coord, copy=copy) trepr = time[len(time)/2] info = iers.lookup(trepr) ao = slalib.sla_aoppa(trepr, info.dUT, site.lon*utils.degree, site.lat*utils.degree, site.alt, info.pmx*utils.arcsec, info.pmy*utils.arcsec, site.T, site.P, site.hum, 299792.458/site.freq, site.lapse) am = slalib.sla_mappa(2000.0, trepr) # This involves a transpose operation, which is not optimal pyfsla.aomulti(time, coord.T, ao, am) return coord
def azel2radecpa(self, mjd, az, el): """ Given Az/El and time returns RA/Dec and parallactic angle. This routine does not return a precisely correct parallactic angle. Parameters ---------- mjd : float Date in MJD. az : float Azimuth in radian. el : float Elevation in radian. Returns ---------- ra : float Right ascension in radian. dec : float Declination in radian. pa : float Parallactic angle in radian. """ zd = np.pi / 2 - el amprms = slalib.sla_mappa(self.epequi, mjd) self.aoprms = slalib.sla_aoppat(mjd, self.aoprms) ra_app1, dec_app1 = slalib.sla_oapqk('a', az, zd + 1e-8, self.aoprms) ra1, dec1 = slalib.sla_ampqk(ra_app1, dec_app1, amprms) ra_app2, dec_app2 = slalib.sla_oapqk('a', az, zd - 1e-8, self.aoprms) ra2, dec2 = slalib.sla_ampqk(ra_app2, dec_app2, amprms) pa = slalib.sla_dbear(ra1, dec1, ra2, dec2) ra = 0.5 * (ra1 + ra2) dec = 0.5 * (dec1 + dec2) return ra, dec, pa