Hello Astropy community.
I’m struggling to get a ITRF/GCRF conversion from Astropy, Spice and Sofa that are in agreement with each other.
Basically, Spice and Sofa are within 4 arcsecs, using the following implementation for Sofa
However, Astropy and Sofa differ by nearly 12 arcsec.
The transform evaluation time is defined as a TAI string
time_string_TAI = "2020-12-31T00:00:00" # TAI timestring
The ITRF_GCRF
DCM is computed like so:
def gcrs_to_itrs(t):
return SkyCoord(x=np.array([1,0,0]),
y=np.array([0,1,0]),
z=np.array([0,0,1]),
representation_type='cartesian'
).transform_to(ITRS(obstime=t)).cartesian.get_xyz().value
...
INPUT_TIME = Time(time_string_TAI,scale = "tai")
ITRF_GCRF_astropy = gcrs_to_itrs(INPUT_TIME)
The UT1-UTC offset provided to SOFA is the same as computed by Astropy at the evaluation time.
The EOP parameters are left to zero when calling SOFA, which contributes to the overall error (I’m guessing that Astropy retrieves the EOPs corresponding to the evaluation tome internally) but to a much smaller degree than the few arcsecs of agreement I’m expected to find.
The two DCMs returned from Astropy and SOFA respectively are
ITRF_GCRF_astropy : [[-1.64352104e-01 9.86420571e-01 3.30480317e-04]
[-9.86399708e-01 -1.64239026e-01 2.08095097e-03]
[ 2.00068122e-03 -6.22881226e-06 9.99997780e-01]]
ITRF_GCRF_sofa : [[-1.64336961e-01 9.86404205e-01 3.28918388e-04]
[-9.86402214e-01 -1.64337290e-01 1.98161946e-03]
[ 2.00873133e-03 1.20749412e-06 9.99997982e-01]]
The error between the two, expressed as a principal rotation vector is
prv_error : [-4.50870748e-05 3.77193352e-06 4.21492558e-05]
The Z component is along the angular velocity vector. Because this component is not exceedingly larger than the other two, a time offset can be ruled out (otherwise the orientation error would predominantly be around the angular velocity vector).
I would be grateful is someone could point me in the right direction regarding this inconsistency. I don’t think Astropy expects additional transform parameters to correctly instantiate the ITRF_GCRF DCM ?
Thanks !