[Python] AstroPy to transform coordinates

Discussão em 'Python' iniciado por Stack, Agosto 17, 2025.

  1. Stack

    Stack Membro Participativo

    I want to transform the icrs coordinates (ar and dr) from epoch 1991.25 to epoch 2016.0, also in the icrs system.

    But I got this error. It's my first time using AstroPy.

    <SkyCoord (ICRS): (ra, dec) in deg
    (243.90472242, -8.36823651)>
    ---------------------------------------------------------------------------
    TypeError Traceback (most recent call last)
    Cell In[1], line 8
    5 c = SkyCoord(ar, dr, frame='icrs', unit='deg')
    7 print(c)
    ----> 8 print(c.transform_to(ICRS(equinox='J2016')))

    File /usr/lib/python3/dist-packages/astropy/coordinates/baseframe.py:336, in BaseCoordinateFrame.__init__(self, copy, representation_type, differential_type, *args, **kwargs)
    333 self._attr_names_with_defaults.append(fnm)
    335 if kwargs:
    --> 336 raise TypeError(
    337 f"Coordinate frame {self.__class__.__name__} got unexpected "
    338 f"keywords: {list(kwargs)}"
    339 )
    341 # We do ``is None`` because self._data might evaluate to false for
    342 # empty arrays or data == 0
    343 if self._data is None:
    344 # No data: we still need to check that any non-scalar attributes
    345 # have consistent shapes. Collect them for all attributes with
    346 # size > 1 (which should be array-like and thus have a shape).

    TypeError: Coordinate frame ICRS got unexpected keywords: ['equinox']


    The code is below:

    from astropy.coordinates import SkyCoord, ICRS

    ar = 243.90472242
    dr = -8.36823651
    c = SkyCoord(ar, dr, frame='icrs', unit='deg')

    print(c)
    print(c.transform_to(ICRS(equinox='J2016')))


    I made another attempt: I start with values ar=x and dr=y in icrs; then I switch to FK5 before transforming to Equinox J2016. But when I go back to icrs, the x and y values remain unchanged.

    It appears that when switching back to the icrs system, the transformation from equinox 1991.25 to equinox 2016 is "undone". Code:

    from astropy.coordinates import SkyCoord, ICRS, FK5

    ar = 243.90472242
    dr = -8.36823651


    c_icrs = SkyCoord(ar, dr, frame='icrs', unit='deg')
    print("Original coordinates in icrs\n", c_icrs)
    print("")

    c_fk5 = c_icrs.transform_to(FK5) # c_icrs.fk5 does the same thing
    print("Switch to fk5 system\n",c_fk5)
    print("")

    c_fk5 = c_fk5.transform_to(FK5(equinox='J2016')) # precess to a different equinox .transform_to('fk5') # c_icrs.fk5 does the same thing
    print("Transform to equinox J2016\n",c_fk5)
    print("")

    c_icrs = c_fk5.transform_to('icrs')
    print("Back to icrs\n",c_icrs)


    Output:

    Original coordinates in icrs
    <SkyCoord (ICRS): (ra, dec) in deg
    (243.90472242, -8.36823651)>

    Switch to fk5 system
    <SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
    (243.90472947, -8.36823266)>

    Transform to equinox J2016
    <SkyCoord (FK5: equinox=J2016.000): (ra, dec) in deg
    (244.12153008, -8.40725993)>

    Back to icrs
    <SkyCoord (ICRS): (ra, dec) in deg
    (243.90472242, -8.36823651)>


    This is a big problem, because I need the coordinates (ar and dr) in the icrs system with equinox J2016 and they necessarily need to be different from the original coordinates in the J1991.25 epoch.

    Continue reading...

Compartilhe esta Página