Between 1582 and 1588, Tycho Brahe observed $\alpha$ Arietis from Uraniborg (55°54′28″N 12°41′48″E) on at least 27 separate occasions and made a record of the right ascension of the star (see Opera Omnia, pages 170-198). On February 27, 1582, for example, he recorded the position as 26 degrees, 4 minutes, 16 seconds, as shown in the image below.

enter image description here

I'd like to determine the correct RA value for $\alpha$ Arietis on each of the dates that Tycho recorded an observation, cognizant of the fact that the star's proper motion is not insignificant. I'm also aware that Tycho made several, essentially paired, observations with the intention of balancing parallax errors.

I'm not a professional astronomer but I have looked at both Stellarium and astropy as possible tools for doing the calculation. It looks as if astropy is likely to be the more suitable. I'm reasonably competent with Python but unfamilar with astropy so I have some questions:

  • Am I correct in my assessment that astropy is likely provide a better approach than Stellarium
  • Am I correct in thinking that this is a calculation that should be reasonably easy in astropy
  • How do I ensure that astropy uses a Julian calendar as I'm reasonably sure that the dates recorded by Tycho Brahe are Julian calendar dates. As far as I know, the Gregorian calendar was adopted in some parts of the world in 1582 but not in many protestant countries until much later.
  • Will astropy show a result "properly" biased by the parallax error that reflects what Tycho would be expected to have recorded (I hope I'm asking a sensible question here and not just showing my ignorance!)
  • What is the best way to set up the calculation given that this is the only astronomical calculation I need to do.

Added in response to the comment by @JohnDoty

  • Can (or does?) either astropy or Stellarium take account of the precession of the equinoxes. My understanding is that Tycho determined RA relative to the position of the vernal equinox as calculated from his own measurements.

Added data from the same publication. Dates and RA values

  • 2
    $\begingroup$ Thoughts: Stellarium does have a proper motion model. It is a linear model. Our uncertainty in the proper motion is of order 0.3 milliarcsec/yr. Even with the best model there is an uncertainty of more than an arcsec. The difference between Julian and Gregorian introduces a difference of about 5 mas (much less than the uncertainty) - can be neglected. Stellarium also has a parallax model. Consider refraction. This introduces further uncertainty in the calculation. Less sure of astropy, but I think it uses the same linear model. But model errors are less than uncertainty in proper motion $\endgroup$
    – James K
    Feb 28 at 7:20
  • 1
    $\begingroup$ See docs.astropy.org/en/stable/coordinates/apply_space_motion.html for how to apply space motion in astropy. $\endgroup$
    – James K
    Feb 28 at 7:22
  • 2
    $\begingroup$ Right ascension? Beware of precession of the equinoxes. en.wikipedia.org/wiki/Axial_precession $\endgroup$
    – John Doty
    Feb 29 at 0:50

1 Answer 1


Here is my attempt using Astropy. Spoiler alert: my answer differs from Tycho's by about 6 arcminutes. That seems rather large, so there is probably an issue with my approach, but it also may be due to limitations in Astropy's model of axial precession for dates so far in the past, or inherent problems with simply linearly propagating the star's motion backwards in time. Hopefully others here will chime in to help sort out these issues.

The code below uses Astroquery to find the position, distance, and proper motion of Hamal in the ICRS reference frame using the Hipparcos catalog.

With that information, I use the SkyCoord.apply_space_motion() method suggested by @JamesK to calculate the Hamal's location in 1582.

Next, to apply @JamesK's suggestion of using refraction, convert Hamal's location into local altitude and azimuth at the Uraniborg using educated guesses for the barometric pressure, temperature, and humidity.

Finally, to account for precession of the equinoxes as pointed out by @JohnDoty, evaluate Hamal's location in the True Equator True Equinox (TETE) coordinate frame at the Uraniborg assuming no atmospheric refraction.

import numpy as np
import astropy.units as u
import astropy.time
import astropy.constants
import astropy.coordinates
import astroquery.vizier

# Define the time of the observation
time = astropy.time.Time("1582-02-27T19:00")

# Define the location of the observation
location = astropy.coordinates.EarthLocation.of_address("Uraniborg")

# Define the barometric pressure at the observation site
# Assume 1 atmosphere since the Uraniborg is at sea level
pressure = 1 * astropy.constants.atm

# Define the temperature at the observation site.
# Assume 0 degrees Celsius since that seems like a
# reasonable average low temperature
temperature = 0 * u.deg_C

# Define the relative humidity at the observation site.
# Assume pretty high humidity since Uraniborg is near
# the ocean
humidity = 80 * u.percent

# Define the wavelength of the observation
# as the center of the human visible spectrum
wavelength = 550 * u.nm

# Query VizieR using astroquery to get the position
# and proper motion of Hamal from the Hipparcos catalog
query = astroquery.vizier.Vizier.query_object(

# Express the query results in ICRS coordinates
hamal = astropy.coordinates.SkyCoord(

# Determine Hamal's position at the observation time
hamal_obstime = hamal.apply_space_motion(time)

# Determine Hamal's apparent altitude and
# azimuth accounting for refraction
hamal_altaz = hamal_obstime.altaz

# Set pressure to zero to determine apparent position
# without accounting for refraction
hamal_apparent = hamal_altaz.replicate(pressure=0)

# Convert apparent position into the True Equator True 
# Equinox frame to account for precession of the equinoxes
hamal_tete = hamal_apparent.transform_to(


which outputs


Here is a Google Colab Notebook of the above code if you want to easily run it for yourself.

  • 2
    $\begingroup$ That is extraordinarily generous of you. I had begun experimenting with astropy and the answer I got was about 4 degrees (!) different from Tycho's report. I expect that by comparing your code with my own, I will learn a great deal. $\endgroup$ Feb 29 at 10:01
  • 3
    $\begingroup$ On an interesting historical note (given your own 7 minute difference), I read only yesterday that Kepler was able to fit a circular orbit to Tycho Brahe's observations for Mars ... but with an 8 minute error. He believed that 8 minutes might be expected of some observers, but definitely not from Tycho ... and saw that as evidence against a circular orbit. I realise that there are lots of ways that a model-fit to data from 440 years ago might go wrong, but you've given me a great start. – $\endgroup$ Feb 29 at 11:41
  • 1
    $\begingroup$ @CrimsonDark, I've edited my answer to try and account for atmospheric refraction but it only improves the discrepancy by about 1 arcminute. Still progress though! $\endgroup$
    – Roy Smart
    Mar 1 at 7:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .