Skip to main content

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.

Contexte PHY-3500

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.

Nom complet
Large Sky Area Multi-Object Fiber Spectroscopic Telescope
Localisation
Station astronomique de Xinglong, Hebei, Chine (alt. 900 m)
Miroir principal
4 m × 3,7 m (segmenté, actif)
Champ de vue
5° de diamètre — le plus grand au monde
Fibres optiques
4 000 fibres simultanées

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 COEFF0 et COEFF1

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.

int
float
str
✗ exclu (spectro_only)
Champ FITS
Type
Catégorie
Description
Rôle dans AstroSpectro
OBSID
int
Identification
Identifiant unique d'observation
Clé primaire de croisement
DESIGNID
int
Identification
Identifiant du plan d'observation
Catalogue master
FILENAME
str
Identification
Nom du fichier FITS source
Traçabilité
CLASS
str
Identification
Type spectral LAMOST (STAR/GALAXY/QSO)
Cible de classification
SUBCLASS
str
Identification
Sous-classe spectrale (A, F, G, K, M…)
Cible de classification
RA
float
Observation
Ascension droite (degrés J2000)
Exclu — biais géographique
DEC
float
Observation
Déclinaison (degrés J2000)
Exclu — biais géographique
LMJD
int
Observation
Date julienne modifiée LAMOST
Métadonnée temporelle
PLANID
str
Observation
ID du plan d'observation nocturne
Organisation téléchargement
SEEING
float
Observation
Seeing atmosphérique (arcsec)
Exclu — biais instrumental
Z
float
Spectral
Redshift mesuré (vitesse radiale)
Exclu — métadonnée LAMOST
Z_ERR
float
Spectral
Incertitude sur le redshift
Métadonnée LAMOST
COEFF0
float
Spectral
λ₀ du spectre (WCS — log ou linéaire)
Reconstruction grille λ
COEFF1
float
Spectral
Pas spectral dλ/dpixel
Reconstruction grille λ
SNR_U
float
Qualité
Rapport signal/bruit bande u (~3700 Å)
Qualité UV
SNR_G
float
Qualité
Rapport signal/bruit bande g (~5000 Å)
Qualité visible vert
SNR_R
float
Qualité
Rapport signal/bruit bande r (~6500 Å)
Seuil retenu : SNR_r > 10
SNR_I
float
Qualité
Rapport signal/bruit bande i (~7500 Å)
Qualité proche IR
SNR_Z
float
Qualité
Rapport signal/bruit bande z (~9000 Å)
Qualité IR profond
★ seuil de filtrage qualité retenu · ✗ exclu par spectro_only=True

Reconstruction 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 :

  1. Consulte downloaded_plans.csv pour lister les plans déjà complets
  2. Filtre les URLs déjà téléchargées — évite les doublons
  3. Téléchargement parallèle avec gestion des erreurs et retry
  4. 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é

StatutSpectresFichiers 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ètreSymboleUnitéUsage dans AstroSpectro
Température effectiveTeffKValidation PC1 (ρ = +0,831)
Gravité de surfacelog gdexValidation naines/géantes
Métallicité[Fe/H]dexValidation PC2
Couleur photométriqueG_BP − G_RPmagCorrélation Teff
ParallaxeπmasDistance, magnitude absolue
Qualité astrométriqueRUWEFiltre qualité : RUWE < 1,4

Filtres qualité appliqués

Deux filtres séquentiels garantissent la qualité du jeu de données final :

FiltreCritèreRaison
Rapport signal/bruitSNR_r > 10Garantit la détectabilité des raies et la fiabilité des largeurs équivalentes
Qualité astrométriqueRUWE < 1,4Exclut 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

SourceURLFormat
LAMOST DR5 spectreshttp://dr5.lamost.org/FITS
Gaia DR3 archivehttps://gea.esac.esa.int/archive/VOTable / CSV
Catalogue des plans AstroSpectrodata/catalog/valid_plan_urls.csvCSV