Graphiques astronomiques avec astropy

Où l’on se familiarise avec un module python pour l’astronomie

Je connaissais l’existence du module astropy depuis plusieurs années, mais j’avais mis de côté sa prise en main, car la documentation disponible sur le web me semblait très peu claire. Les tutoriels existent, mais ils prennent comme exemples des situations déjà assez complexes. Je savais seulement que cet outil offrait beaucoup de possibilités et qu’il était connu des astronomes professionnels.

La documentation ne s’est pas soudainement améliorée, mais une vidéo sur Youtube m’a récemment donné la motivation pour tenter quelques scripts, en commençant pas des objectifs similaires à ce que j’ai déjà produit avec le module Skyfield. Voici quelques essais de scripts.

On choisit un astre et une échelle de dates (j’ai tâtonné pour trouver une période où la planète est visible), puis on récupère les coordonnées horizontales (azimut, hauteur) de l’astre. Il faut pour cela définir un lieu d’observation par ses coordonnées géographiques.

Appel des modules :

import matplotlib.pyplot as plt
import numpy as np
from astropy import units as u
from astropy.coordinates import AltAz, EarthLocation,  get_body, Longitude, Latitude
from astropy.time import Time
import locale

Définition du lieu d’observation :

lon, lat = 0.11, 49.5 # coordonées géographiques (degrés)
loc = EarthLocation.from_geodetic(lon=Longitude(lon*u.deg), lat=Latitude(lat*u.deg),height=0)

Construction d’une échelle temporelle : on fixe une date initiale t0, puis une série de dates supplémentaires, avant de les ajouter pour avoir l’échelle complète. Je ne comprends pas encore comment gérer les heures UTC et les heures locales.

utcoffset = 0 * u.hour  # fuseau horaire
t0 = Time("2022-6-13 01:00:00") - utcoffset
delta_t = np.arange(0, 30, 4) * u.day
t = t0 + delta_t

Récupération des coordonnées locales de l’astre (très simple !) :

nom = 'jupiter'
astre = get_body(nom, t, loc)
coord = astre.transform_to(AltAz(obstime=t, location=loc))
x = coord.az.deg
y = coord.alt.deg

Le script :

Très similaire au précédent. On relève la position du Soleil toute l’année à la même heure. Au lieu de ‘get_body()’, il existe une fonctionnalité ‘get_sun()’. Il est assez facile (plus facile qu’avec Skyfield) de récupérer les données string des dates à partir de l’échelle temporelle définie, si on veut afficher les dates sur le graphique. Le script :

Entre les planètes rocheuses et les planètes gazeuses, les ordres de grandeur de temps et de distances sont tellement différents qu’il est vain de vouloir les rassembler dans un même script. Voici les lignes principales du script :

planet_names = ['mercury', 'venus', 'earth', 'mars']
for i, planet in enumerate(planet_names):
    astre = get_body(planet, time = t)
    coord = astre.transform_to(HeliocentricTrueEcliptic())
    lon = coord.lon.radian
    dist = coord.distance.au

Pour les planètes gazeuses :

Soyez le premier à commenter

Laisser un commentaire