specINTI & specINTI Editor

9 : La spectrographie basse résolution


La spectrographie basse-résolution est attractive, car elle permet de saisir l’ensemble du spectre visible en une fois, plutôt qu’une portion, toujours plus abstraite. Malheureusement, et c’est probablement contre-intuitif, la spectrographie basse-résolution est difficile à pratiquer. La pression est mise à la fois sur le matériel et sur l’utilisateur. Sur le matériel, car la basse résolution s’apparente à l’imagerie grand-champ, qui nécessite un système optique complexe. Le large domaine spectral couvert, par définition, implique par ailleurs une gestion du chromatisme exigeante. Pour l’utilisateur, car il n’est pas aisé de réaliser un étalonnage spectral de qualité sur un large domaine de longueur d’onde, alors que simultanément, la recherche du continuum vrai de l’étoile est assez périlleuse. Le message est clair : si vous débutez en spectrographie, choisissez plutôt la haute résolution spectrale plutôt que la basse résolution.


Après cette mise en garde, voyons comment réduire les spectres basse résolution en compagnie de specINTI.



9.1 : L’état des lieux


Notre support pour cette description est un ensemble d’images brutes telles qu’elles sortent du télescope et pouvant être téléchargées depuis ce lien : starex234.zip


Décompressez cette archive dans un dossier. On suppose ici que le chemin du répertoire est « e:/starex234 », mais vous êtes libre de la localisation et du nom. On y trouve des données brutes acquises avec un télescope Richey-Chretien de 10 pouces (D=254 mm) ouvert à f/8 (RC10 f/8), avec au foyer de celui-ci un spectrographe Star’Ex dans une configuration comprenant une fente de 23 microns de large, un réseau de 300 traits/mm, l’objectif de caméra de 80 mm de focale et une caméra CMOS ASI533MM. Les familiers de Star’Ex auront sûrement reconnu une configuration dite « basse résolution spectrale », permettant de saisir l’ensemble du spectre visible en une seule image. L’observatoire se situe au voisinage de la ville d’Antibes dans le sud de la France, c’est-à-dire dans un site urbain au voisinage de la mer.. 


L’observation concerne d’une part, l’étoile HD207330 (assez brillante, de magnitude 4,2, et de type spectral B3III) et d’autres part, l’étoile SS Cyg (de type cataclysmique, à la magnitude 12 environ au moment de l’acquisition). Vous allez trouver 10 images brutes du spectre de HD207330, et 8 images du spectre de l’étoile SS Cyg, ainsi que des fichiers annexes (offset, dark, flat-field, lampe spectrale).


 Voici l’allure d’une l’image brute de l’étoile Hd207330-1.fits (un extrait du côté bleu) :

Ou encore celle de l’image d’un spectre d’étalonnage spectral - ici provenant d’une lampe néon :

Cette sorte de code barre, en négatif, montre les raies fines produites par la lampe néon agitée devant l’ouverture du télescope juste après l’observation de l’étoile HD207330. Ces raies en émission vont nous aider plus tard à étalonner le spectre en longueur d’onde. 


Remarque : comme cela a déjà été recommandé; toute les données sont acquises en binning 1x1. En outre, rappelez-vous qu’Il est  inutile de travailler sur une image complète car l’image spectrale de l’étoile n’est qu’un fin trait sur le capteur. On va donc détourer les images dès l’acquisition (cropping) pour économiser de la place sur le disque dur et pour plus tard, accélérer les calculs. Ici la fenêtre isolée dans la trame complète du capteur fait 3008 x 331 pixels. Nous avons utilisé le logiciel Prism pour l’acquisition, qui réalise de manière sure et reproductible ce type de détourage. Généralement une fois que l’on a choisi les paramètres du fenêtrage, jamais on n’en change pour une configuration instrumentale donné. Vous aurez alors une banque d’images d’étalonnage que vous pouvez re-utiliser à loisir. C’est du temps gagné.



9.2 : Un petit tour par le fichier d’observation 


Nous allons commencer par extraire le spectre de l’étoile HD207330. Nous exploitons pour cela les 10 acquisitions élémentaires réalisées afin d’accroitre le fameux  Rapport Signal sur Bruit (ou RSB).


On fait considère que vous avez lu la section 5.1 de cette documentation, qui pose les bases de la notion de «fichier d’observation».


Après avoir ouvert l’onglet «Observations», pensez à actualiser en premier le chemin du répertoire d’observation, ou répertoire de travail, par exemple : «e:/starex234/ ».


Vérifiez aussi que vos préfix et postfix sont correct par rapport à votre manière de nommer les fichiers images bruts. Par exemple ici :

Dans le champ « Liste objets », entrez le nom de l’objet à traiter, ici HD207330 : c’est le nom catalogue de celui-ci. C’est aussi le nom générique utilisé pour nommer les fichiers images, ce qui n’est pas une coïncidence et l’intérêt va apparaître immédiatement. Cliquez sur le bouton « Auto » situé en haut de l’onglet. specINTI Editor remplit alors pour vous tous les autres champs, ce qui vous économise du travail et évite les erreurs.


specINTI Editor a trouvé le nom de vos images brutes et inscrit le résultat du nom racine « HD207330- » dans le champ « Liste images ». Le nombre d’images de la séquence a été aussi automatiquement inscrit dans le champ « Nb image par objet ». Le programme a de plus détecté la présence d’une image d’étalonnage associée, dont le nom racine est « HD207330_neon- ». De l’intérêt de bien nommer vos fichiers images ! Vous disposiez de plus d’une seule image d’étalonnage, le logiciel l’aurait vu. Ici il n’y en a qu’une.


Vérifiez que les champs « Offset », « Dark » , « Flat », contiennent le nom « none ».


Vous pouvez en outre remplir l’onglet « Observations » à partir d’un fichier d’observation déjà présent dans le répertoire des images. Il suffit de double cliquer sur le nom « obs_hd2073390_demo1.yaml » dans  la liste à droite. Mais le mieux est que vous remplissiez vous-même l’onglet pour bien vous imprégner de la manière de procéder. 


Il est parfaitement possible de sauvegarder sous le nom de votre choix ce fichier d’observation, dans le répertoire de travail, via le bouton « Sauver » en bas de l’onglet.


La description de  l’observation est à minima, mais suffisante pour un premier test. Voici à quoi ressemble l’onglet « Observations » à ce stade :

Vous vous trouvez alors dans une configuration de traitement vraiment minimaliste  («obs_hd2073390_demo1.yaml» dans le dossier de travail). En effet vous n’avez fourni aucun nom pour les images de pré-traitement offset, dark, flat-field. Vous avez parfaitement le droit de réduire vos spectres de cette manière (remarquez l’usage du « none » pour indiquer que l’on ne dispose pas des images de référence en question).


Bien que cela ne soit pas recommandé, nous allons pour le moment nous contenter de demeurer dans cette situation pour juger les conséquences de ce choix.



9.3 : Un petit tour par le fichier de configuration 


Ouvrez l’onglet « Configuration » et plutôt qu’entrer tous les paramètres à la main, contentez-vous d’utiliser le fichier de configuration prédéfinie  «conf_starex300_demo1.yaml» en faisant un double click sur son nom dans la liste à droite. Voici le résultat :

Lançons tout de suite un premier traitement en cliquant sur le bouton « Excécuter ». Après quelques instants, le profil du spectre apparaît dans une vignette. Il existe à présent aussi dans le dossier de travail sous la forme d’un fichier FITS, dont le nom est « _hd207330_20220905_942.fits ». Affichons le contenu de celui-ci en grand à partir de l’onglet « Visu profil » : 

Nous avons bien là l’allure (très grossière) d’un spectre d’étoile chaude observé en basse résolution depuis 3700 A dans le bleu, jusqu’à 7400 A, à la lisière de l’infrarouge. La promesse du large domaine spectral est bien tenue.


Malheureusement, ce spectre est loin de ressembler à la forme théorique attendue. Le profil tel que nous venons de l’extraire est entaché de fort nombreux défaut. En particulier, nous avons fait l’impasse sur l’étape du prétraitement, classique au demeurant, consistant à soustraire des images brutes du signal d’offset, du d’obscurité (dark) et à diviser par le flat-field pour éliminer un maximum de défauts de réponse du détecteur et du train optique. Bref, c’est un travail bâclé !


Mais avant d’améliorer la situation, on vous propose de jeter un oeil sur le contenu du fichier de configuration en l’état, dont voici le listing complet :


# ********************************************************************

# Configuration Sol'Ex basse résolution

# Mode étalonnage 2

# Démo specINTI #1

# ********************************************************************


# ----------------------------------------------------------------

# Répertoire de travail

# ----------------------------------------------------------------

working_path: D:/starex234


# ----------------------------------------------------------------

# Fichier batch de traitement

# ----------------------------------------------------------------

batch_name: obs_hd207330_demo1


# ----------------------------------------------------------------

# Mode d'étalonnage spectral

# ----------------------------------------------------------------

calib_mode: 2


# -------------------------------------------------------------

# Coefficients du polynôme d'étalonnage

# ------------------------------------------------------------

calib_coef: [1.0367983095565997e-09, 6.535520097252989e-07, 1.546017239090162, 3390.7651563097456]


# -----------------------------------------------------------------------------

# Longueur d'onde des raies néon de référence en A

# -----------------------------------------------------------------------------

wavelength: [5852.49, 6506.53]


# ----------------------------------------------------------------------------

# Position des raies de références neon en pixels

# ----------------------------------------------------------------------------

line_pos: [1580, 2000]


# ---------------------------------------------------------------------------------

# Largeur de la zone de recherche des raies de références

# ---------------------------------------------------------------------------------

search_wide: 20


# ----------------------------------------------------------------

# Largeur de binning

# ----------------------------------------------------------------

bin_size: 22


# ----------------------------------------------------------------

# Zones de calcul du fond de ciel

# ----------------------------------------------------------------

sky: [120, 20, 20, 120]


# -------------------------------------------------------------------

# Bornes en x pour les mesures géométriques

# ------------------------------------------------------------------

xlimit: [500, 2000]


# ----------------------------------------------------------------

# Zone de normalisation à l'unité en A

# ----------------------------------------------------------------

norm_wave: [6400, 6420]


# ----------------------------------------------------------------

# Zone de cropping du profil

# ----------------------------------------------------------------

crop_wave: [3650, 7400]


# ----------------------------------------------------------------

# Longitude du lieu d'observation

# ----------------------------------------------------------------

Longitude: 7.0940


# ----------------------------------------------------------------

# Latitude du lieu d'observation

# ----------------------------------------------------------------

Latitude: 43.5801


# ----------------------------------------------------------------

# Altitude du lieu d'observation en mètres

# ----------------------------------------------------------------

Altitude: 40


# ----------------------------------------------------------------

# Site d'observation

# ----------------------------------------------------------------

Site: Antibes Saint-Jean


# ----------------------------------------------------------------

# Description de l'instrument

# ----------------------------------------------------------------

Inst: RC10 + StarEx300  + ASI533MM


# ----------------------------------------------------------------

# Observateur

# ----------------------------------------------------------------

Observer: cbuil


# ------------------------------------------------------------------------

# Extension des fichiers FITS  (0  -> .fits, 1 - > fit)

# ------------------------------------------------------------------------

file_extension: 0

Vous devez en principe être en terrain connu si vous avez déjà parcouru la section 5.5.


Notez la valeur 2 donnée au paramètre «calib_mode». On rappelle que ce nombre précise la procédure d’étalonnage spectral à adopter pour réaliser le traitement. Les options possibles sont décrites à la section 10. Le mode 2 signifie que la loi de dispersion spectrale (le lien entre le rang des pixels dans le spectre et la longueur d’onde) est déjà évaluée sous la forme d’une fonction polynomiale. Si lambda est la longueur d’onde, et si x un numéro de rang de pixel dans le spectre, la fonction polynôme réalise l’opération : lambda = f(x). La manière d’évaluer les coefficients du polynôme de dispersion spectrale sera décrite plus loin.


Le paramètre «calib_coef» regroupe les termes du polynôme d’étalonnage spectral, ceux de la fameuse fonction d’étalonnage, que l’on impose donc ici : 


calib_coef: [1.0367983095565997e-09, 6.535520097252989e-07, 1.546017239090162, 3390.7651563097456]


Il s’agit ici d’un polynôme de degré 3. Ce degré fixe en quelque sorte la finesse d’ajustement de la loi spectrale. Le degré 3 est ici approprié compte tenu du fait que l’on travaille en basse résolution spectrale et compte tenu de la distribution des raies de référence qui vont nous permettre plus tard d’établir la valeur de ces coefficients. Sous une forme plus classique, plus mathématique, voici comment ce présente notre polynôme (en arrondissante les valeurs) :


Lambda = 1.03680e-09 X^3 +  6.53552e-07 X^2 + 1.54602 X + 3390.765


Les valeurs des paramètres «wavelength» et « line_pos » indiquent respectivement la longueur d’onde de raies produites par la lampe néon d’étalonnage et la position approximative de ces raies dans l’image en pixels et suivant l’axe horizontal (axe de dispersion). specINTI va se servir de ces informations pour ajuster le premier terme du polynôme d’étalonnage (voir « calib_coef »), le terme dit « constant », pour tenir compte d’un éventuel glissement spectral entre le moment où le polynôme a été évalué et le moment où l’observation est réalisée. Cette correction en longueur d’onde est le fondement du mode d’étalonnage #2. Tous les autres termes du polynôme sont supposés stables et demeurent inchangés (ils ont pu être calculé bien avant l’observation ou après). Dans notre exemple, nous avons choisi deux raies aux coordonnées x = 1580 et x = 2000 (vous pouvez les repérer dans l’image HD207330_neon.fits). specINTI va réaliser une moyenne sur ces deux mesures (vous pourriez très bien définir une seule raie ou 10). Vous avez une tolérance sur la précision de position X. Cette tolérance est réglé par le paramètre   «search_wide». Dans l’exemple, elle est de +/-10 pixels, ce qui est généreux (attention à ne pas définir une tolérance trop grande, car specINTI peut confondre alors des raies voisines). Si vous ne définissez pas «search_wide», la valeur par défaut de tolérance est de +/-25 pixels.



9.4 : Un petit tour par la console 


Rappelez-vous que specINTI délivre un certain nombre d’informations dans la fenêtre de sortie (attention elle peut être masquée par la fenêtre principale) alors que le programme se déroule. Voici un exemple de ce «log» de traitement :



-------------------------------------------------

specINTI 2.0.0

Path = D:/starex234\

-------------------------------------------------

Observation file: D:/starex234\obs_hd207330_demo1.yaml

****************************************************

Target: HD207330

****************************************************

Target processing...

..........

Total exposure time = 300.0 seconds

Computed mean Y = 177

Processing calibration...

$$$$$ -> _step3

..........

Tilt correction...

Computed tilt angle = -0.329

..........

Slant correction...

Computed slant angle = 0.002

..........

Sky substraction...

Profile standard extraction...

Evaluate lines position...

Predefined calibration function + computed shift...

Calibration coefficients:

1.0367983095565997e-09, 6.535520097252989e-07, 1.546017239090162, 3390.7651563097456

Resampling...

Mean spectral shift = 15.850 A

FWHM = 5.12 pixels

Dispersion = 1.5460 A/pixel

Resolution power = 724 @ 5732 A

Compute stacking...

Cropping...

Normalize...

SIMPLE  = 'T       '                                                            

BITPIX  =                  -32                                                  

NAXIS1  =                 4818                                                  

CRVAL1  =    3649.978935166607                                                  

CDELT1  =   0.7784197563269117                                                  

BZERO   =                    0                                                  

BSCALE  =                    1                                                  

EXPTIME =                300.0                                                  

OBJNAME = 'HD207330'                                                            

EXPTIME2= '10 x 30 s'                                                           

BSS_ITRP=                  724                                                  

SPE_RPOW=                  724                                                  

BSS_VHEL=                    0                                                  

DATE-OBS= '2022-09-05T22:35:55.063200'                                          

GEO_LONG=                7.094                                                  

GEO_LAT =              43.5801                                                  

BSS_SITE= 'Antibes Saint-Jean'                                                  

BSS_INST= 'RC10 + StarEx300  + ASI533MM'                                        

OBSERVER= 'cbuil   '                                                            

BSS_COSM= 'Removed '                                                            

BSS_TELL= 'None    '                                                            

BSS_NORM= 'None    '                                                            

CRPIX1  =                    1                                                  

CTYPE1  = 'Wavelength'                                                          

CUNIT1  = 'Angstroms'                                                           

VERSION = 'specINTI 2.0.0'                                                      

JD-OBS  = '2459828.4416'                                                        

----------------------------------------------------

Output files names:

D:/starex234\_hd207330_20220905_942.fits

D:/starex234\_hd207330_20220905_942.png

D:/starex234\_hd207330_20220905_942_2D.fits

D:/starex234\_hd207330_20220905_942.yaml

D:/starex234\_hd207330_20220905_942_log.txt

----------------------------------------------------

End of the processing.

On trouve au début un rappel du nom de la cible traitée, le temps de pose total (10 x 30 secondes = 300 secondes), l’angle de « tilt » du spectre par rapport à l’horizontale (ici -0,329°), l’angle de « slant »  des raies (inclinaison des raies spectrales par rapport à la verticale, ici 0,002°), le rappel du polynôme d’étalonnage, la valeur du décalage spectral entre le moment où le polynôme est évalué et le moment de l’observation  (ici 15,8 A, pour l’essentiel lié aux flexions mécaniques dans spectrographe), la largeur des raies spectrales monochromatiques à mi-hauteur de leurs profils (5,12 pixels), la dispersion spectrale moyenne (1,546 A/pixel), le pouvoir de résolution à une certaine longueur d’onde (c’est une valeur indicative).


Enfin, le « log » vous informe des fichiers sauvegardés dans le répertoire de travail à la fin du traitement :


On a vu que le fichier _hd207330_20220905_942.fits est le profil spectral calculé, surement le plus important. Il est au format FITS. Vous allez pouvoir analyser celui-ci avec des programmes spécialisés comme VisualSpec, ISIS, SpAudace, etc.


Le fichier _hd207330_20220905_942_2D.fits est une image ressemblant fortement aux images 2D de départ du spectre de l’étoile HD207330, à ceci près qu’il s’agit ici de la somme des 10 images brutes, prétraitées, avec le fond de ciel retiré, corrigé géométriquement (par exemple l’angle de tilt est à présent nul) et recentrées suivant l’axe vertical.


Le fichier _hd207330_20220905_942.png est une image miniature au format graphique PNG du profil de l’étoile (c’est une version dite «Quick-Look», utile pour ce faire une petite base illustrée de profils ou pour communiquer). 


Le fichier _hd207330_20220905_942.yaml est une copie du fichier de configuration utilisé pour traiter l’objet. Cette copie va ce révéler précieuse si au bout d’un jour, d’un mois ou d’une année, vous souhaitez retraiter vos images à l’identique (il suffit de copier ce fichier YAML dans le sous-répertoire «_configuration» du répertoire d’installation de specINTI).


Vous allez aussi trouver un fichier  _hd207330_20220905_942_log.txt qui contient un extrait du « log » que l’on décrit actuellement.


Rappelez-vous que le « log » peut être plus fourni si vous ajoutez la ligne suivante dans le fichier de configuration :


cherck_mode: 1



9.5 : Offset, dark, flat-field et compagnie


Le prétraitement précédent des images spectrales de l’étoile HD207330 est loin d’être réalisé dans les règles de l’art. En particulier, il ne respecte pas un des fondements du traitement des images astronomique, qui est le retrait des biais induits par le détecteur, entre autres. Retenez qu’avant de devenir des spectres sous forme de courbes (des profils spectraux), les données acquises avec un spectrographe sont bel et bien des images, vous n’allez donc pas être dépaysé si vous venez de la photographie astronomique.


Examinez le contenu du dossier de travail associé à cette démonstration. Vous allez y trouver :


- Une image du signal d’offset, o-1.fits. Rappel : les images d’offset sont obtenues en bouchant l’ouverture du télescope et en posant très brièvement (0,1 seconde par exemple, ou moins). Vous pouvez aussi vous trouver dans une pièce sombre, le télescope n’est pas nécessaire.


- Une série de 15 images du signal d’obscurités, exposées ici 900 secondes chacune, nommée n900-1; n900-2, … n900-15. Les images dark (ou du signal d’obscurité, encore dit thermique) sont réalisées en bouchant l’ouverture du télescope et en posant au moins aussi longtemps que le plus grand temps d’exposition pratiqué sur les étoiles. De jour, vous pouvez user d’un stratagème en faisant les darks après avoir déposé le spectrographe avec sa caméra dans un compartiment de réfrigérateur pour simuler la fraîcheur de la nuit et en passant les câbles par l’entrebâillement de la porte. specINTI sait parfaitement ajuster numériquement le temps de pose de toutes vos images pour un traitement cohérent avec le temps de pose de votre «dark» maître. Aussi, si vous avez acquis des images spectrales avec une exposition de 180 secondes, il est inutile de faire des darks de 180 secondes, car ceux exposés 900 secondes conviendront parfaitement pour le traitement, le logiciel fera ce qu’il faut. Il est en revanche important que la température du capteur soit toujours la même (-12°C pour les données de cette démonstration). 


- Une séquence de 15 images flat-field, (ou «champ plat»), nommées tung-1, … tung-20.  Ces images ont été réalisées de jour, sur table, en suivant la procédure décrite à la section 5.4.


L’une des tâches que doit accomplir le logiciel est de soustraire à toutes les images brutes le signal d’offset et le signal thermique (image du signal d’obscurité à laquelle on a retiré le signal d’offset), puis diviser le résultat par l’image flat-field (elle même corrigée de l’offset et du dark). Cette division permet de supprimer une bonne partie du défaut de réponse spectrale de l’instrument, réponse qui n’est malheureusement pas uniforme tout le long du spectre. Quand on évoque «réponse» il faut entendre «sensibilité» d’un point de votre détecteur au flux de rayons lumineux qui parviennent à l’entrée du télescope.


Pour indiquer à specINTI d’appliquer le traitement en utilisant les images d’étalonnage offset, dark, flat-fied, vous devez remplir les champs correspondant depuis l’onglet «Observations» (aidez-vous du bouton « Auto » pour que specINTI trouve pour vous le nombre d’images) :

Relancez le traitement en cliquant sur le bouton « Excécuter » (sans rien faire d’autres, c’est inutile, car specINTI Editor sauvegarde automatiquement vos modifications). Le résultat est assez différent du précédent :

Ce profil ressemble nettement plus à ce que l’on peut attendre d’une étoile chaude comme HD 207330 (beaucoup de bleu, pas trop de rouge).


Pour autant, le profil demeure encore perturbé par la « réponse spectrale de l’instrument », c’est-à-dire la manière dont l’instrument dans son ensemble (télescope + spectrographe + détecteur) modifie le signal vrai de l’étoile en fonction de la longueur d’onde. Cette distorsion vient de la transmission optique qui colore le flux lumineux qui traverse celle-ci, du rendement quantique du détecteur variable avec la longueur d’onde, etc. Pour mettre bon ordre, nous allons devoir établir cette fameuse réponse instrumentale, puis redresser la forme distordue du spectre en divisant celle-ci par cette réponse. C’est bien souvent la partie qui se révèle la plus difficile lorsqu’on débute en spectrographie, et singulièrement en spectrographie basse résolution.


Dès à présent, faisons deux petites retouches, l’une dans le fichier d’observation, l’autre dans le fichier de configuration.


Les plus habitués d’entre vous ont peut-être décelé une anomalie dans le prétraitement réalisé précédemment. Nous ne disposons que d’une seule image du signal (o-1.fits). C’est bien peu pour espérer minimiser le bruit dans l’image maître d’offset, car nous n’avons pas la possibilité de réaliser la moyenne d’acquisitions indépendantes du signal d’offset. Mais ce choix est volontaire, car avec les capteurs CMOS Sony récents (par exemple celui de la caméra ASI533MM), le signal d’offset, en dehors du bruit, est quasi similaire pour tous les pixels. Autant donc considérer l’image maître d’offset comme une image parfaitement uniforme, que l’on peut synthétiser par un calcul élémentaire, et où le bruit est donc nul. Nous allons pour cela insérer une fonction dans le fichier de configuration, suivant un principe expliqué à la section 5. Ajoutez simplement la ligne suivante dans le fichier de configuration, où bon vous semble :


_img_make_offset: [o-1, _offset]


La fonction « _img_make_offset » analyse l’image « o-1 » en calculant son intensité moyenne, puis synthétise une image artificielle en donnant à tous les pixels l’intensité moyenne précédemment calculée. Cette image synthétique est sauvegardée dans le dossier de travail automatiquement sous le nom « _offset ». L’image en question est très similaire à l’offset réel, mais sans aucun bruit. Lancez le programme en cliquant sur le bouton « Exécuter ». Il s’arrête automatiquement lorsque la fonction a fait son calcul. L’image « _offset » se trouve alors sur votre disque. Pour finir, supprimez la ligne de la fonction.


