Aller au contenu principal

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

  1. PeakDetector : Identifie les raies d'absorption.
  2. 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_peaks puis match_known_lines.
  • Retourne : Un dictionnaire associant chaque nom de raie cible à un tuple (longueur_d_onde, prominence) si un pic a été trouvé, ou None sinon. 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 :
    1. Prominence (Force) : La profondeur de la raie, directement issue du PeakDetector.
    2. Largeur (FWHM) : La "Largeur à Mi-Hauteur", calculée avec specutils sur une version lissée (Savitzky-Golay) de la raie.
    3. (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.

Python title=
# ... à 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, ...]
💡Bonnes Pratiques
  • Normalisation d'abord : Toujours appliquer le prétraitement et la normalisation avant de détecter les pics.
  • Tuning des Paramètres : Les valeurs de prominence et window ont un impact majeur. Elles ont été optimisées grâce à l'outil de visualisation interactif.
☢️Cas Limites & Erreurs
  • 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.