예제 #1
0
def _test_erfa_conversion(leap, i_f):
    i_i, f_i = i_f
    assume(0 <= f_i < 1)
    if leap:
        assume(i_i in leap_sec_days)
    else:
        assume(i_i not in leap_sec_days)
    jd1_in, jd2_in = day_frac(erfa.DJM0 + i_i, f_i)
    y, mo, d, f = erfa.jd2cal(jd1_in, jd2_in)
    assert 0 < y < 3000
    assert 0 < mo <= 12
    assert 0 <= d < 32
    assert 0 <= f < 1

    jd1_temp, jd2_temp = erfa.cal2jd(y, mo, d)
    jd1_temp, jd2_temp = day_frac(jd1_temp, jd2_temp)  # improve numerics
    jd1_temp, jd2_temp = day_frac(jd1_temp, jd2_temp + f)
    jd_change = abs((jd1_temp - jd1_in) + (jd2_temp - jd2_in)) * u.day
    assert jd_change.to(u.ns) < 1 * u.ns

    ft = 24 * f
    h = safe_kind_conversion(np.floor(ft), dtype=int)
    ft -= h
    ft *= 60
    m = safe_kind_conversion(np.floor(ft), dtype=int)
    ft -= m
    ft *= 60
    s = ft
    assert 0 <= h < 24
    assert 0 <= m < 60
    assert 0 <= s < 60

    jd1, jd2 = erfa.dtf2d("UTC", y, mo, d, h, m, s)
    y2, mo2, d2, f2 = erfa.jd2cal(jd1, jd2)
    # assert (y, mo, d) == (y2, mo2, d2)
    # assert (abs(f2-f)*u.day).to(u.s) < 1*u.ns

    assert jd1 == np.floor(jd1) + 0.5
    assert 0 <= jd2 < 1
    jd1, jd2 = day_frac(jd1, jd2)
    jd_change = abs((jd1 - jd1_in) + (jd2 - jd2_in)) * u.day
    if leap:
        assert jd_change.to(u.s) < 1 * u.s
    else:
        assert jd_change.to(u.ns) < 2 * u.ns
        # assert jd_change.to(u.ns) < 1 * u.ns
    return

    i_o, f_o = day_frac(jd1 - erfa.DJM0, jd2)

    mjd_change = abs((i_o - i_i) + (f_o - f_i)) * u.day
    if leap:
        assert mjd_change.to(u.s) < 1 * u.s
    else:
        assert mjd_change.to(u.ns) < 1 * u.ns
예제 #2
0
파일: pulsar_mjd.py 프로젝트: pennucci/PINT
def jds_to_mjds_pulsar(jd1, jd2):
    # Do the reverse of the above calculation
    # Note this will return an incorrect value during
    # leap seconds, so raise an exception in that
    # case.
    y, mo, d, hmsf = erfa.d2dtf("UTC", _digits, jd1, jd2)
    # For ASTROPY_LT_3_1, convert to the new structured array dtype that
    # is returned by the new erfa gufuncs.
    if not hmsf.dtype.names:
        hmsf = hmsf.view(_new_ihmsfs_dtype)[..., 0]
    if np.any((hmsf["s"] == 60) & (hmsf["f"] != 0)):
        # if f is exactly zero, this is probably fine to treat as the end of the day.
        raise ValueError(
            "UTC times during a leap second cannot be represented in pulsar_mjd format"
        )
    j1, j2 = erfa.cal2jd(y, mo, d)
    return day_frac(
        j1 - erfa.DJM0 + j2,
        hmsf["h"] / 24.0 + hmsf["m"] / 1440.0 + hmsf["s"] / 86400.0 +
        hmsf["f"] / 86400.0 / 10**_digits,
    )
예제 #3
0
파일: ex_pn.py 프로젝트: nirinA/erfa_python
DUT1 = -0.072073685

# Nutation corrections wrt IAU 1976/1980 (mas->radians)
DDP80 = -55.0655 * AS2R / 1000.
DDE80 = -6.3580 * AS2R / 1000.

# CIP offsets wrt IAU 2000A (mas->radians)
DX00 = 0.1725 * AS2R / 1000.
DY00 = -0.2650 * AS2R / 1000.

# CIP offsets wrt IAU 2006/2000A (mas->radians)
DX06 = 0.1750 * AS2R / 1000.
DY06 = -0.2259 * AS2R / 1000.

# TT (MJD)
DJMJD0, DATE = erfa.cal2jd(IY, IM, ID)
TIME = (60 * (60 * IH + MIN) + SEC) / 86400.
UTC = DATE + TIME
DAT = erfa.dat(IY, IM, ID, TIME)
TAI = UTC + DAT / 86400.
TT = TAI + 32.184 / 86400.