Dans le fichier d’observation, vous pouvez à présent écrire (les images maîtres _dark et _flat ayant été calculées lors du premier lancement du programme) :

La seconde retouche, qui concerne cette fois le fichier de configuration, consiste à y ajouter le paramètre « planck », qui permet de tenir compte de la température de couleurs de la lampe tungstène utilisée pour réaliser le flat-field :


# Température lampe tungstène 

planck: 2900

Pour voir le  résultat, cliquez simplement sur le bouton « Exécuter » après avoir apporté les modifications dans le fichier de configuration :

Les raies dans la partie ultraviolette du spectre sont mieux perçues. Pour autant le spectre calculé n’est pas encore satisfaisant. En particulier, les sortes d’oscillation plus ou moins périodiques que l’on peut voir dans le rouge ne sont pas un très bon signe, car assurément pas naturelles (le continuum d’une telle étoile est bien lisse en réalité). Il va falloir y remédier !



9.6 : La correction de la transmission atmosphérique


Tant que nous en sommes dans le fichier de configuration, calculons le spectre hors atmosphère en y ajoutant le paramètre « corr_atmo » (voir section 5.8.2) :


# ——————————————————————————— 

# Correction de la transmission atmosphérique

# ———————————————————————————

corr_atmo: 0.13


Ci-après, l’aspect de la transmission atmosphérique ainsi calculée en fonction de la longueur d’onde (attribuez la valeur 1 au paramètre « check_mode » pour disposer de cette courbe). Il apparaît que l’absorption de l’atmosphère est sévère dans la partie bleue du spectre (plus de la moitié du signal hors atmosphère est perdu) :

Voici la forme du profil spectral de l’étoile avant la correction de la transmission atmosphérique (à gauche), et après correction (spectre hors atmosphère, à droite) :

Astuce : il est discuté à la section 5.8.4 comment le profil spectral est effectué par l’absorption diffuse de l’atmosphère terrestre, mais aussi par l’absorption moléculaire, et comment cette dernière peut être prise en compte pour évaluer un spectre hors atmosphère de l’étoile plus précis. Reprenons cette procédure (facultative, d’autant plus qu’elle est relativement complexe sous specINTI), en constatant d’abord que les molécules H2O et O2 laissent une trace bien visible y compris dans les spectres acquis en basse résolution spectrale :

Nous allons utiliser le fichier «_molecular_30mm.fits», présent dans la base « atmo_molecular », que nous vous avons invité à télécharger à la section 5, pour tâcher de gommer la trace des raies moléculaires dans le spectre de l’étoile H D207330 :


1- Copier le fichier « _molecular_30mm.fits» dans votre dossier de travail (dans l’exemple D:\starex\)


2 - Depuis l’onglet «Observations» de specINTI, déroulez le menu «Mode avancé».


3 - Dans le champ «Liste fichiers trans atm», inscrivez le nom du fichier de transmission atmosphérique issu du modèle ESO (sans préciser l’extension .fits) :

4 - Dans le fichier de configuration courant, ajoutez le paramètre « atmo_blur » avec la valeur 25 :


atmo_blur: 25


Cette valeur est celle trouvée par essais successifs pour conduire le spectre synthétique de l’atmosphère à résolution de notre spectrographe.


5 - Lancez le traitement en cliquant sur le bouton « Exécuter ».


Dans les extraits de profil ci-après, avant le retrait des raies telluriques et après :


9.7 : L’étalonnage en longueur d’onde


A la section 7.3 nous nous sommes contentés d’indiquer que nous utilisions un polynôme de dispersion pour étalonner le spectre en longueurs d’onde. Dans notre cas il s’écrit :


Lambda = x^3 * C3 + x^2 * C2, x * C1 + C0


Avec,


C3 = 1.03680e-09

C2 = 6.53552e-07

C1 = 1.54601

C0 = 3390.7651


Mais d’où viennent les coefficients de cette fonction, comme sont estimées les valeurs ?


Pour répondre à ces questions nous devons disposer d’un spectre comportant un jeu des raies dont on connaît bien la longueur d’onde (lambda0) et dont la position x peut être mesurée dans une image 2D du spectre en question. A partir de ces couples (lambda0, x), si possible nombreux et bien distribués pour réduire la marge d’erreur, on exploite un outil mathématique capable de faire passer la meilleure fonction polynomiale (f()) parmi les couples mesurés (méthode dite des « moindres carrés » ), tel que :


Lambda = f(x)


Note : la technique consiste à minimiser l’écart quadratique (lambda0 - lambda)^2, entre les longueurs d’onde apparentes réelles (ou dites aussi « observée ») et celles calculées avec le polynôme (on dit donc « calculée »), c’est le O-C. 


Donc, pour trouver les coefficients du polynôme, vous devez sélectionner une série de couples (lambda0, x) à partir du spectre d’une lampe étalon à raies d’émission, dans notre cas une lampe à décharge contenant du gaz néon.


Notre approche est particulière pour la prise de vue de l’image d’étalonnage. Elle se déroule en deux temps :


(1) une première prise de vue hors du télescope, sur table, qui ne concerne que le spectrographe. Elle sert à évaluer les termes du polynôme, bien au calme donc, en ce détachant de la nuit d’observation. Cette mesure est généralement réalisée qu’une seule fois dès lors que l’on ne dérègle pas significativement le spectrographe.


(2) une seconde prise de vue, qui elle est pratiquée sur le télescope, en parallèle des observations sur les cibles astronomiques. Celle-ci sert uniquement à recaler le terme C0 du polynôme (terme « constant ») afin de rafraîchir celui-ci pour les conditions de la l’observation. La valeur de ce terme est affectée au premier ordre par les flexions mécaniques et les déformations thermo-élastiques, alors que les autres termes du polynôme le sont très peu (dans notre instrument les vraies constantes sont les termes C1, C2, C3).


Pour la première prise de vue de référence sur table, la disposition est très simple :

La source est une veilleuse néon à culot E10 (disponible auprès de Conrad, voir ce lien), que l’on positionne devant un diaphragme recouvert d’un diffuseur (papier calque). Ce montage rappelle celui décrit à la section 5.4. La méthode de calcul du diamètre du diaphragme est aussi la même. Le diaphragme est fabriqué ici en impression 3D et monté à l’extrémité d’un coulant 31,75 mm (par exemple).


La source est brillante et le temps de pose bref, de l’ordre d’une seconde. Malheureusement, c’est classique avec une source néon les raies les plus immédiatement visibles sont localisées dans le partie rouge du spectre. En veillant à ne pas saturer le détecteur par le choix du temps de pose (ici 0,5 seconde), voici ce que cela donne dans le contexte de notre démonstration : 

De fait, les raies sont concentrées dans la partie droite de l’image, c’est-à-dire dans le rouge, et rien dans la partie bleue. Cette situation est désastreuse lorsqu’il faut ajuster un polynôme supposé permettre d’étalonner toutes les longueurs d’onde du domaine spectral exploré (il est possible d’interpoler entre deux raies, alors que l’extrapolation avec un polynôme, là où il n’y a plus information, est hasardeuse). Vous allez trouver cette image dans le répertoire de la nuit d’observation sous le nom « tung_neon-1.fits », et vous pouvez faire le constat vous-même en affichant son contenu.


Remarque : le nom de ce fichier commence par « tung » car les images ont été prises à la suite des images flat-field sur table. 


En réalité , la situation n’est pas si sombre que cela, pour preuve, examinons une seconde image de la lampe d’étalonnage sur table, appelée «tung_neon-2.fits» (elle aussi présente dans le dossier de travail), exposée cette fois 30 secondes, donc bien plus que la première :

Les raies situées du côté rouge sont considérablement saturées, mais bonne surprise, la présence de raies se révèle aussi dans les parties verte, bleue et même ultraviolettes du spectre. Ces dernières vont nous permettre d’évaluer un vrai polynôme de dispersion adapté à la basse résolution. Malheureusement, les raies coté rouge sont à présent saturées à cause du long temps de pose, et cette partie du spectre n’est donc pas exploitable, a priori. Certes, en joutant sur le temps de pose, nous obtenant une distribution relativement uniforme des raies d’étalonnage, mais l’information est dilué dans deux images, alors que specINTI n’accepte d’une seule image pour calculer les termes du polynôme.


