Aller au contenu principal

preprocessor.py

Ce module contient la classe SpectraPreprocessor, responsable du chargement et du nettoyage initial des spectres bruts. C'est la toute première étape de traitement actif du pipeline.

Workflow du Prétraitement

Classe SpectraPreprocessor

Encapsule la logique pour lire un fichier FITS de LAMOST DR5 et appliquer un prétraitement simple.

Instanciation

La classe ne prend aucun argument à l'initialisation.

Comment l'utiliser
from src.pipeline.preprocessor import SpectraPreprocessor

# Crée une instance du preprocessor
preprocessor = SpectraPreprocessor()

Méthodes Publiques :

load_spectrum(hdul)

Cette méthode est le cœur du chargement des données. Elle est spécifiquement conçue pour le format de données de LAMOST DR5.

Cliquez pour voir les détails de la méthode
  • Description : Extrait le spectre (longueur d'onde, flux) et l'inverse de la variance à partir d'un objet HDUList ouvert.
  • Arguments :
  • hdul (astropy.io.fits.HDUList) : L'objet FITS ouvert.
  • Retourne :
  • tuple (np.ndarray, np.ndarray, np.ndarray) : Un tuple contenant trois tableaux NumPy : (wavelength, flux, invvar).
  • Erreurs Possibles :
  • ValueError : Levée si les mots-clés COEFF0 ou COEFF1 sont absents de l'en-tête, ou si la structure de données est invalide.
  • Contexte Scientifique :
  • Cette méthode est spécifiquement adaptée au format des données LAMOST DR5. Elle extrait le flux de la première ligne de la matrice de données, l'inverse de la variance de la deuxième, et reconstruit l'axe des longueurs d'onde en Angströms en utilisant les coefficients COEFF0 et COEFF1 de l'en-tête FITS.

normalize_spectrum(flux)

Applique une normalisation simple pour ramener les spectres à une échelle comparable.

Cliquez pour voir les détails de la méthode
  • Description : Normalise un vecteur de flux en le divisant par sa valeur médiane.
  • Arguments :
  • flux (np.ndarray) : Le vecteur de flux du spectre.
  • Retourne :
  • np.ndarray : Le vecteur de flux normalisé.
  • Erreurs Possibles :
  • Aucune. Si la médiane est nulle ou négative, la méthode retourne le flux original pour éviter les erreurs de calcul.
  • Contexte Scientifique :
  • La normalisation par la médiane a été choisie pour sa robustesse aux outliers (comme les rayons cosmiques). Elle permet de ramener le continuum du spectre à une valeur proche de 1.0, ce qui est essentiel pour comparer la forme des raies spectrales entre différentes étoiles.

Exemples d'Utilisation & Bonnes Pratiques

Exemple de base

Ce snippet montre le workflow nominal pour un seul fichier.

Exemple d'utilisation complète
from astropy.io import fits
from src.pipeline.preprocessor import SpectraPreprocessor

# Chemin vers un fichier FITS d'exemple (compressé)
fits_path = "data/raw/PLAN_NAME/spectrum_file.fits.gz"

preprocessor = SpectraPreprocessor()

# Utiliser astropy.io.fits pour ouvrir le fichier
# Note : Pour les fichiers .gz, astropy les gère automatiquement
with fits.open(fits_path) as hdul:

# 1. Charger le spectre
wavelength, flux = preprocessor.load_spectrum(hdul)

# 2. Normaliser le flux
flux_normalized = preprocessor.normalize_spectrum(flux)

print(f"Spectre chargé. Longueur d'onde de {wavelength.min():.2f} à {wavelength.max():.2f} Å.")
print(f"Flux normalisé (moyenne) : {flux_normalized.mean():.2f}")

💡Bonnes Pratiques
  • Ordre : Le prétraitement est toujours la première étape active du pipeline.
  • Robustesse : Le code est encapsulé dans des blocs try...except dans le pipeline principal pour gérer les fichiers FITS corrompus.
  • Batch : Pour traiter de nombreux fichiers, cette classe est appelée en boucle par le ProcessingPipeline.

Prochaine Étape du Pipeline

Une fois le spectre normalisé, il est prêt pour être transformé en un vecteur de features numériques.