LE FORMAT DE FICHIERS FITS

Une petite note par lerautal

1. FORMAT ?

Ce terme est familier à certains.
Pour d'autres c'est un mot qui recouvre une réalité qu'ils ne comprennent pas.
Par contre le plus grand nombre de ceux qui pratiquent l'informatique - par choix ou sous la contrainte - s'est un jour retrouvé avec un "fichier" dont il ne savait que faire.

Le "machin" était inexploitable. Et le destinataire, les bras ballants, frustré...

Exemple typique : sur mon vieux Pécé, j'ai XXX 97 et on m'a remis un fichier créé par un XXX 2013 (cela existe ???).

Bouffée de colère : pas moyen de le lire.
Et les "moins ignorants" à qui on pose la question qui répondent :

"C'est à cause du format de fichier".
Ah ! Voilà une réponse qui m'aide beaucoup.

Ou alors :

"A cause de l'évolution technologique, le format a changé de XXX 97 à XXX 2013".
Encore mieux : deux mots à la noix... Technologie (tarte à la crème) et Format (et je ne sais toujours pas ce que cela veux dire...).

2. UN EXEMPLE FAÇON CLUB DES CINQ...

Pour correspondre "en secret" les membres d'une société secrète utilisent un code.
Jusque là, normal.
Voyons un exemple qui transmet le prénom d'une personne et le montant de son compte en banque :
2NYSJ*1DBDEAXAB*...
Réponse :
Le signe * est un séparateur entre les informations. Au début de chaque paquet d'information, on trouve une valeur numérique.
Si c'est 1, on remplace chaque lettre par un chiffre avec l'équivalence suivante : A=1, B=2, C=3,...X=la virgule.
Sinon cela désigne le décalage de chaque lettre par rapport à l'alphabet.
2NYSJ  -> on décale N de deux crans (N,O,P) cela donne P, on décale Y de deux crans (Y,Z,A), on décale S de deux crans (S,T,U), on décale J de deux crans (J,K,L) -> PAUL.
1DBDEAXAB  -> On remplace les lettres par des chiffres (et X par une virgule) D=3, B=2, D=3, E=4, A=1, A=1, B=2  -> 32341,12

Autrement dit : on avait un paquet de chiffres et de lettres , mais sans les règles de rangement de l'information, on était bien embarrassés pour en tirer quelque chose.
Ces règles définissent un  mode de structuration des données. Appelons cela format.
Et passons à la suite.

3. FAIRE PAYER ENCORE ET TOUJOURS

Au moment où l'informatique s'est diffusée dans les pays développés, les premiers industriels du logiciel ont défini des formats pour enregistrer les données générées par leurs logiciels.

Ils n'ont pas expliqué comment les données étaient organisées dans les fichiers (ils ont caché le format) et pris des brevets pour tenter d'empêcher le décodage.
Résultat ? Quand on voulait accéder à l'information contenue dans les fichiers, il fallait acheter le logiciel.
Pire, à chaque nouvelle version majeure du logiciel, ils modifiaient le format de façon à ce qu'on ne puisse exploiter les fichiers avec les anciennes versions.