La solution à cette difficulté consiste à fusionner nos images d’étalonnages exposées 0,5 seconde et 30 secondes dans une unique image en faisant en sorte qu’aucune raie ne soit saturée (la mesure précise de position d’une raie saturée est en effet impossible). Nous allons pour cela utiliser une technique bien connue en photographie, dite à «domaine de haute-dynamique», ou HDR (High Dynamic Range). C’est ainsi qu’il est possible, en photographie, de combiner des images de la même scène réalisées avec des temps d’exposition différents pour déboucher les parties obscures, tout en détaillant les fortes lumières.


Avec specINT, cette fusion est calculée en écrivant une seule ligne dans le fichier de configuration, l’intitulé de la fonction «_img_merge», dont la syntaxe est :


_img_merge: [image1, image2, seuil, imageHDR]


avec :


- image1, l’image de la source d’étalonnage réalisé avec le temps t1 ;

- image2, l’image de la source réalisée avec le temps t2 ;

- seuil,  un niveau d’intensité dans l’image la plus exposée à partir duquel on considère que  le seuil de saturation est atteint ;

- imageHDR : le résultat de la fusion des deux images de départ.


Pour ce qui concerne le seuil, si l’image est codée sur 16 bits, on peut songer à utiliser la valeur 65535 (= 16^2 - 1). Mais il est sage de prendre une valeur un peu inférieure à ce maximum théorique, par exemple un niveau de seuil de 60000 ADU sera parfait dans la plupart des situations.


Note : les images qui proviennent d’une caméra ASI533MM sont en réalités codées sur 14 bits, mais le fabricant multiplie artificiellement les intensités de tous les pixels par 4 pour simuler une image 16 bits. C’est une petite tromperie.


Pour notre application, vous écrivez la ligne suivante dans le fichier de configuration, où bon vous semble,  puis faire «Exécuter» :


_img_merge: [tung_neon-1, tung_neon-2, 60000, neon_HDR-1]


Vous pouvez aussi écrire un fichier de configuration spécifique à cette fonction («conf_make_HDR.yaml» dans la distribution) :


# *************************************************************************

# Fusion de deux images de la même scène en une image HDR

# *************************************************************************


# ----------------------------------------------------------------

# Répertoire de travail

# ----------------------------------------------------------------

working_path: D:/starex234


# --------------------------------------------------------------

# Synthèse d'une image moyenne

# --------------------------------------------------------------

_img_merge: [tung_neon-1, tung_neon-2, 60000, neon_HDR-1]


Note : rappelez-vous qu’on ne doit trouver qu’une seule fonction à la fois dans le fichier de configuration. S’il y a en déjà une présente, effacez là, ou ajoutez un «#» devant pour quelle deviennent un commentaire.


Affichez l’image résultat «neon_HDR-1» depuis l’onglet «Visu image», vous aller vous apercevoir que c’est bien une image HDR , qui montre à la fois les basses lumières (avec un bon RSB) et les hautes lumières (sans saturation).


Le document suivant permet de localiser un certain nombre de raies utilisables pour calculer la loi de dispersion de notre spectrographe Star’Ex sur table (ici il s’agit d’un affichage logarithmique de l’image « neon_HDR-1 »). Les longueurs d’onde sont issues d’un atlas de nombreuses sources spectrales que nous avons compilées, et qui peut être téléchargé à cette adresse : 

http://www.astrosurf.com/buil/specinti/Atlas_Spectral_Lamps.pdf

Remarque : peut-être vous demandez-vous pourquoi ces images de la lampe ne sont pas obtenues directement sur le télescope ? La raison est qu’il faudrait des temps de pose bien trop longs pour pouvoir saisir les raies de faible intensité, alors durant les nuits d’observation, toujours trop courtes, il y a mieux à faire qu’acquérir des images d’étalonnage.


Nous sommes à présent en situation de trouver les couples (lambda0, x). Pour cela, dans l’image «neon_HDR-1» repérez la position x (horizontale) de quelques raies donc on connaît la longueur d’onde, en vous aidant de la figure annotée précédente. Par exemple, la raie de longueur d’onde 5400,562 A est trouvé à la position x = 1299 (vous avez une tolérance de plusieurs pixels, ne vous inquiétez pas - le résultat ne changera pas si vous relevez x=1296, par exemple). Nous avons donc un couple (5400.562, 1299). Procédez de la même manière pour d’autres raies.


Rappel : depuis l’onglet «Visu image» pour obtenir les coordonnées d’un point dans l’image, positionner le pointeur de souris sur celui-ci, puis click gauche.


Les éléments de chaque couple sont séparés dans deux listes, l’une pour les longueurs d’onde, l’autre pour les coordonnées dans l’image. Elles constituent des valeurs des paramètres respectifs «wavelength» et «line_pos». Pour notre exemple, voici ce que nous avons établi :


wavelength: [3948.979, 4044.418, 5037.751, 5116.590, 5400.562, 5852.488, 6143.063, 6402.248, 6506.528, 6717.043, 7032.413, 7245.166, 7438.898, 7635.106]


line_pos: [362, 424, 1065, 1116, 1299, 1590, 1776, 1943, 2010, 2145, 2347, 2483, 2606, 2730]


Remarques : les deux listes doivent contenir le même nombre d’éléments (specINTI vous préviens si ce n’est pas le cas). Il doit bien sûr y avoir une correspondance entre elles (exemple, au rang numéro 6, on retrouve bien notre couple (5400.562, 1299)). L’établissement de ces deux listes est relativement fastidieux, il ne faut pas se tromper. Conservez celles-ci dans un coin pour une réutilisation, vous n’avez pas alors à refaire le travail. 


Comment gérer ces deux listes afin d’ajuster les paramètres d’un polynôme d’un certain degré (ici 3)  passant au mieux par tous ces couples de 

points. specINTI propose un outil spécialement prévu qui est activé en choisissant comme mode d’étalonnage (le paramètre «calib_mode»), la valeur -2.  Vous avec bien lu, il est question de la valeur -2 et non pas 2. De cette manière, specINTI réalise un prétraitement classique sur une image de spectre à émission, mesure précisément la position des raies dont la position approximative est fournie par la paramètre «line_pos», calcule les termes du polynôme de dispersion et arrête le travail à ce stade.


Dans notre situation, l’image spectrale à traiter est «neon_HDR-1», d’où le fichier d’observation correspondant, que vous nommez «obs_calib-2» (par exemple) :

Le fichier de configuration se présente quant à lui de la manière suivante (vous avez une copie dans répertoire «_configuration» sous le nom «conf_starex300_mode-2.yaml», ce qui vous évite de tout taper) :


# ********************************************************************

# Configuration Sol'Ex basse résolution

# Mode étalonnage -2 

# Recherche du polynôme de dispersion à partir 

# d'un spectre à raies d'émission

# ********************************************************************


# ----------------------------------------------------------------

# Répertoire de travail

# ----------------------------------------------------------------

working_path: D:/starex234


# ----------------------------------------------------------------

# Fichier batch de traitement

# ----------------------------------------------------------------

batch_name: obs_calib-2


# ----------------------------------------------------------------

# Mode d'étalonnage spectral

# ----------------------------------------------------------------

calib_mode: -2


#  -----------------------------------------------------------------------------

# Ordre du polynôme de dispersion à évaluer

#  -----------------------------------------------------------------------------

poly_order: 3


# --------------------------------------------------------

# Longueurs d'onde des raies étalon

# -------------------------------------------------------

wavelength: [3948.979, 4044.418, 4707.375, 5037.751, 5116.590, 5400.562, 5852.488,  6143.063, 6402.248, 6506.528, 6717.043, 7032.413, 7245.166, 7438.898, 7635.106]


# -------------------------------------------------------------------------

# Coordonnées en pixel des raies dans l'image

# -------------------------------------------------------------------------

line_pos: [362, 424,  851, 1065, 1116, 1299, 1590, 1776, 1943, 2010, 2145, 2347, 2483, 2606, 2730] 


# ---------------------------------------------------------------------------------------------

# Coordonnée verticale typique de la trace du spectre de l'étoile

# --------------------------------------------------------------------------------------------

posy: 177


# ----------------------------------------------------------------

# Largeur de binning

# ----------------------------------------------------------------

bin_size: 30


# ---------------------------------------------------------------------------------------

# Largeur de la zone de recherche des raies de références

# ----------------------------------------------------------------------------------------

search_wide: 10



Ce fichier YAML est relativement court. On indique bien sûr le chemin du dossier de travail. Puis vient le nom du fichier d’observation à utiliser. On précise bien que le mode d’étalonnage est le numéro -2 (paramètre « calib_mode » ).


