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 deastropy.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)
.
- tuple
- Erreurs Possibles :
ValueError
: Levée si les mots-clésCOEFF0
ouCOEFF1
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 :
- Extrait le vecteur de flux depuis la première extension de données
(hdul[0].data[0])
. - Reconstruit le vecteur des longueurs d'onde en Angströms en utilisant les coefficients
COEFF0
etCOEFF1
de l'en-tête FITS.
- Extrait le vecteur de flux depuis la première extension de données
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.
🔗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.