Par réaction, des personnes qui refusaient cette marchandisation de l'information (et du savoir) ont inventé des formats équivalents, diffusé leur description et incité les gens à les utiliser.
Quelques exemples de formats décrits (et donc  accessibles sans forcément payer des logiciels) : JPEG (créé par des photographes, HTML (le format des pages Web), PNG (format d'image non compressé), PDF (pour la transmission de documents non modifiables), TEXTE (pour tout le monde)...

4. LE CAS DES ASTRONOMES  PROFESSIONNELS : FITS

Un(e) astronome, c'est quelqu'un qui a bénéficié d'une formation de haut niveau dans des domaines des sciences ainsi que des mathématiques.
C'est quelqu'un qui doit être capable d'imaginer des "expériences" ainsi que leur exploitation, et tout ceci de façon à bénéficier d'horaires sur les instruments ainsi que des crédits pour du matériel, des déplacements, des colloques avec d'autres chercheurs.
Echange, exploitation des données, publication, argent.
Les données sont maintenant numériques. Il est utile donc d'avoir la compétence pour traiter ses propres données (ou celles des autres). L'argent est rare : on ne va pas payer des licences de logiciels alors qu'on en a toujours un meilleur usage.
Conséquence : les astronomes programment (tous ? je ne sais pas).
Echange : il faut que les données soient dans un format ouvert, clairement décrit, et suffisamment polymorphe pour s'adapter à tous les "métiers" de l'astronomie : visuelle, X, gamma, spectroscopie....
Ce format s'appelle FITS : Flexible Image Transport System.
https://fr.wikipedia.org/wiki/Flexible_Image_Transport_System

Suite à la mise en ligne de la première version de cette page, Jean-Louis Bétoule dont chacun à l'AAI connaît les attaches, m'a fait les remarques suivantes (reproduites avec son accord).

Je peux te renseigner un peu : Tous les astronomes programment ou du moins savent le faire, et savent donner les instructions adéquates à leurs ingénieurs.
Pour une bonne raison : c'est que les traitements de données ne peuvent pas être achetés, vus que c'est eux qui les mettent au point. Et je ne vois pas trop dans quelle discipline il n'y aurait pas de données, sauf peut-être les purs théoriciens.
Ce qui est parfois acheté ce sont des langages de programmation adaptés tel que IDL par exemple ( voir wikipedia). Mais ça, ça vient de la formation des gens. Ou de leurs intérêts financiers. (On voit couramment des logiciels achetés très cher et jamais utilisés) . Pour IDL par exemple, Il y a des équivalents libres tels que GDL.
Mais depuis, il y a Python ! Et c'est la révolution..

5. UN PAS EN AVANT

L'image suivante est au format FITS. Je devrais écrire "dans un des formats FITS" : Un extrait des Pleiades

Il est probable que vous ne pourrez pas l'afficher : comme il ne s'agit pas d'un format "grand public" peu de gens ont un logiciel permettant d'afficher l'image. Mais ce n'est pas vraiment grave dans l'immédiat.
Par contre, si vous essayez d'ouvir le fichier dans le "Bloc-Notes" de Windows (ou tout autre éditeur de texte - pas un traitement de texte SVP), vous afficherez ceci :



Deux zones dans cette visualisation :

6. AUTRE REPRÉSENTATION DU FORMAT

Représentation visuelle du fichier

Certains sont "lecture et imagination", d'autres sont "visuels".
L'illustration ci-dessous exprime dans un autre langage ce qui est rédigé plus haut.
Vous remarquerez que tous les pixels contenant l'information sur le rouge, sont dans un même paquet.
Chacune des couleurs a son propre "paquet".

En fait, FITS est très flexible et ce qui est décrit ici est le CAS PARTICULIER  des fichiers FITS créés par SIRIL.
On pourrait avoir EN PLUS d'autres paquets de données contenant des images en rayon X, en onde radio... et tout ceci serait rangé dans un seul fichier FITS.
On pourrait aussi n'avoir qu'un seul paquet de données : le vert par exemple.
Mais dans ce cas, l'en-tête doit renseigner le destinataire de l'information.

7. ACCEDER AUX FICHIERS FITS AVEC UN LOGICIEL

C'est à dire les lire, les modifier, les enregistrer... en gros faire des choses utiles avec.
Quelques logiciels : IRIS, SIRIL, GS9, la version expérimentale de Gimp, pour parler d'outils gratuits.
Exemple avec GS9 :

alcyone avec GS9

8. ACCEDER AUX FICHIERS FITS AVEC UN LANGAGE DE PROGRAMMATION

Historiquement, le langage de programmation des scientifiques était le FORTRAN (TRANsformation de FORmules : le nom est limpide).
D'autres langages très puissants sont apparus également C et C++ qui donnent des programmes performants (mais difficiles à coder), JAVA (plus lent) et, actuellement PYTHON.

Ce langage est apprécié pour au moins trois raisons :
- Il est gratuit et s'apprend rapidement.
- Il simplifie la vie du programmeur (par rapport aux précédents).
- Par son intermédiaire, on peut utiliser une multitude de "boîtes à outils" bien testées et codées dans des langages très rapides.

Sous réserve de ne pas être trop maladroit on a accès à la fois à la facilité ET à l'efficacité.

9. ILLUSTRATION PAR UN EXEMPLE

Pour terminer, je vais donner un exemple de code PYTHON simple accompagné de commentaires allégés.

Objectif du programme :
Lire le contenu du fichier cité plus haut et :
- lister le contenu de l'en-tête,
- sauvegarder les données au format JPEG de façon à pouvoir l'afficher facilement.
(les commentaires sont précédés du signe # et sont écrits en bleu).

# Ouvrir un fichier FITS
# lire l'en tête et les données
# lister l'en-tête.
# sauvegarder les données au format JPEG


# zone où l'on demande l'accès à deux boîtes à outils
# pyfits permet d'agir sur les fichiers FITS. Le "manche de l'outil" sera désigné par "pf"
# scipy.misc (et son outil imsave) permet de sauvegarder les données dans un autre format
.
import pyfits as pf
from scipy.misc import imsave


# On ouvre le fichier et l'on déclare que "fic" est le nom symbolique qui permettra d'agir sur lui.
# pour cela on utilise l'outil "pf" dans sa fonctionnalité "ouverture" (open en anglais)
fic = pf.open('ALCYONE_HIP17702_n_TAU.fit')

# On charge le contenu de l'en-tête (désigné par le mot anglais header) dans "en_tete" qui est le nom symbolique permettant d'agir dessus
en_tete =fic[0].header

# ayant ce nom symbolique on peut l'invoquer avec la fonction "print" qui permet de lister le contenu.
print en_tete

# Maintenant on récupère les informations sur les pixels en les associant au nom symbolique "donnees" (le mot anglais data signifie "données").
donnees  =  fic[0].data

# Il ne reste plus qu'à transformer les données FITS en JPEG et à écrire le résultat dans le fichier "alcyone_en_jpeg.jpg".

imsave('alcyone_en_jpeg.jpg',donnees)

# Il faut penser à fermer le fichier FITS : pas bon de laisser une porte ouverte.
fic.close()

Voilà. C'est tout.
Si vous effacez mentalement mes commentaires, vous pourrez constater qu'en très peu de lignes de code Python, on fait un travail formidable. Des logiciels aussi gros et réputés que Word ou Excel n'en sont pas capables.

Voici l'image qui résulte du programme :

alcyone en jpeg

Voici le listage de l'en-tête :

# résultat d'affichage header
#SIMPLE  =  T / file does conform to FITS standard
#BITPIX  = 16 / number of bits per data pixel
#NAXIS   =  3 / number of data axes
#NAXIS1  = 1000 / length of data axis 1
#NAXIS2  =  700 / length of data axis 2
#NAXIS3  =   3 / length of data axis 3
#EXTEND  =  T / FITS dataset may contain extensions
#COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
#COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
#BZERO   =   32768 / offset data range to that of unsigned short
#BSCALE  =  1 / default scaling factor
#MIPS-HI =   145 / Upper visualization cutoff
#MIPS-LO =   0 / Lower visualization cutoff
#INSTRUME= 'NIKON D3200'        / instrument name                               
#DATE    = '2015-09-01T21:54:15' / UTC date that FITS file was created          
#XBINNING=  1 / Camera binning mode
#YBINNING= 1 / Camera binning mode
#EXPTIME =  10. / Exposure time [s]
#ISOSPEED= 200. / ISO camera setting
#PROGRAM = 'Siril v0.9.0rc1'    / Software that created this HDU
#END