Le paramètre « poly_ordre »  permet de préciser le degré du polynôme à ajuster par la méthode des moindres carrés, ici la valeur 3. Il est très rare d’avoir à pousser jusqu’au degré 4, car sous couvert de faire un calcul plus rigoureux sur le plan mathématique, cette finesse d’ajustement nous éloigne de la loi d’étalonnage effective lorsque les points à ajuster sont distribués de manière non uniforme.


Le paramètre « posy » prend comme valeur la coordonnée verticale (y) de la trace des spectres approximative dans les images 2D (relever cette valeur avec le pointeur de souris, à quelques pixels près).


Nous connaissons déjà le paramètre « bin_size », la hauteur de la zone d’agglomération du signal dans les images 2D digitales afin de construire le profil spectral. Ici cette largeur est choisie de 30 pixels, une valeur typique et assez généreuse, afin d’obtenir un rapport signal sur bruit. 


Enfin, « search_wide » précise la tolérance en pixels pour la recherche des raies à partir des positions approximatives indiquées dans « pos_line ». Ici la valeur est de 10 pixels pour éviter la pollution de raies voisines à celles sélectionnées.


Voici le fichier « log » en lançant specINTI avec ce jeu de paramètres :




















-------------------------------------------------

specINTI 2.0.0

Path = D:/starex234\

-------------------------------------------------

Observation file: D:/starex234\obs_calib-2.yaml

****************************************************

Target: neon_hdr

****************************************************

Offset:D:/starex234\_offset.fits

Dark:D:/starex234\_dark.fits

Flat-field:D:/starex234\_flat.fits

Target processing...

.

Dark coefficient = 0.033

Total exposure time = 30.0 seconds

Predefined Y = 177

.

.

Slant correction...

Computed slant angle = 0.045

.

Evaluate lines position...

3948.979, 4044.418, 4259.362, 5037.751, 5116.59, 5400.562, 5852.488, 6143.063, 6402.248, 6506.528, 6717.043, 7032.413, 7245.166, 7438.898, 7948.176

----------------

362.23140702118303, 424.29871200599337, 563.1984397309055, 1064.4572726716287, 1115.6126789484579, 1298.550894001235, 1589.0483427917736, 1775.7111261669618, 1942.1253806505647, 2009.0621250549345, 2144.0574956788487, 2346.009322244964, 2482.0270406386467, 2605.632873655251, 2928.8439061486642

----------------

Calibration function...

calib_coef: [1.6185745216759765e-09, -3.193823703854025e-06, 1.5529347323253762, 3387.685356134384]

O-C: [ 0.665 -0.173 -0.659  0.251 -0.29  -0.294  0.239  0.379  0.317  0.226

  0.067 -0.228 -0.452 -0.545  0.495]

Root Mean Square Error = 0.3912 A

FWHM = 4.80 pixels

Dispersion = 1.5567 A/pixel

Resolution power = 796 @ 5940 A

End.


Parmi les nombreuses informations retournées, on trouve les termes du polynôme recherché :


calib_coef: [1.6185745216759765e-09, -3.193823703854025e-06, 1.5529347323253762, 3387.685356134384]


Vous pouvez copier cette ligne en l’état  dans le fichier de configuration qui sert à traiter vos spectres (en mode d’étalonnage 2 par exemple).


Le « log »  fournit aussi l’écart en angströms entre les longueurs Observés (celles issues du catalogue) et les raies Calculés (celles issues du polynôme), et ceci pour toutes les raies spécifiées. C’est le O-C, pratique pour repérer des anomalies (des valeurs numériques erronées par exemple). Le RMS (Root Mean Square) est un paramètre qui donne une vision plus synthétique de cet écart. Il vaut ici 0,39 A (à 3 sigma), ce qui signifie que l’erreur statistique d’étalonnage avec les données fournies est de +/-0.39 A. Plus ce nombre est petit, mieux c’est. Avec un spectrographe à basse résolution spectrale, l’erreur d’évaluation des termes du polynôme peut atteindre 1 A. Commencez à vous inquiéter sérieusement si le RMS dépasse 5 A. On trouve enfin la finesse spectrale moyenne et le pouvoir de résolution à une certaine longueur d’onde. sepcINTI utilise toutes les raies spécifiées pour réaliser cette évaluation, mais l’information n’est qu’indicative, car très dépendante des paramètres de calcul.


Remarque : la toute première raie des listes « wavelength » et « line_pos »  est particulière pour specINTI : elle est exploitée pour calculer l’angle de «slant» (inclinaison des raies par rapport à la verticale). Il est donc souhaitable d’indiquer au début des listes une raie relativement intense pour que le calcul soit précis. Rappelez-vous que l’ordre d’apparition des raies dans les listes peut être quelconque, mais il faut veiller bien sûr à la cohérence des raies entre les deux listes.


Note : les spectres qui illustrent cette démonstration ont été réalisés avec un spectrographe Star’Ex. Celui-ci utilise des lentilles en interne pour transporter les images (deux paires de doublets achromatiques spécialement calculés pour le projet Sol’Ex/Star’Ex). Malheureusement, les verres optiques finissent par devenir opaques à la lumière dans l’ultraviolet, en deçà d’une certaine longueur d’onde. On considère que Star’Ex bloque tous les rayons dont la longueur d’onde est inférieure à 3640 A. Pour pouvoir explorer le spectre plus loin dans l’ultraviolet, le mieux est d’utiliser des optiques à miroirs, tel que le fait le spectrographe UVEX(4) - un puissant instrument que vous pouvez aussi fabriquer en impression 3D. Voici justement le spectre de notre lampe néon « Conrad » réalisé avec UVEX(4) (réseau de 600 traits/mm, fente de 25 microns, caméra ASI183MM), montrant à présent des raies en deçà de 3640 A, précieuses pour étalonner les spectres provenant d’un instrument tel que UVEX (the Ultra-Violet Explorer) :

Quelle est en fin de compte la précision d’un étalonnage spectral ? Ne vous fiez pas trop à la précision proprement dite du polynôme de dispersion spectrale. C’est une indication, mais bien d’autres soucis peuvent affecter la précision. En basse résolution et avec une couverture spectrale aussi large que celle de notre exemple, il est raisonnable de considérer que la précision est égale à 1/5 de la finesse spectrale. Ici le pouvoir de résolution est de R=750 à 5500 A, soit une finesse spectrale à cette longueur d’onde de 5500/750 = 7 A, soit encore une précision sur l’étalonnage spectral de 7/5 = 1,4 A. Cela signifie que la longueur d’onde d’un point de notre spectre est évaluée à +/- 1,4 A près.


 On rappelle par ailleurs que l’effet de la rotation de la Terre autour du Soleil peut être à l’origine d’un décalage spectral des spectres calculés de +/- 0,5 A suivant la position de l’étoile dans le ciel et la période de l’année. 


Astuce : si après le traitement vous constatez un décalage spectral résiduel manifestement lié à la précision de mesure (ou pour ce ramener dans un repère héliocentrique), vous pouvez utiliser le paramètre « spectral_shift_wave », pour déplacer tout le spectre en cours de traitement. Par exemple, pour réaliser un glissement spectral de -0,5 A, ajoutez dans le fichier de configuration la ligne suivante :


spectral_shift_wave: -0.5


De même, vous avez à votre disposition le paramètre « spectra_shift_vel », avec cette fois la valeur du décalage spectral en kilomètres par seconde.


Astuce : si vous souhaitez réaliser un décalage spectral après le traitement, vous pouvez utiliser les fonctions « _pro_shift_wave » et « _pro_shift_vel », à insérer dans le fichier de configuration :


_pro_shift_wave: [profil1, -0.5, profil2]

9.8 : Retour sur le flat-field


Les images tung-1, tung-2, … ont été obtenues sur table, mais quelles soient réalisées de cette manière, ou sur le télescope de façon plus traditionnelle, les images en question, lorsqu’on les examine de près montrent des sortes de vagues en fonction de la longueur d’onde :

Ces oscillations correspondent à des variations plus ou moins périodiques du rendement quantique du détecteur qui équipe notre caméra. Elles sont le résultat, presque inévitable, de la technologie utilisée pour fabriquer les capteurs CMOS (et même CCD), constituées de couches minces de matériaux semi-conducteurs. La seule présence de ces oscillations justifie de ne surtout pas faire l’impasse de l’acquisition d’images tungstène. Les oscillations sont éliminées en réalisant la classique opération (la correction « flat-field ») :


Image corrigée = image brute / flat-field


