def testAddition(self): """HMS.__add__ => HMS + HMS.""" hms1 = tpm.HMS() hms2 = tpm.HMS() hms1.hh = 1.1 hms1.mm = 1.2 hms1.ss = 1.3 hms2.hh = 2.4 hms2.mm = 2.5 hms2.ss = 2.6 hms = hms1 + hms2 self.assertAlmostEqual(hms.hh, hms1.hh + hms2.hh) self.assertAlmostEqual(hms.mm, hms1.mm + hms2.mm) self.assertAlmostEqual(hms.ss, hms1.ss + hms2.ss)
def testSubtraction(self): """HMS.__sub__ => HMS - HMS.""" hms1 = tpm.HMS() hms2 = tpm.HMS() hms1.hh = 1.1 hms1.mm = 1.2 hms1.ss = 1.3 hms2.hh = 2.4 hms2.mm = 2.5 hms2.ss = 2.6 hms = hms1 - hms2 self.assertAlmostEqual(hms.hh, hms1.hh - hms2.hh) self.assertAlmostEqual(hms.mm, hms1.mm - hms2.mm) self.assertAlmostEqual(hms.ss, hms1.ss - hms2.ss)
def testProperMotion(self): """Convert.proper_motion: multiple V6C values.""" ra = tpm.d2r(269.45402305) de = tpm.d2r(4.66828815) px = 549.01 / 1000.0 # To Arc seconds rv = 0.0 # pmra * cos(de) into pmra pmra = (-797.84 / 1000.0) / math.cos(de) pmra *= 100.0 # To Arcseconds per century. pmde = (10326.93 / 1000.0) pmde *= 100.0 # To Arcseconds per century. C = tpm.CJ v6 = tpm.cat2v6(ra, de, pmra, pmde, px, rv, C) v6_out = convert.proper_motion([v6, v6], tpm.J2000, tpm.jyear2jd(1991.25)) for i in v6_out: v6 = i.c2s() hms = tpm.HMS(r=v6.alpha) dms = tpm.DMS(r=v6.delta) hms.normalize() dms.normalize() self.assertAlmostEqual(hms.hh, -7.0) self.assertAlmostEqual(hms.mm, 57.0) self.assertAlmostEqual(hms.ss, 48.4986, 3) self.assertAlmostEqual(dms.dd, 4.0) self.assertAlmostEqual(dms.mm, 41.0) self.assertAlmostEqual(dms.ss, 36.1980, 3)
def testpm(self): """Proper motion => apply PM to position.""" import math ra = tpm.d2r(269.45402305) de = tpm.d2r(4.66828815) px = 549.01 / 1000.0 # To Arc seconds rv = 0.0 # pmra * cos(de) into pmra pmra = (-797.84 / 1000.0 ) / math.cos(de) pmra *= 100.0 # To Arcseconds per century. pmde = (10326.93 / 1000.0) pmde *= 100.0 # To Arcseconds per century. C = tpm.CJ v6 = tpm.cat2v6(ra, de, pmra, pmde, px, rv, C) v6 = tpm.proper_motion(v6, tpm.J2000, tpm.jyear2jd(1991.25)) v6 = v6.c2s() hms = tpm.HMS(r=v6.alpha) dms = tpm.DMS(r=v6.delta) hms.normalize() dms.normalize() self.assertAlmostEqual(hms.hh, -7.0) self.assertAlmostEqual(hms.mm, 57.0) self.assertAlmostEqual(hms.ss, 48.4986, 3) self.assertAlmostEqual(dms.dd, 4.0) self.assertAlmostEqual(dms.mm, 41.0) self.assertAlmostEqual(dms.ss, 36.1980, 3)
def testUnicodeAndStr(self): """HMS.__str__ => string representation.""" hms = tpm.HMS() hms.hh = 1.0 hms.mm = 2.0 hms.ss = 3.0 self.assertEqual(str(hms), " 01H 02M 03.000S")
def testAdditionNonHMS(self): """HMS + x => Exception when addition involves non HMS value.""" hms = tpm.HMS() # All zeros. def add_hms(hms, x): return hms + x self.assertRaises(TypeError, add_hms, hms, 1)
def testSubtractNonHMS(self): """HMS - x => Exception if subtraction involves non HMS value.""" hms = tpm.HMS() # All zeros. def sub_hms(hms, x): return hms - x self.assertRaises(TypeError, sub_hms, hms, 1)
def testSetFieldValues(self): """DMS.x => set values after creation.""" hms = tpm.HMS() hms.hh = 1.0 hms.mm = 1.0 hms.ss = 1.34 self.assertAlmostEqual(hms.hh, 1.0) self.assertAlmostEqual(hms.mm, 1.0) self.assertAlmostEqual(hms.ss, 1.34)
def testToDMS(self): """HMS.to_dms() => HMS to DMS.""" t = {'hh': 12.0, 'mm': 30.0, 'ss': 0.0} t_dms = {'dd': 180.0, 'mm': 450.0, 'ss': 0.0} hms = tpm.HMS(**t) dms = hms.to_dms() self.assertEqual(type(dms), tpm.DMS) self.assertEqual(dms.dd, t_dms['dd']) self.assertEqual(dms.mm, t_dms['mm']) self.assertEqual(dms.ss, t_dms['ss'])
def testRepr(self): """HMS.__repr__ => dictionary as a string.""" hms = tpm.HMS() hms.hh = 1.1 hms.mm = 1.2 hms.ss = 1.3 h = eval(repr(hms)) self.assertAlmostEqual(h['hh'], hms.hh) self.assertAlmostEqual(h['mm'], hms.mm) self.assertAlmostEqual(h['ss'], hms.ss)
def fB1950toJ2000_main(ra_J2000, dec_J2000): ''' Precess Right Ascension and Declination coordinates from the sexagismal positions in the B1959 system to decimal degrees in the J2000 system. Input ra_J2000: single Right Ascension position in sexagismal J2000 dec_J2000: single Declination position in sexagismal J2000 Output ra_deg: single Right Ascension position in decimal degree dec_deg: single Declination position in decimal degrees ''' # convert decimal degrees to sexagismal format ra_sexa, dec_sexa = degtosexa(ra_J2000, dec_J2000) # extract RA hh:mm:ss and Dec dd:mm:ss components ra_hh = float(ra_sexa.split(" ")[0]) ra_mm = float(ra_sexa.split(" ")[1]) ra_ss = float(ra_sexa.split(" ")[2]) dec_dd = float(dec_sexa.split(" ")[0][1:]) dec_mm = float(dec_sexa.split(" ")[1]) dec_ss = float(dec_sexa.split(" ")[2]) # create RA and Dec objects ra_J2000 = tpm.HMS(hh=ra_hh, mm=ra_mm, ss=ra_ss).to_radians() dec_J2000 = tpm.DMS(dd=dec_dd, mm=dec_mm, ss=dec_ss).to_radians() # velocity vector v5 = convert.cat2v6(ra_J2000, dec_J2000) v5_fk6 = convert.convertv6(v5, s1=5, s2=6, epoch=tpm.B1950, equinox=tpm.B1950) v5_fk6_ep2000 = convert.proper_motion(v5_fk6, tpm.J2000, tpm.B1950) d = convert.v62cat(v5_fk6_ep2000, C=tpm.CJ) ra_new_rad = d["alpha"] ra_deg = ra_new_rad * 180. / np.pi dec_new_rad = d["delta"] dec_deg = dec_new_rad * 180. / np.pi return ra_deg, dec_deg
def verify(t, t_norm): self.assertAlmostEqual(tpm.HMS(**t).to_radians(), t_norm)
def verify(t, t_norm): self.assertAlmostEqual(tpm.HMS(**t).to_degrees(), t_norm)
def verify(t, t_norm): hms = tpm.HMS(**t) hms.normalize() self.assertAlmostEqual(hms.hh, t_norm['hh']) self.assertAlmostEqual(hms.mm, t_norm['mm']) self.assertAlmostEqual(hms.ss, t_norm['ss'])
def testCreate(self): """HMS() => create an HMS object.""" hms = tpm.HMS() self.assertEqual(type(hms), tpm.HMS)
def testInvalidKeywordAtInit(self): """HMS(key=value) => raise TypeError if key is invalid.""" self.assertRaises(TypeError, lambda: tpm.HMS(h=12.0)) self.assertRaises(TypeError, lambda: tpm.HMS(hours=12.0))
def testGetFields(self): """HMS.x => retrieve values of fields.""" hms = tpm.HMS() self.assertAlmostEqual(hms.hh, 0.0) self.assertAlmostEqual(hms.mm, 0.0) self.assertAlmostEqual(hms.ss, 0.0)