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
HDUListouvert. - 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ésCOEFF0ouCOEFF1sont 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
COEFF0etCOEFF1de 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...exceptdans 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.
🔗Ressources & Code Source
Prochaine Étape du Pipeline
Une fois le spectre normalisé, il est prêt pour être transformé en un vecteur de features numériques.