specINTI a effectué cette opération lors du travail de réduction des spectres, mais dans notre exemple, quelque chose ne va pas. En examinant les profils spectraux traités jusqu’alors, un résidu de ces oscillations apparaît après traitement. La correction flat-field ce révèle imparfaite. L’origine de cette difficulté s’explique par un décalage du spectre suivant l’axe de dispersion entre le moment où on a pris le spectre de l’étoile HD207330 et le moment où on a obtenu les images fla-field sur table. Les flexions mécaniques du spectrographe sont en causes.


Pour évaluer l’ampleur de ce décalage, affichez d’abord le contenu de l’image « hd207330_neon-1 » (depuis l’onglet « Visu image » par exemple, ou tout autre logiciel). Cette image a été réalisée dans le foulée des images brutes du spectre de l’étoile. Mesurez la coordonnée horizontale (axe X) de la raie du néon la plus intense en partant de la gauche.  Vous allez trouver (en gros) x = 1579. Retenez cette valeur.


A présent, examinez le contenu de l’image « tung_neon-1 », prise juste à la suite des images tungstène sur table, sans rien bouger. Cette même raie est à la coordonnée x = 1588.

 

De toute évidence, entre le moment où le spectrographe est sur une table et le moment où il est sur le télescope, l’image du spectre a glissé dans le plan du détecteur de 1589-1578 = 11 pixels. Cela peut provenir de la déformation du boîtier, d’une variation de température… Peu importe, ce déplacement est réel, et la conséquence est que l’on réalise une image d’étalonnage flat-field qui ne coïncide pas avec l’image que l’on veut traiter, d’où la présence d’un résidu de traitement. Fort heureusement, nous avons une solution pour que tout revienne en ordre, en compensant par le logiciel l’effet des flexions constaté. Notre algorithme consiste à déplacer la forme basse fréquence du flat-field de -11 pixels (forme basse-fréquence - qui contient les oscillations), alors que les structures haute-fréquence du flat-field (par exemple les variations de pixels à pixels du détecteur, ou PRNU pour «Pixel Response Non Uniformity»), elles demeurent fixes. Pour appliquer cet algorithme, ouvrez l’onglet « Observations » et dans le « Mode avancé » repérez le champ « Liste décalage flat-field ». Inscrivez à cet endroit -11 (attention au signe) :

C’est la manière d’indiquer à specINTI qu’il va falloir décaler de -11 pixels le flat-field réalisé sur table avant de pratiquer l’opération de division. Attention, pour que la procédure donne un résultat satisfaisant, il est impératif d’indiquer la liste des images brutes du flat-field (nom générique « tung- » et nombre d’images égal à 20), et non pas le nom d’un flat-field maître retraité (« _flat »).


Rassurez-vous, toutes ces opérations sont plus longues à expliquer qu’à faire, c’est l’expérience qui parle !


Remarque : dans l’exemple nous avons décidé de corriger la transmission atmosphérique moléculaire, mais notez bien qu’il s’agit d’une opération optionnelle, que vous pouvez parfaitement ignorer pour vous simplifier la vie.


Voici l’aspect du profil spectral de l’étoile HD207330 avec l’application du décalage de -11 pixels des images flat-field et après l’application de ce décalage :

Les fluctuations parasites dans le continuum ont disparu, et du coup le profil spectral ainsi traité est bien plus proche de celui espéré pour ce type d’étoile. Pour tout dire, grâce à notre artifice de calcul, la correction flat-field est quasi parfaite, malgré l’existence de flexions mécaniques assez sévères. Le flat-field a fait le travail, malgré les conditions différentes entre la prise des spectres au télescope et celles des images tungstène sur table.


La technique exposée de correction s’avère très fiable. Pour la petite histoire, il s’est écoulé plusieurs jours entre le moment où l’observation sur le ciel a été réalisée et le moment où le flat-field a été pris., et par ailleurs le décalage de -11 pixels est quasiment toujours le même sur le Star’Ex que nous utilisons (la valeur sera sûrement différente pour vous, mais probablement constante, dès lors que vous ne touchez pas à l’orientation du réseau). C’est au point qu’il nous arrive parfois de ne même pas mesurer le décalage entre l’observation et l’étalonnage sur table, en faisant confiance à des mesures antérieures !



9.9 : L’évaluation de la réponse instrumentale 


La dernière étape à franchir pour finaliser le traitement est la prise en compte de la réponse instrumentale (une réponse vraie, car notre traitement a ramené le spectre calculé à celui vu depuis l’espace). On rappelle l’opération à réaliser pour trouver la réponse instrumentale, c’est-à-dire la variation relative de sensibilité constatée de l’instrument (télescope + spectrographe + détecteur) en fonction de la longueur d’onde : 


Réponse instrumentale = (spectre apparent prétraité d’une étoile de référence) / (spectre réel de la même étoile de référence).


Le choix de l’étoile HD207330 n’est pas anodin pour cette démonstration. C’est un astre dont le spectre réel hors atmosphère est connu. C’est une étoile de « référence », spectro-photométriquement bien étalonnée. On trouve ce spectre dans la librairie de spectres MILES (IAC), qui fait partie de l’archive ZIP téléchargée à la section 5.8.1. Le spectre en question s’appelle «m_HD207330.fit» et voici son profil :

L’opération de division pour trouver la réponse instrumentale n’est malheureusement pas applicable immédiatement, car la finesse de notre spectre observé est inférieure à celle du spectre MILES. Une division en l’état va produire un grand nombre d’artefacts qui vont rendre difficile l’extraction de la réponse effective (avec le Star’Ex basse résolution tel que nous l’utilisons, le pouvoir de résolution est de R=750-800, alors qu’il est de R=1400 environ pour les spectres MILES).


Avant de réaliser la division, il faut donc dégrader la résolution du spectre «m_HD207330.fit». Nous allons utiliser la fonction « _pro_gauss » pour ce faire. Insérez cette ligne dans le fichier de configuration, puis lancez l’exécution de specINTI :


_pro_gauss: [_m_HD207330, 3, tempo1]


Remarque : le fait que l’extension de ce fichier soit « .fit » alors que nous travaillons depuis le début sur des fichiers ayant l’extension « .fits » est ici toléré. Il n’y aura pas d’erreurs retournées.


La fonction _pro_gauss réaliser un filtrage du type lissage (ou passe-bas) sur le spectre «m_HD270330» pour produite produire le spectre à résolution dégradée « tempo1 ».


Le second paramètre est la largeur de la fonction de lissage, qui fixe la force de celui-ci. Plus la valeur est forte, plus l’action du filtre est élevée. Dans notre cas, nous choisirons la valeur 3,0 par expérience, pour passer d’un spectre de R=1400 à R=800 (les valeurs fractionnaires sont prises en compte, par exemple 3,5). Vous pourrez faire des essais pour constater que le spectre après lissage ressemble au mieux au spectre observé. Le coefficient de lissage ainsi établi, par tâtonnement, sera au final une sorte de constante pour votre instrument vis-à-vis des spectres de référence MILES. Voici le résultat après lissage (spectre « tempo1 » dans l’exemple) :

Effacez la ligne « _pro_gauss », ou mettez un « # » devant pour qu’elle soit considérée comme un commentaire, puis insérez une nouvelle commande : 


_pro_div: [_hr207330_20220905_942, tempo1, tempo2]


Comme le nom de cette fonction le laisse entendre,  elle réalise l’opération :


tempo2 = _hr207330_20220905_942 / tempo1


On divise le spectre trouvé à l’étape précédente (spectre de l’étoile hors atmosphère et après division par le flat-field) par le spectre théorique de l’étoile après lissage. Le résultat est le spectre « tempo2 », proche de la réponse instrumentale vraie recherchée :


On observe dans ce résultat de nombreuses aspérités qui n’ont pas lieu d’êtres, venant d’approximations de calcul et de d’écarts de modélisation.  Une courbe de réponse instrumentale digne de ce nom est une courbe monotone, lisse. Pour gommer ces artefacts résiduels, nous allons réaliser un lissage particulier et énergique (algorithme SAVGOL), à partir d’une nouvelle fonction, « _pro_blur ». Comme toujours, effacez la ligne de la fonction précédente et entrez  cette nouvelle :


 _pro_blur: [tempo2, 1000, tempo3]


Le spectre tempo2 est celui à nettoyer des aspérités. Le paramètre (1000) est un coefficient fixant la force du filtre, et tempo3 est le spectre filtré. La valeur 1000 est typique de ce qu’il faut faire dans le cas d’espèce, mais vous avez parfaitement le droit de tester en relançant la commande avec les valeurs 100, 2000, etc. Voici l’aspect du spectre « demo3 » :

