def testReadOnlyMemberAccess(self): """TSTATE.x => can't change read-only members of TSTATE.""" tstate = tpm.TSTATE() def f(tstate, x, v): setattr(tstate, x, v) for i in ['tai', 'gmst', 'obliquity', 'refa', 'eh']: self.assertRaises(AttributeError, f, tstate, i, 0.0)
def testSetGetInitValues(self): """TSTATE.init(**vals) => Set values during init.""" # See pytpm/tests/c_tests/tstate_init_test.c. t = dict(utc=0.0, delta_at=0.0, delta_ut=0.0, lon=36.756, lat=-23.4, alt=234.67, P=2026.5, T=300.0, H=0.3, wavelength=0.600) tstate = tpm.TSTATE(**t) self.check_ind(tstate, t) t = dict(tai=0.0, tdt=0.0, tdb=0.0, obliquity=0.0, nut_lon=0.0, nut_obl=0.0, ut1=0.0, gmst=0.0, gast=0.0, last=0.0, refa=0.000282646376, refap=12, refb=-0.000000324825, refbp=12) self.check_dep_scalars(tstate, t) t = dict(XX=1.0, XY=0.0, XZ=0.0, YX=0.0, YY=1.0, YZ=0.0, ZX=0.0, ZY=0.0, ZZ=1.0) self.checkm3(tstate.nm, t) pm = tstate.pm self.checkm3(pm.pp, t) self.checkm3(pm.vv, t) t['XX'] = 0.0 t['YY'] = 0.0 t['ZZ'] = 0.0 self.checkm3(pm.pv, t) self.checkm3(pm.vp, t) t = dict(x=0.0, y=0.0, z=0.0, xdot=0.0, ydot=0.0, zdot=0.0) self.checkv6(tstate.eb, t)
def get_tstate(): tstate = tpm.TSTATE() tpm.tpm_data(tstate, tpm.TPM_INIT) tstate.utc = tpm.J2000 tstate.lon = tpm.d2r(-111.598333) tstate.lat = tpm.d2r(31.956389) tstate.alt = 2093.093 tstate.delta_at = tpm.delta_AT(tstate.utc) tstate.delta_ut = tpm.delta_UT(tstate.utc) tpm.tpm_data(tstate, tpm.TPM_ALL) return tstate
def testCreate(self): """TSTATE.init => creates TSTATE with default values.""" tstate = tpm.TSTATE() # Cant't check for utc and delta_at. t = dict(delta_ut=0.0, lon=0.0, lat=0.0, alt=0.0, xpole=0.0, ypole=0.0, P=1013.25, T=273.15, wavelength=0.550) self.check_ind(tstate, t)
zd_diff = np.abs(zd[indx] - zd_sla[indx]) * 3600.0 # Az, El to HA and Dec. v620 = convert.convertv6(v619, s1=19, s2=20, utc=utc) cat20 = convert.v62cat(v620, tpm.CJ) cat20 = cat2array(cat20) ha = np.degrees(cat20['alpha']) dec = np.degrees(cat20['delta']) # Difference in HA and Dec, using TPM and SLALIB. ha_diff = np.abs(ha[indx] - ha_sla[indx]) * 3600.0 dec_diff = np.abs(dec[indx] - dec_sla[indx]) * 3600.0 # Find RA = LAST - HA. tstate = tpm.TSTATE() tpm.tpm_data(tstate, tpm.TPM_INIT) tstate.utc = utc tstate.delta_ut = tpm.delta_UT(utc) tstate.delta_at = tpm.delta_AT(utc) tstate.lon = tpm.d2r(-111.598333) tstate.lat = tpm.d2r(31.956389) tpm.tpm_data(tstate, tpm.TPM_ALL) last = tpm.r2d(tstate.last) ra = last - ha # Have to normalize to 0 - 360.0. ra = np.array([i if i > 0 else i + 360.0 for i in ra]) ra_diff = np.abs(ra[indx] - ra_sla[indx]) * 3600.0 print("Comparison with SLALIB aop using HIPPARCOS data.") fs = "{0} {1}\n" + \
def testALL(self): """tpm_data(TSTATE, TPM_ALL) => calculate all quantities.""" tstate = tpm.TSTATE() tpm.tpm_data(tstate, tpm.TPM_INIT) tstate = self.setdefaults(tstate) tpm.tpm_data(tstate, tpm.TPM_ALL) self.check_ind(tstate, default_values('t_ind')) self.check_dep_scalars(tstate, dict( tai=2451545.679293770343, taip=12, tdt=2451545.679666270502, tdtp=12, tdb=2451545.679666270036, tdbp=12, obliquity=0.409092799999, obliquityp=12, nut_lon=-0.000067440875, nut_lonp=12, nut_obl=-0.000028061065, nut_oblp=12, ut1=2451545.678963696584, ut1p=12, gmst=2.889510699245, gmstp=12, gast=2.889448823451, gastp=12, last=4.388451352684, lastp=12, refa=0.000292752467, refap=11, refb=-0.000000308573, refbp=11 )) t_m3 = dict( XX= 9.999999977258641e-01, XXp=12, XY=6.187579351812524e-05, XYp=12, XZ=2.682643933803953e-05, XZp=12, YX=-6.187654627222567e-05, YXp=12, YY=9.999999976919580e-01, YYp=12, YZ=2.806023517260188e-05, YZp=12, ZX=-2.682470302680538e-05, ZXp=12, ZY=-2.806189503626471e-05, ZYp=12, ZZ=9.999999992464826e-01, ZZp=12 ) self.checkm3(tstate.nm, t_m3) self.checkm3(tstate.pm.pp, dict( XX=9.999999999998971e-01, XXp=12, XY=-4.161124735358035e-07, XYp=12, XZ=-1.808195760693911e-07, XZp=12, YX=4.161124735358035e-07, YXp=12, YY=9.999999999999134e-01, YYp=12, YZ=-3.762064065129431e-14, YZp=12, ZX=1.808195760693911e-07, ZXp=12, ZY=-3.762064041063928e-14, ZYp=12, ZZ=9.999999999999837e-01, ZZp=12 )) self.checkm3(tstate.pm.vv,dict( XX=9.999999999998971e-01, XXp=12, XY=-4.161124735358035e-07, XYp=12, XZ=-1.808195760693911e-07, XZp=12, YX=4.161124735358035e-07, YXp=12, YY=9.999999999999134e-01, YYp=12, YZ=-3.762064065129431e-14, YZp=12, ZX=1.808195760693911e-07, ZXp=12, ZY=-3.762064041063928e-14, ZYp=12, ZZ=9.999999999999837e-01, ZZp=12 )) t_m3 = default_values('t_m3') t_m3['XX'] = 0.0 t_m3['YY'] = 0.0 t_m3['ZZ'] = 0.0 self.checkm3(tstate.pm.pv, t_m3) self.checkm3(tstate.pm.vp, t_m3) self.checkv6(tstate.eb, dict( x=-1.959527204776065e-01, xp=12, y=8.827521071100740e-01, yp=12, z=3.829394946400003e-01, zp=12, xdot=-1.716431607228530e-02, xdotp=12, ydot=-3.093231817130565e-03, ydotp=12, zdot=-1.340979212829042e-03, zdotp=12 )) self.checkv6(tstate.eh, dict( xdot=-1.716969479680703e-02, xdotp=12, ydot=-3.086441747487442e-03, ydotp=12, zdot=-1.337936065008866e-03, zdotp=12, x=-1.888170693058779e-01, xp=12, y=8.853911600516829e-01, yp=12, z=3.838612151173417e-01, zp=12 )) self.checkv6(tstate.obs_m, dict( x=2.625603380878096e-06, xp=12, y=3.650859582053096e-05, yp=12, z=2.181688492029034e-05, zp=12, xdot=-2.300183002664428e-04, xdotp=12, ydot=1.654231868604970e-05, ydotp=12, zdot=0.000000000000000e+00, zdotp=12 )) self.checkv6(tstate.obs_t, dict( x=2.625603380878096e-06, xp=12, y=3.650859582053096e-05, yp=12, z=2.181688492029034e-05, zp=12, xdot=-2.300183002664428e-04, xdotp=12, ydot=1.654231868604970e-05, ydotp=12, zdot=0.000000000000000e+00, zdotp=12 )) self.checkv6(tstate.obs_s, dict( x=-1.164921531873317e-05, xp=12, y=-3.470047800709317e-05, yp=12, z=2.181560079536653e-05, zp=12, xdot=2.186226002419965e-04, xdotp=12, ydot=-7.339090825315956e-05, ydotp=12, zdot=3.765470488651664e-09, zdotp=12 ))
def testTPM(self): """tpm.tpm() => coordinate conversion.""" # M100 FK5 J2000 from SIMBAD. # See pytpm/tests/c_tests/test_conversion.c. results = [ dict(ra_dd=-175.00, ra_mm=43.0, ra_ss=43.4850, de_dd=15.00, de_mm=49.00, de_ss=20.5700), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=42.3616, de_dd=15.00, de_mm=49.00, de_ss=20.4480), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=43.4850, de_dd=15.00, de_mm=49.00, de_ss=20.5700), dict(ra_dd=178.00, ra_mm=46.00, ra_ss=57.2326, de_dd=16.00, de_mm=45.00, de_ss=34.9209), dict(ra_dd=-89.00, ra_mm=8.00, ra_ss=10.1024, de_dd=76.00, de_mm=53.00, de_ss=55.9283), dict(ra_dd=-175.00, ra_mm=5.00, ra_ss=44.0262, de_dd=16.00, de_mm=5.00, de_ss=58.0246 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=43.4850, de_dd=15.00, de_mm=49.00, de_ss=20.5700 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=43.4852, de_dd=15.00, de_mm=49.00, de_ss=20.5699 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=43.4819, de_dd=15.00, de_mm=49.00, de_ss=20.5712 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=44.9349, de_dd=15.00, de_mm=49.00, de_ss=13.4744 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=44.9350, de_dd=15.00, de_mm=49.00, de_ss=13.4743 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=30.6891, de_dd=15.00, de_mm=49.00, de_ss=19.5611 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=43.4852, de_dd=15.00, de_mm=49.00, de_ss=20.5699 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=43.4819, de_dd=15.00, de_mm=49.00, de_ss=20.5712 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=45.2053, de_dd=15.00, de_mm=49.00, de_ss=13.4529 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=45.2054, de_dd=15.00, de_mm=49.00, de_ss=13.4528 ), dict(ra_dd=-175.00, ra_mm=43.00, ra_ss=30.9595, de_dd=15.00, de_mm=49.00, de_ss=19.5396 ), dict(ra_dd=-17.00, ra_mm=8.00, ra_ss=52.8721, de_dd=15.00, de_mm=49.00, de_ss=19.5396 ), dict(ra_dd=132.00, ra_mm=32.00, ra_ss=57.5676, de_dd=67.00, de_mm=45.00, de_ss=9.6836 ), dict(ra_dd=132.00, ra_mm=32.00, ra_ss=57.5676, de_dd=67.00, de_mm=45.00, de_ss=34.3714 ), dict(ra_dd=-17.00, ra_mm=9.00, ra_ss=9.5430, de_dd=15.00, de_mm=49.00, de_ss=38.3077 ), dict(ra_dd=-17.00, ra_mm=14.00, ra_ss=6.8699, de_dd=-15.00, de_mm=10.00, de_ss=13.0062 ) ] ra = tpm.h2r(12+22/60.0+54.899/3600.0) de = tpm.d2r(15+49/60.0+20.57/3600.0) ep = tpm.J2000 eq = tpm.J2000 s1 = tpm.TPM_S06 s2 = tpm.TPM_S00 tstate = tpm.TSTATE() pvec = tpm.PVEC() for i in range(tpm.N_TPM_STATES): tpm.tpm_data(tstate, tpm.TPM_INIT) tstate.utc = tpm.J2000 tstate.lon = tpm.d2r(-111.598333) tstate.lat = tpm.d2r(31.956389) tstate.alt = 2093.093 tstate.delta_ut = tpm.delta_UT(tstate.utc) tpm.tpm_data(tstate, tpm.TPM_ALL) v6 = tpm.V6S() v6.r = 1e9 v6.alpha = ra v6.delta = de pvec[s1] = v6.s2c() s2 = i tpm.tpm(pvec, s1, s2, ep, eq, tstate) v6 = pvec[s2].c2s() ra1 = v6.alpha de1 = v6.delta ra_dms = tpm.DMS(r=ra1) de_dms = tpm.DMS(r=de1) ra_dms.normalize() de_dms.normalize() self.assertAlmostEqual(ra_dms.dd, results[i]['ra_dd'], 4) self.assertAlmostEqual(ra_dms.mm, results[i]['ra_mm'], 4) self.assertAlmostEqual(ra_dms.ss, results[i]['ra_ss'], 4) self.assertAlmostEqual(de_dms.dd, results[i]['de_dd'], 4) self.assertAlmostEqual(de_dms.mm, results[i]['de_mm'], 4) self.assertAlmostEqual(de_dms.ss, results[i]['de_ss'], 4)
def test_slalib_hip_fk52obs(self): """convert(x, s1=6, s2=19) (+ s2=20) + PM => SLALIB sla_aop HIP.""" tab = get_sla("slalib_hip_aop.txt") az_sla = [] zd_sla = [] ha_sla = [] dec_sla = [] ra_sla = [] for i in tab: # Convert longitude values to 0 - 360 az_sla.append(i[0] if i[0] >= 0 else i[0] + 360.0) zd_sla.append(i[1]) ha_sla.append(i[2] if i[2] >= 0 else i[2] + 360.0) dec_sla.append(i[3]) ra_sla.append(i[4] if i[4] >= 0 else i[4] + 360.0) v6l = [] for r, d, pa, pd, px in zip(self.hip_tab['raj2'], self.hip_tab['decj2'], self.hip_tab['pma'], self.hip_tab['pmd'], self.hip_tab['px']): r = tpm.d2r(r) d = tpm.d2r(d) # Milli-arcsec / Jul. yr to arcsec per Jul. century. pma = pa / math.cos(d) / 1000.0 * 100.0 pmd = pd / 1000.0 * 100.0 px /= 1000.0 # mili-arcsec to arc-sec. v6 = tpm.cat2v6(r, d, pma, pmd, px, 0.0, tpm.CJ) v6l.append(v6) utc = tpm.gcal2j(2010, 1, 1) - 0.5 # midnight tt = tpm.utc2tdb(utc) # Convert to Az-EL. v6o = convert.proper_motion(v6l, tt, tpm.J2000) v6o = convert.convertv6(v6o, s1=6, s2=19, utc=utc) cat = (tpm.v62cat(v, tpm.CJ) for v in v6o) az = [] zd = [] for i in cat: az.append(tpm.r2d(i['alpha'])) zd.append(90.0 - tpm.r2d(i['delta'])) # Convert Az-El to HA-Dec. v6o = convert.convertv6(v6o, s1=19, s2=20, utc=utc) cat = (tpm.v62cat(v, tpm.CJ) for v in v6o) # Find LAST. tstate = tpm.TSTATE() tpm.tpm_data(tstate, tpm.TPM_INIT) tstate.utc = utc tstate.delta_ut = tpm.delta_UT(utc) tstate.delta_at = tpm.delta_AT(utc) tstate.lon = tpm.d2r(-111.598333) tstate.lat = tpm.d2r(31.956389) tpm.tpm_data(tstate, tpm.TPM_ALL) last = tpm.r2d(tstate.last) ha = [] dec = [] ra = [] for i in cat: ha.append(tpm.r2d(i['alpha'])) dec.append(tpm.r2d(i['delta'])) # RA = LAST - HA and convert to 0 - 360. x = last - tpm.r2d(i['alpha']) ra.append(x if x >= 0 else x + 360.0) for i in range(len(az)): # Test only the coordinates with ZD < 75.0. if zd[i] < 75.0: self.assertTrue(abs(az[i] - az_sla[i]) * 3600.0 <= 0.25) self.assertTrue(abs(zd[i] - zd_sla[i]) * 3600.0 <= 0.04) self.assertTrue(abs(ha[i] - ha_sla[i]) * 3600.0 <= 0.28) self.assertTrue(abs(dec[i] - dec_sla[i]) * 3600.0 <= 0.04) self.assertTrue(abs(ra[i] - ra_sla[i]) * 3600.0 <= 0.33)