Skip to main content

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) à partir d'un objet HDUList (provenant de astropy.io.fits).
  • Arguments :
    • hdul (astropy.io.fits.HDUList) : L'objet FITS ouvert contenant les données du spectre.
  • Retourne :
    • tuple (np.ndarray, np.ndarray) : Un tuple contenant deux tableaux NumPy : (wavelength, flux).
  • Erreurs Possibles :
    • ValueError : Levée si les mots-clés COEFF0 ou COEFF1 sont absents de l'en-tête FITS, rendant la reconstruction de l'axe des longueurs d'onde impossible.
  • Contexte Scientifique :
    • Cette méthode est spécifiquement adaptée au format des données LAMOST DR5, où l'axe des longueurs d'onde est défini par une échelle log-linéaire. Elle ne fonctionnera pas "telle quelle" pour des relevés comme SDSS qui utilisent une structure de header différente.
  • Logique :
    1. Extrait le vecteur de flux depuis la première extension de données (hdul[0].data[0]).
    2. Reconstruit le vecteur 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 erreur n'est levée directement. Si la médiane du flux est nulle ou négative, la méthode retourne le flux original pour éviter une division par zéro ou des valeurs aberrantes.
  • Contexte Scientifique :
    • La normalisation par la médiane a été choisie pour sa robustesse aux outliers. Contrairement à la moyenne, la médiane est peu affectée par des pixels cosmiques ou des artéfacts très brillants, ce qui en fait un choix plus sûr pour un traitement automatisé en masse.

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.
  • Idempotence : Ne normalisez pas un spectre déjà normalisé.
  • Batch : Pour traiter de nombreux fichiers, utilisez une boucle avec tqdm pour le suivi.

Prochaine Étape du Pipeline

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