peak_detector.py & feature_engineer.py
Cette étape est le cœur de l'approche "physique" du pipeline. Elle est gérée par deux modules qui travaillent en tandem : PeakDetector et FeatureEngineer. Leur rôle combiné est de transformer un spectre normalisé en un vecteur de features numériques.
Workflow du Traitement
PeakDetector: Identifie les raies d'absorption.FeatureEngineer: Convertit ces détections en un vecteur numérique.
Classe PeakDetector
Cette classe recherche les minima locaux significatifs dans un spectre et les associe à des raies spectrales connues.
Détails des attributs et de la configuration
Le PeakDetector est initialisé avec des paramètres qui contrôlent sa sensibilité. Ces valeurs ont été optimisées par analyse visuelle interactive.
prominence: Seuil de profondeur minimale pour qu'un pic soit considéré comme significatif. C'est le paramètre le plus important pour filtrer le bruit. Et est hérité de scipy.signal.find_peaks.window: Fenêtre de tolérance (en Ångström) autour d'une raie théorique pour le matching.target_lines: Un dictionnaire des 6 raies astrophysiques que nous cherchons : Hα, Hβ, CaII K, CaII H, Mg_b, et Na_D.
Méthodes Principales
analyze_spectrum(wavelength, flux)
- Rôle : Orchestre le processus complet en appelant d'abord
detect_peakspuismatch_known_lines. - Retourne : Un dictionnaire associant chaque nom de raie cible à un tuple
(longueur_d_onde, prominence)si un pic a été trouvé, ouNonesinon. C'est la sortie principale de ce module.
Classe FeatureEngineer
Cette classe prend le dictionnaire de raies du PeakDetector et le transforme en un vecteur de features riche et prêt pour le Machine Learning.
Méthodes Principales
extract_features(matched_lines, wavelength, flux_norm)
- Rôle : Convertit les détections en un vecteur numérique multi-dimensionnel.
- Logique : Pour chaque raie cible, elle calcule plusieurs métriques physiques :
- Prominence (Force) : La profondeur de la raie, directement issue du PeakDetector.
- Largeur (FWHM) : La "Largeur à Mi-Hauteur", calculée avec
specutilssur une version lissée (Savitzky-Golay) de la raie. - (Expérimental) Skewness : L'asymétrie de la raie. (Actuellement retiré car non informatif).
- Ratios : Elle calcule ensuite des ratios entre les prominences de différentes raies (ex: CaII K / Hβ) pour créer des features de température.
- Retourne : Une liste de features numériques (plus de 15 features au total).
Exemples & Bonnes Pratiques
Ce snippet montre comment les deux classes travaillent ensemble.
# ... à l'intérieur de la boucle du ProcessingPipeline ...
# 1. Détection et matching des raies
matched_lines = peak_detector.analyze_spectrum(wavelength, flux_norm)
# 2. Vectorisation et enrichissement
features_vector = feature_engineer.extract_features(matched_lines, wavelength, flux_norm)
# Résultat : un vecteur de 15+ features [prom_Hα, fwhm_Hα, prom_Hβ, ..., ratio_CaK_Hb, ...]
- Normalisation d'abord : Toujours appliquer le prétraitement et la normalisation avant de détecter les pics.
- Tuning des Paramètres : Les valeurs de
prominenceetwindowont un impact majeur. Elles ont été optimisées grâce à l'outil de visualisation interactif.
- Si une raie n'est pas trouvée, ses features associées (prominence, FWHM) sont mises à zéro.
- Les calculs de FWHM peuvent échouer sur des spectres très bruités. Ces cas sont gérés et les features sont également mises à zéro.
Prochaine Étape du Pipeline
Une fois le vecteur de features obtenu, il est prêt à être utilisé pour entraîner un modèle.