Pour donner une touche finale, plus esthétique qu’autre chose, et vraiment optionnelle, on peut normaliser la réponse dans le même domaine spectral que les spectres des objets du ciel :


_pro_norm: [tempo3, 6400, 6420, _rep]


Le fichier « _rep » est la réponse instrumentale recherchée !


Astuce : dans certaines rares situations, il est possible d’enchaîner le lancement de plusieurs fonctions à la suite en encadrant celles-ci par « _begin: » et « _end: » (ne pas oublier les « : »). Par exemple, pour le calcul de la réponse instrumentale :


_begin:

_pro_gauss: [_m_HD207330, 3, tempo1]

_pro_div: [_hr207330_20220905_942, tempo1, tempo2]

_pro_blur: [tempo2, 1000, tempo3]

_end:


Et maintenant, la bonne nouvelle : toutes ces opérations, qui peuvent vous sembler lourdes, manuelles, peuvent êtres de réalisés de manière graphique et immédiate depuis l’onglet « Réponse » de l’interface specINTI Editor :

Vous allez aisément retrouver les paramètres utilisés avec les « fonctions » précédemment employées : les noms des fichiers en haut de l’onglet, puis le niveau de lissage du spectre de référence (3.0) et le filtrage final sur la réponse (1000). A la fin, vous cliquez sur le bouton « Sauver ».


Une autre bonne nouvelle est que le fichier de réponse instrumentale « _rep » est une constante, comme nous l’avons souvent indiqué. Vous n’aurez que très rarement à faire à nouveau ces opérations (et même jamais en théorie).


Quelque part dans le fichier de configuration, ajoutez la commande « instrumental_response » pour la réponse instrumentale soit prise en compte lors du traitement. Dans notre exemple, on écrit simplement (la valeur du paramètre est le nom du fichier) :


instrumental_response: _rep


Nous avons tout à présent pour traiter les images de HD 207330 de manière complète et en extraire le spectre final. Voici l’aspect de l’onglet « Observations » pour cela :

Remarquez que nous ne retirons pas les raies telluriques, vues ici comme des détails effectifs du spectre, même s’il s’agit de parasites. Voici le fichier de configuration associé, que vous pouvez copier/coller pour traiter vos propres spectres (pas uniquement ceux issus d’un Star’Ex, mais aussi d’un Alpy600 ou d’un LowSpec, qui seront d’un aspect proche et ont les mêmes exigences) :


# ********************************************************************

# Configuration Star’Ex basse résolution

# Mode étalonnage 2

# ********************************************************************


# ----------------------------------------------------------------

# Répertoire de travail

# ----------------------------------------------------------------

working_path: D:/starex234


# ----------------------------------------------------------------

# Fichier batch de traitement

# ----------------------------------------------------------------

batch_name: obs_hd207330_demo4


# ----------------------------------------------------------------

# Mode d'étalonnage spectral

# ----------------------------------------------------------------

calib_mode: 2


# ----------------------------------------------------------------

# Nom du fichier de réponse instrumentale

# ----------------------------------------------------------------

instrumental_response: _rep


# -------------------------------------------------------------

# Coefficients du polynome d'étalonnage

# ------------------------------------------------------------

calib_coef: [1.008094181248435e-12, -4.8130567129843605e-09, 1.0804337072826731e-05, 1.5410557117037569, 3390.865801174948]


# -----------------------------------------------------------------------------

# Longueur d'onde des raies néon de référence en A

# -----------------------------------------------------------------------------

wavelength: [5852.49, 6506.53]


# ----------------------------------------------------------------------------

# Position des raies de références neon en pixels

# ----------------------------------------------------------------------------

line_pos: [1580, 2000]


# ---------------------------------------------------------------------------------------

# Largeur de la zone de recherche des raies de références

# ----------------------------------------------------------------------------------------

search_wide: 20


# ----------------------------------------------------------------

# Largeur de binning

# ----------------------------------------------------------------

bin_size: 22


# ----------------------------------------------------------------

# Zones de calcul du fond de ciel

# ----------------------------------------------------------------

sky: [120, 20, 20, 120]


# --------------------------------------------------------------------

# Température de couleur de la lampe tungstène

# -------------------------------------------------------------------

planck: 2900


# ------------------------------------------------------------------

# Correction de la transmission atmosphérique

# ------------------------------------------------------------------

corr_atmo: 0.13


# -------------------------------------------------------------------

# Bornes en x pour les mesures géométriques

# ------------------------------------------------------------------

xlimit: [500, 2000]


# ----------------------------------------------------------------

# Zone de normalisation à l'unité en A

# ----------------------------------------------------------------

norm_wave: [6400, 6420]


# ----------------------------------------------------------------

# Zone de cropping du profil

# ----------------------------------------------------------------

crop_wave: [3700, 7400]


# ----------------------------------------------------------------

# Longitude du lieu d'observation

# ----------------------------------------------------------------

Longitude: 7.0940


# ----------------------------------------------------------------

# Latitude du lieu d'observation

# ----------------------------------------------------------------

Latitude: 43.5801


# ----------------------------------------------------------------

# Altitude du lieu d'observation en mètres

# ----------------------------------------------------------------

Altitude: 40


# ----------------------------------------------------------------

# Site d'observation

# ----------------------------------------------------------------

Site: Antibes Saint-Jean


# ----------------------------------------------------------------

# Description de l'instrument

# ----------------------------------------------------------------

Inst: RC10 + StarEx300  + ASI533MM


# ----------------------------------------------------------------

# Observateur

# ----------------------------------------------------------------

Observer: cbuil


# ------------------------------------------------------------------------

# Extension des fichiers FITS  (0  -> .fits, 1 - > fit)

# ------------------------------------------------------------------------

file_extension: 0

Le spectre final de HD207330 traité dans les règles, avec ce fichier de configuration :

Souvent, la spectrographie basse résolution vise à l’étude d’objets de faibles éclats. Pensez dans cette situation à activer les outils de réduction de bruit, décrits à la section 5.6. Par exemple, ajoutez les lignes suivantes dans votre fichier de configuration (fichier « conf_starex300_demo3.yaml » dans la distribution) :



# ---------------------------------------------------

# Mode extraction du ciel

# ---------------------------------------------------

sky_mode: 1


# ----------------------------------------------------------------

# Extraction optimale

# ----------------------------------------------------------------

extract_mode: 1

gain: 0.083

noise: 1.3


# ----------------------------------------------------------------

# Motif de filtrage médian

# 0: pas de filtrage, sinon: 3, 5, ...

# Valeur négative : optimisé pour le bruit impulsionnel

# ----------------------------------------------------------------

kernel_size: -3


# ----------------------------------------------------------------

# Filtrage gaussien

# ----------------------------------------------------------------

sigma_gauss: 0.4

9.10 :  Traitement en série


Vous le savez à présent, sans modifier le fichier de configuration, vous pouvez traiter tout ce que génère votre instrumentation (seul le fichier d’observation change, ainsi que sa désignation dans le fichier de configuration). Par exemple, nous allons réduire à la fois les spectres de HD 207330 et de SS Cyg. Pour ce dernier objet, la séquence est composée de 9 images du spectre et d’une image de lampe néon faite en éclairant l’entrée du télescope et prise à la fin de la séquence. L’objet est de faible éclat au moment de l’observation, de magnitude 12 environ, si bien que le temps de pose adopté pour chaque image est relativement long, de 10 minutes (600 s). Celui-ci demeure cependant inférieur au temps de base des images de dark (15 minutes).


Ouvrez l’onglet « Observations » et remplissez-le de cette manière (pensez à utiliser le bouton « Auto ») :

Remarquez que le champ « Liste décalage flat » est bien une liste comme le nom l’indique. Ainsi, vous pouvez entrer une translation différente du flat-field pour chaque série d’images à traiter, mais ici ce décalage est stable, donc la valeur reste -11 pour les deux astres traités. Lancez le traitement en cliquant sur « Exécuter », et au bout d’un moment :

Le spectre de SS Cyg est caractéristique d’un système symbiotique « au repos » (on dit en état « quiescent »), hors éruption. On y voit des raies de Balmer (hydrogène) ainsi que des raies de l’hélium en émission, mais élargies par la vitesse des gaz (effet Doppler-Fizeau). La remontée du continuum au début de l’ultraviolet est réelle :


Aller à la partie suivante :  la spectrographie infrarouge                                                                                                          Revenir en arrière