Les Données : LAMOST DR5
Le pipeline AstroSpectro est construit sur l'exploitation scientifique des spectres stellaires issus du LAMOST Data Release 5 (DR5). Ce relevé spectroscopique à grand champ représente l'une des bases de données astrophysiques les plus riches au monde : plusieurs millions de spectres acquis en basse résolution, couvrant l'ensemble de la voûte céleste accessible depuis Xinglong, Chine.
Le jeu de données utilisé dans le rapport Baker, Caillat & Jean (28 avril 2026) est un sous-ensemble de LAMOST DR5 : N = 43 019 spectres après filtrage qualité, croisés avec Gaia DR3 (rayon 1″), décrits par p = 183 descripteurs spectroscopiques.
Caractéristiques du télescope et du relevé
LAMOST (Large Sky Area Multi-Object Fiber Spectroscopic Telescope) est un instrument unique par ses capacités de multiplexage spectral : 4 000 fibres optiques peuvent observer 4 000 objets simultanément dans un champ de vue de 5° de diamètre.
Structure d'un fichier FITS LAMOST
Chaque spectre LAMOST DR5 est distribué au format FITS compressé (.fits.gz). Un fichier contient typiquement plusieurs extensions :
- Extension 0 (PRIMARY) : En-tête global avec les métadonnées d'observation
- Extension 1 (FLUX) : Tableau du flux spectral (3 921 valeurs float32)
- Extension 2 (IVAR) : Inverse de la variance (qualité pixel par pixel)
- Extension 3 (AND_MASK / OR_MASK) : Masques de pixels défectueux
- Extension 4 (WAVELENGTH) : Grille de longueurs d'onde reconstruite depuis
COEFF0etCOEFF1
Champs clés de l'en-tête FITS
Les champs suivants sont extraits automatiquement par spectra_manager.py lors du parsing. Survoler pour voir le rôle dans le pipeline, filtrer par catégorie.
spectro_only=TrueReconstruction de la grille de longueurs d'onde
La grille λ n'est pas stockée explicitement mais reconstruite depuis les coefficients WCS :
import numpy as np
# Reconstruction de la grille λ (en log ou linéaire selon l'instrument)
coeff0 = header['COEFF0'] # λ₀ du premier pixel
coeff1 = header['COEFF1'] # Δλ / pixel
n_pixels = 3921
wavelength = 10 ** (coeff0 + coeff1 * np.arange(n_pixels)) # en Ångströms
# → [3690 Å ... 9100 Å]
Pipeline de téléchargement et d'organisation
Architecture locale des données
data/
├── raw/ # Spectres FITS bruts
│ └── <planid>/ # Organisés par plan d'observation
│ └── spec-<obsid>.fits.gz
├── catalog/ # Catalogues et journaux
│ ├── master_catalog.csv # Catalogue maître après parsing FITS
│ ├── downloaded_plans.csv # Journal des plans téléchargés (évite les doublons)
│ └── valid_plan_urls.csv # URLs valides extraites du site DR5
├── processed/ # Features extraites
│ └── features_<timestamp>.csv # Matrice X ∈ ℝ^(N×183) prête pour ML
└── models/ # Modèles sauvegardés
└── spectral_classifier_xgboost_<ISO>.pkl
SmartDownloader — Téléchargement intelligent
Le module dr5_downloader.py implémente une logique de téléchargement idempotente :
from src.tools.dr5_downloader import SmartDownloader
downloader = SmartDownloader(
data_dir="data/raw/",
log_file="data/catalog/downloaded_plans.csv",
n_workers=8, # téléchargement parallèle
)
# Lance le téléchargement — reprend automatiquement là où il s'est arrêté
downloader.run(urls_file="data/catalog/valid_plan_urls.csv")
Logique intelligente :
- Consulte
downloaded_plans.csvpour lister les plans déjà complets - Filtre les URLs déjà téléchargées — évite les doublons
- Téléchargement parallèle avec gestion des erreurs et retry
- Log chaque plan complété — la progression est préservée entre sessions
Débit mesuré : ~340 000 spectres/heure (Ryzen 9 5950X, connexion 1 Gbps).
Volume téléchargé
| Statut | Spectres | Fichiers FITS |
|---|---|---|
| Téléchargés | ~250 000 | ~250 000 |
| Parsés → catalogue | ~250 000 | — |
| Après filtrage qualité | 43 019 | — |
| Unprocessed disponibles | ~139 000 | — |
Croisement positional avec Gaia DR3
Chaque spectre LAMOST est apparié avec son homologue dans Gaia DR3 (Gaia Collaboration, Vallenari et al., 2023) par coordonnées angulaires, via gaia_crossmatcher.py :
from src.pipeline.gaia_crossmatcher import GaiaCrossmatcher
matcher = GaiaCrossmatcher(
radius_arcsec=1.0, # rayon de tolérance : 1 arcseconde
gaia_table="gaia_dr3_source.csv",
)
catalog_matched = matcher.crossmatch(lamost_catalog)
Paramètres Gaia DR3 ajoutés :
| Paramètre | Symbole | Unité | Usage dans AstroSpectro |
|---|---|---|---|
| Température effective | Teff | K | Validation PC1 (ρ = +0,831) |
| Gravité de surface | log g | dex | Validation naines/géantes |
| Métallicité | [Fe/H] | dex | Validation PC2 |
| Couleur photométrique | G_BP − G_RP | mag | Corrélation Teff |
| Parallaxe | π | mas | Distance, magnitude absolue |
| Qualité astrométrique | RUWE | — | Filtre qualité : RUWE < 1,4 |
Filtres qualité appliqués
Deux filtres séquentiels garantissent la qualité du jeu de données final :
| Filtre | Critère | Raison |
|---|---|---|
| Rapport signal/bruit | SNR_r > 10 | Garantit la détectabilité des raies et la fiabilité des largeurs équivalentes |
| Qualité astrométrique | RUWE < 1,4 | Exclut les étoiles doubles non résolues et les artefacts de mesure Gaia |
# Filtres appliqués dans data_loader.py
mask_snr = catalog['snr_r'] > 10
mask_ruwe = catalog['ruwe'] < 1.4
catalog_clean = catalog[mask_snr & mask_ruwe]
# N : 250 000 → 43 019 spectres retenus
Accès aux données
| Source | URL | Format |
|---|---|---|
| LAMOST DR5 spectres | http://dr5.lamost.org/ | FITS |
| Gaia DR3 archive | https://gea.esac.esa.int/archive/ | VOTable / CSV |
| Catalogue des plans AstroSpectro | data/catalog/valid_plan_urls.csv | CSV |