# How to convert TLE data into state vectors in ITRF?

As shown in the question, Now I have a TLE observation data and CPF(Consolidated Prediction Format) data. According to CPF's documentation, CPF predictions are tabulated satellite state vectors generally in the geocentric Earth-fixed coordinate system of date known as the ITRF (International Terrestrial Reference Frame).
So what can I do to convert TLE data into state vectors in ITRF(Both data at the same observation time)?

Here's what I've done so far:
The observation time is 2022-07-12T11:38:00.043871000
The TLE data is:

0 STARLETTE
1  7646U 75010A   22193.48472273 -.00000146  00000-0 -15590-5 0  9998
2  7646  49.8266  11.4131 0205800   0.2699 359.8273 13.82312865395926


The CPF data is(The specific data format can be viewed in CPF_format):
 10 0 59772 41880.000000 0 -430956.931 -7170514.708 -0.274
So the Cartesian coordinate of the CPF data point at the observation time in ITRF is:
 x = -430956.931, y = -7170514.708, z = -0.274
Then, I converted TLE data into a state vector in ITRF through the following python code:

   from tletools import TLE
from astropy import units as u
from astropy.coordinates import GCRS, ITRS, CartesianRepresentation
time = 2022-07-12T11:38:00.043871000
s = '1  7646U 75010A   22193.48472273 -.00000146  00000-0 -15590-5 0  9998'
t = '2  7646  49.8266  11.4131 0205800   0.2699 359.8273 13.82312865395926'
tle = TLE.from_lines('starlette', s, t)
orbit = tle.to_orbit()
r, v = orbit.rv()
gcrs = GCRS(CartesianRepresentation(r * u.m, r * u.m, r * u.m), obstime=time)
itrs = gcrs.transform_to(ITRS(obstime=time))
x_ecef = itrs.x.value
y_ecef = itrs.y.value
z_ecef = itrs.z.value


However, the results are far from the CPF data：
·x_ecef = -387448.4141639284, y_ecef = -7172405.299520155, z_ecef = 23871.227963843405
Later, I also considered precession, nutation, pole shift and other factors. Due to the large amount of code, here it will not be displayed. But maybe my research is not enough, the difference between CPF and TLE data is still obvious．
So, what efforts should I make to solve the above problems? Can I directly consider precession, nutation, pole shift and other factors in astropy.coordinates?
I will appreciate it for any help!

• did you solve your problem? I use sgp4 as the accepted answer suggested, still has a big difference Sep 26 at 9:08

This is not quite a case of garbage in, garbage out. It's a garbage in the middle problem. Toss the tletools package you are using in the circular file (aka the garbage can), which is where it belongs. It's pretty obvious from the code, starting at line 209, that TLE.to_orbit is doing exactly the wrong thing. It treats the TLE elements as if they were classical osculating elements, which very much is not the case.