Etape 1: Courbe de transit
Outil de navigation: explorateur Python
On souhaite créer un outil de navigation qui permettra de se deplacer dans l’arborescence des dossiers et fichiers. Cela permettra de selectionner le-s fichier-s à traiter depuis la console python, sans modifier le code du programme.
Exemple:
On pourra au choix:
- Utiliser, ou s’inspirer du fichier source suivant: astep_2025_v0.py
- Programmer cette partie du programme de manière itérative (avec boucle while)
- Programmer cette partie à l’aide d’un algorithme récursif (niveau Term NSI)
Les fonctions python qui permettent de naviguer entre dossiers et fichiers font partie du module os.path, dont la documentation officielle est ici: doc python
On utilisera principalement:
os.getcwd(): str, le dossier courantos.path.abspath(): retourne le chemin absolu du dossier courantos.chdir(d): change de dossier pour aller au dossier dos.chdir('..'): remonte d’un niveauos.listdir()ouos.listdir(d): retourne la liste des fichiers et dossiers du dossier courant ou bien du dossier dos.path.isdir(f): booléen True sifest un dossieros.path.isfile(f): True si f est un fichierf.endswith('.csv'): True si l’extension de f est .csv
Ouvrir et executer le fichier avec un IDE python quelconque. Pour le tracé de graphiques, il est recommandé d’utiliser IDLE (Python GUI) de la distribution Winpython.
Ouverture du fichier csv
Pour chacun des fichiers de données, ouvrir une nouvelle cellule du notebook et adapter le script suivant:
import csv
table = []
with open('TIC323295479-01_20240617_ASTEP-ANTARCTICA_R_measurements.csv', 'r') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
try:
line_values = []
for val in row:
val = float(val)
line_values.append(val)
except:
line_values = row
table.append(line_values)
# test
table[:3]
"""
[['BJD', 'FLUX', 'ERRFLUX', 'AIRMASS', 'SKY'],
[478.87701, 0.999509, 0.00222, 1.015, 218.0],
[478.87718, 1.003059, 0.002213, 1.015, 219.0]]
"""
Lissage de la courbe
Les données utiles occupent les colonnes 0 (BJD) et 1 (FLUX) de la table. Les valeurs de FLUX (nuage de points en gris) étant très bruitées, il conviendra de réaliser un lissage des points (courbe rouge):
Le programme suivant réalise une moyenne glissante (courbe rouge): pour chaque indice i, on fait une moyenne du FLUX sur une fenêtre de 100 points, centrés sur l’indice i. y[i-50:i+50]
Compléter la fonction lissage, ainsi que le script aux points (1), (2), (3):
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
def moyenne(signal):
"""fonction qui calcule la moyenne
sur les donnees de la liste signal
"""
s = 0
# à completer
return s / b
def lissage(L,largeur):
signal_filtre = L.copy()
for i in range(largeur//2,len(L)-largeur//2):
signal = L[...:...]
# on fait un slice
# signal est le petit tableau de dimension egale à largeur
# dont on fait la moyenne glissante
# puis on place cette valeur moyenne dans signal_filtre, au rang i
signal_filtre[i] = moyenne(...)
return signal_filtre
x = [] # colonne 0 de la table = BJD
y = [] # colonne 1 de la table = FLUX
# (1) import des valeurs de x et y à partir du fichier en ouverture
# (2) utilisation des fonction lissage
plt.clf()
axes = plt.gca()
plt.scatter(x,y,color='silver',marker='.',label='luminosité')
plt.grid(True,which='both')
plt.legend(loc='best')
plt.title('luminosité transit')
# (3) tracé de la courbe de lissage
plt.plot(...,..., color='red',label='moyenne glissante')
plt.grid(True,which='both')
plt.legend(loc='best')
cursor = Cursor(axes, useblit=True, color='red', linewidth=2)
plt.show()
On peut alors utiliser les fonctions de la fenêtre graphique pour relever les coordonnées à la main des intersections des courbes:
option 1: le transit démarre au point A et termine au point B
option 2: le transit démarre au milieu du segment n°2 et termine au milieu du segment n°4
Avec l’option 2:
| planète | tau (h) | incertitude sur tau | delta | incertitude sur delta |
|---|---|---|---|---|
TOI 270-1 |
7.2 |
à definir | 1-0.991 |
à definir |
