def test_precessedgeocentric_loopback(): from_coo = PrecessedGeocentric(1 * u.deg, 2 * u.deg, 3 * u.AU, obstime='2001-01-01', equinox='2001-01-01') # Change just the obstime to_frame = PrecessedGeocentric(obstime='2001-06-30', equinox='2001-01-01') explicit_coo = from_coo.transform_to(ICRS()).transform_to(to_frame) implicit_coo = from_coo.transform_to(to_frame) # Confirm that the explicit transformation changes the coordinate assert not allclose(explicit_coo.ra, from_coo.ra, rtol=1e-10) assert not allclose(explicit_coo.dec, from_coo.dec, rtol=1e-10) assert not allclose(explicit_coo.distance, from_coo.distance, rtol=1e-10) # Confirm that the loopback matches the explicit transformation assert_allclose(explicit_coo.ra, implicit_coo.ra, rtol=1e-10) assert_allclose(explicit_coo.dec, implicit_coo.dec, rtol=1e-10) assert_allclose(explicit_coo.distance, implicit_coo.distance, rtol=1e-10) # Change just the equinox to_frame = PrecessedGeocentric(obstime='2001-01-01', equinox='2001-06-30') explicit_coo = from_coo.transform_to(ICRS()).transform_to(to_frame) implicit_coo = from_coo.transform_to(to_frame) # Confirm that the explicit transformation changes the direction but not the distance assert not allclose(explicit_coo.ra, from_coo.ra, rtol=1e-10) assert not allclose(explicit_coo.dec, from_coo.dec, rtol=1e-10) assert allclose(explicit_coo.distance, from_coo.distance, rtol=1e-10) # Confirm that the loopback matches the explicit transformation assert_allclose(explicit_coo.ra, implicit_coo.ra, rtol=1e-10) assert_allclose(explicit_coo.dec, implicit_coo.dec, rtol=1e-10) assert_allclose(explicit_coo.distance, implicit_coo.distance, rtol=1e-10)
def TEME2ECI_pos(Pos_TEME, t): T = Time(t, format='jd', scale='utc') dist_vect = norm(Pos_TEME, axis=0) ra_vect = np.arctan2(Pos_TEME[1], Pos_TEME[0]) dec_vect = np.arcsin(Pos_TEME[2] / dist_vect) Pos_TEME_SC = PrecessedGeocentric(ra=ra_vect * u.rad, dec=dec_vect * u.rad, distance=dist_vect * u.m, equinox=T, obstime=T) Pos_ECI_SC = Pos_TEME_SC.transform_to(GCRS(obstime=T)) Pos_ECI = np.vstack(Pos_ECI_SC.cartesian.xyz.value) return Pos_ECI