# UT1
TUT = TIME + DUT1 / 86400.
UT1 = DATE + TUT

print("UTC :%4d/%2.2d/%2.2d%3d:%2.2d:%2.2d.%3.3d" %
      erfa.d2dtf(3, *erfa.dtf2d(IY, IM, ID, IH, MIN, SEC)))
print("TT  = 2400000.5 + %.17f " % TT)
print("UT1 = 2400000.5 + %.17f " % UT1)
예제 #4
0
파일: ex_pn.py 프로젝트: nirinA/erfa_python
DUT1 = -0.072073685

# Nutation corrections wrt IAU 1976/1980 (mas->radians)
DDP80 = -55.0655 * AS2R/1000.
DDE80 = -6.3580 * AS2R/1000.

# CIP offsets wrt IAU 2000A (mas->radians)
DX00 = 0.1725 * AS2R/1000.
DY00 = -0.2650 * AS2R/1000.

# CIP offsets wrt IAU 2006/2000A (mas->radians)
DX06 = 0.1750 * AS2R/1000.
DY06 = -0.2259 * AS2R/1000.

# TT (MJD)
DJMJD0, DATE = erfa.cal2jd(IY, IM, ID)
TIME = ( 60*(60*IH + MIN) + SEC ) / 86400.
UTC = DATE + TIME
DAT = erfa.dat(IY, IM, ID, TIME)
TAI = UTC + DAT/86400.
TT = TAI + 32.184/86400.

# UT1
TUT = TIME + DUT1/86400.
UT1 = DATE + TUT

print("UTC :%4d/%2.2d/%2.2d%3d:%2.2d:%2.2d.%3.3d"%erfa.d2dtf(3, *erfa.dtf2d(IY, IM, ID, IH, MIN, SEC)))
print("TT  = 2400000.5 + %.17f "%TT)
print("UT1 = 2400000.5 + %.17f "%UT1)

print('''
예제 #5
0
#Report to 1 ms precision.
ihmsf = erfa.d2tf(3, f)
print("%s%2d:%2.2d:%2.2d.%3.3d\n" % ihmsf)

print('=====')
print('''
Date and time.''')
iy = 2008
im = 2
id = 29
ihour = 23
imin = 59
sec = 59.9
print("%4d/%2.2d/%2.2d%3d:%2.2d:%4.1f\n" % (iy, im, id, ihour, imin, sec))
print('Express as 2-part JD.')
d1, d2 = erfa.cal2jd(iy, im, id)
d = erfa.tf2d(ihour, imin, sec)
d2 += d
print("%9.1f +%13.6f =%15.6f\n" % (d1, d2, d1 + d))
print('Express as calendar date and fraction of a day.')
iy, im, id, fd = erfa.jd2cal(d1, d2)
d = id + fd
print("%4d/%2.2d/%9.6f\n" % (iy, im, d))
print('Round to 0.001 day.')
iymdf = erfa.jdcalf(3, d1, d2)
print("%4d/%2.2d/%2.2d.%3.3d\n" % iymdf)
print('=====')
print('''
Besselian and Julian epochs''')
print('Julian Date.')
d = 2457073.05631
예제 #6
0
파일: ex_ts.py 프로젝트: nirinA/erfa_python
print('Six hours earlier:')
f -= 0.25

#Report to 1 ms precision.
ihmsf = erfa.d2tf(3, f)
print ( "%s%2d:%2.2d:%2.2d.%3.3d\n"%ihmsf)

print('=====')
print('''
Date and time.''')
iy = 2008; im = 2; id = 29;
ihour = 23; imin = 59; sec = 59.9;
print("%4d/%2.2d/%2.2d%3d:%2.2d:%4.1f\n"%
         (iy, im, id, ihour, imin, sec))
print('Express as 2-part JD.')
d1, d2 = erfa.cal2jd ( iy, im, id)
d = erfa.tf2d (ihour, imin, sec)
d2 += d
print("%9.1f +%13.6f =%15.6f\n"%( d1, d2, d1 + d))
print('Express as calendar date and fraction of a day.')
iy, im, id, fd = erfa.jd2cal(d1, d2)
d = id + fd
print( "%4d/%2.2d/%9.6f\n"%(iy, im, d))
print('Round to 0.001 day.')
iymdf = erfa.jdcalf ( 3, d1, d2)
print( "%4d/%2.2d/%2.2d.%3.3d\n"%iymdf)
print('=====')
print('''
Besselian and Julian epochs''')
print('Julian Date.')
d = 2457073.05631