Audela
Audela

LibAudela

LibAudela

Librairie d'extension Tcl pour l'astronomie
Manuel d'utilisation

Alain KLOTZ
version 20021230

1. Principes généraux

LibAudela ajoute, à Tcl, des fonctions spécialisées à l'astronomie : gestion d'images au format FITS, traitement d'image, pilotage de caméras et de télescopes, etc. Pour faciliter l'utilisation, de nombreuses fonctions ont été rassemblées en familles appelées objets. Faisons un rapide tour d'horizon de ces objets :

Ces fonctions sont définies dans le fichier libaudela.dll (sous Windows) et libaudela.so (sous Linux). LibAudela gère la lecture et l'écriture disque des images, aux formats FITS et Jpeg, est assuré par la librairie LibTT. Cette librairie est appelée automatiquement par LibAudela. LibTT ajoute aussi de nombreuses fonctions de traitement d'images à LibAudela (appelables à partir de l'objet buffer).

Pour fonctionner correctement, LibAudela nécessite de charger les extensions Tcl LibGzip, LibMC.

Enfin, LibAudela ajoute aussi quelques fonctions utiles à l'interpréteur Tcl

2. Utilisation des objets de Audela

Le principe de fond de Audela est de travailler avec des objets qui ont une tâche spécifique. Ainsi il existe quatre types d'objets : l'objet caméra, télescope, buffer, et visualisation. Ils sont configurables afin de répondre aux exigences de l'utilisateur. Il est aussi possible d'avoir plusieurs objets de chaque type. Les commandes de base suivantes permettent de créer des objets de chaque type, de les détruire, et de savoir combien il en existe dans le système Audela. La création de ces objets donne lieu à la création des structures de données internes à Audela qui permettent de les gérer. Les différents objets d'un même type sont numérotés : si le numéro n'est pas imposé, alors c'est le plus petit disponible qui est utilisé (à partir de 1). Une commande spécifique est alors créée pour accéder à ses données. Par exemple si on souhaite créer un buffer, il faut utiliser la commande

"
::buf::create
"

qui met en place toutes les structures de données du buffer. Si c'est le premier buffer créé alors il port le numéro 1 : la commande permettant d'y accéder par la suite est alors

buf1
.

Si on créé d'autres buffers, d'autres commandes sont créées, et elles commencent toutes par

buf

, suivi du numéro du buffer.

La commande créée avec chaque élément permet d'accéder à ses données, mais aussi d'agir dessus. Par exemple pour effectuer un offset sur un image, la commande "

buf1 offset 100
" doit être utilisée. De même pour connaître les coordonnées d'un télescope (informatisé) if faut exécuter "
tel1
  coord
".

Par exemple, pour créer un buffer et y charger l'image du fichier toto.fit, on procédera ainsi :

set num [::buf::create]
buf$num load toto.fit

L'ensemble des fonctions de pilotage de caméra, de télescope et d'affichage d'image fonctionnent sur ce principe. Les objets de type caméra ou télescopes peuvent appeler des drivers externes. Le chargement est automatique et transparent à l'utilisateur. Si un driver externe existe et a le même nom qu'un driver interne alors c'est le driver externe qui est choisi. Par exemple, la fonction

::cam::create audine
lpt1

utilise le driver externe libaudine.dll (libaudine.so sous Linux) si ce fichier existe.

2.1. buffers

La commande

"
::buf::create
"

a pour rôle de créer un buffer, c'est à dire un ensemble de données capables de contenir une image, et des mots-clés FITS pour l'identifier. Bien entendu juste après la création le buffer ne contient pas d'image, ni de mots-clés. La liste des commandes pour la gestion de buffer est donnée ci-dessous :

Commande Arguments Rôle
::buf::create
?numero?
Créer un buffer vide, sans mots-clés FITS. Si aucun numéro n'est spécifié.
::buf::delete
numero
Efface le buffer dont le numéro est donné en paramètre, donc son contenu est effacé, son numéro est retiré de la liste des buffers, et à nouveau disponible pour en recréer un.
::buf::list
Renvoie une liste des numéros de buffers utilisés.

La liste des fonctions de buffer sont décrites en détail en cliquant ici. Voici un résumé : Chargement et sauvegarde d'images au format FITS. Tous les formats de données d'images (BITPIX) sont autorisés.

Chargement et sauvegarde des en-têtes des images FITS. Il est possible de lire, de retirer ou d'ajouter des mot clés, de modifier des valeurs, etc.

Analyse élémentaire de l'image : Photocentre, flux d'une région. Statistiques sur une image.

Traitements d'images. de nombreuses fonctions sont de type IMA/SERIES de la librairie TT.

Exemple. Nous allons effectuer l'analyse statistique de image M57.fit. La séquence Tcl suivante montre la création d'un buffer, le chargement de l'image, le calcul des paramètres statistiques puis le destruction du buffer.

set numbuf [::buf::create]
buf$numbuf load m57.fit
set mystatistics [buf$numbuf stat]
::buf::delete $numbuf

A la fin de cette séquence, il est possible de récupérer la valeur moyenne du fond de ciel de l'image (septième élément de la liste de retour), par exemple :

set skyback [lindex $mystatistics 6]

Attention, bien se souvenir que l'indexation des listes commence à zéro (le septième élément à l'indice six).

2.2. caméras

La commande

"
::cam::create
"

permet de créer une caméra, c'est à dire de créer une commande commençant par

cam

qui permet de réaliser des acquisitions, dans différents modes possibles.

Commande Arguments Rôle
::cam::create
type port

?-num numero?

?-ccd nameccd?
Créer une caméra du type donné en premier argument, sur le port donné en second argument. Le type désigne le nom du pilote de la caméra. Audela recherche d'abord la présence d'un pilote externe portant le nom libnom.dll (ou .so sous Unix). Si le pilote externe n'est trouvé, il utilise le pilote interne s'il existe. Les types internes disponibles sont "
audine
", "
hisis11
", "
hisis22-12
", "
hisis22-14
", et "
st7
". Le port est choisi parmi "
lpt1
" et "
lpt2
". Notons que ces deux arguments sont obligatoires.
Il est possible de spécifier le numéro de l'objet caméra ainsi que le nom du composant CCD dans le cas où une même caméra peut être équipée de capteurs différents.
::cam::delete
numero
Efface la caméra dont le numéro est donné en paramètre. La commande
cam
associée est également supprimée.
::cam::list
Renvoie une liste des numéros de caméras utilisés.

La liste des fonctions de caméra sont décrites en détail en cliquant ici. Voici un résumé :

Exemple. La séquence Tcl suivante montre la création d'une caméra dans Audela et le lancement d'une pose de 30 secondes en binning 2x2 :

set numcam [::cam::create audine lpt1 -ccd kaf400]
cam$numcam buf 1
cam$numcam exptime 30
cam$numcam bin {2 2}
cam$numcam acq
vwait status_cam$numcam

La fonction vwait permet d'attendre la fin de la pose avant de passer à la fonction Tcl suivante. Noter que la fonction acq n'est donc pas bloquante. On peut donc profiter du temps de pose pour effectuer quelques calculs rapides (par exemple, prétraitement de la précédente image acquise).

2.3. télescopes

La commande

"
::tel::create
"

permet de créer un télescope. Les commandes automatiquement créées à cette occasion sont

tel

suivi d'un numéro. Par le biais de ces commandes il est possible de déplacer un télescope informatisé, et d'en connaître la position. Il est possible d'avoir plusieurs télescopes reliés au même ordinateur sous réserve d'avoir le nombre suffisant de ports de communication.

Commande Arguments Rôle
::tel::create
type port ?numero?
Créer un télescope du type donné en premier argument, sur le port donné en second argument. Les types disponibles sont "
lx200
", et "
ouranos
". Le port est choisit parmi "
com1
" et "
com2
". Notons que ces deux arguments sont obligatoires.
::tel::delete
numero
Efface le télescope dont le numéro est donné en paramètre. La commande
tel
associée est également supprimée.
::tel::list
Renvoie une liste des numéros de télescopes utilisés.

La liste des fonctions de télescope sont décrites en détail en cliquant ici. Voici un résumé :

Exemple. La séquence Tcl suivante montre la création d'un télescope dans Audela et le pointage à des coordonnées précisées (J2000) :

set numtel [::tel::create lx200 com2]

tel$numtel goto "20h45m34s -16d54m"

2.4. visualisation

La commande

"
::visu::create
"

permet de créer un lien entre un buffer (qui contient une image) et une image Tk (TkImage). C'est ce lien qui permet de définir des seuils de visualisation, et des palettes. Pour créer une visualisation il faut deux arguments obligatoires : un numéro de buffer, et un numéro d'image. Le numéro de buffer permet de savoir d'où viennent les images à afficher. Le numéro d'image sert à repérer dans quelle image Tk afficher le contenu du buffer. Il faut que les images Tk soient appelées

image

suivi du numéro d'image. Ces images Tk sont créées par la commande

"
image
create photo nom_image
"

, ou automatiquement par

"
::visu::create
".
Commande Arguments Rôle
::visu::create
bufNo imgNo ?numero?
Créer une visualisation qui affiche les données du buffer numéro
bufNo
dans l'image
image$imgNo
. Ces deux arguments sont obligatoires, et on peut éventuellement choisir son numéro.
::visu::delete
numero
Efface la visualisation dont le numéro est donné en paramètre. La commande
visu
associée est également supprimée.
::visu::list
Renvoie une liste des numéros de visualisation utilisés.

La liste des fonctions de visualisation sont décrites en détail en cliquant ici. Voici un résumé :

Exemple. Nous allons visualiser l'image de M57.fit. La séquence Tcl suivante montre la création d'un écran de visu à l'intérieur d'une fenêtre appelée ici .test. Tout d'abord, création d'un widget Tk de type canvas (.imag1) dans une fenêtre (.test) :

toplevel .test
canvas .test.imag1 -width 384 -height 256

pack .test.imag1

Il faut ensuite créer une zone de visu pour Audela qui va faire le lien entre le numéro de buffer qui sera visualisé et le numéro de la Tk_PhotoImage qui sera présente dans le canvas :

set b [::buf::create]

set v [::visu::create $b 5]

Le $b reprend le numéro du buffer créé : c'est celui qui sera affiché. Le 5 signifie que l'image sera affichée dans l'image Tk

image5

, qui est elle-même placée dans le canvas (un canvas permet de regrouper des objets graphiques divers) :

image create photo image5

.test.imag1 create image 1 1 -image image5 -anchor nw

Il faut charger une image dans le buffer :

buf$b load images/m57

Ainsi, la visualisation de l'image présente dans le buffer $b dans le canvas se fera simplement par :

visu$v disp

La modification des seuils suivie de la revisualisation sera :

visu$v cuts [8000 4000]

visu$v disp

Pour essayer, copiez les lignes précédentes dans un fichier texte (toto.tcl par exemple), et dans la console Audace entrez

"
source toto.tcl
" ...

3. Fonctions de bibliothèque de Audela

fits2colorjpeg filenamer filenameg filenameb filenamejpg ?quality? ?locutr hicutr locutg hicutg locutb hicutb?

Enregistre le contenu des images de trois fichiers FITS sous la forme d'une seul fichier Jpeg couleur. Les fichiers FITS contiennent les images rouge, verte et bleu (respectivement filenamer filenameg filenameb). Le nom du fichier Jpeg est donné par le paramètre filenamejpeg. L'option quality permet de régler le taux de perte lors de la compression (=100 compression sans perte. =75 par défaut). Les paramètres optionnels locutr hicutr locutg hicutg locutb hicutb permettent d'indiquer les valeurs numériques des seuils haut et bas dans chaque couleur. Par défaut les valeurs des seuils sont lues comme les valeurs des mots clé MIPS-Hi et MIPS-LO de l'en-tête FITS.

ttscript filename

Exécute un script TT. contenu dans le fichier texte filename. cf. fonction ttscript2 pour de plus amples explications.

ttscript2 string

Exécute un script TT.string est une chaîne de caractères contenant un script spécifique pour le traitement d'images. Il ne s'agit plus de scripts Tcl mais de scripts TT. Il convient donc de détailler la forme des scripts.

Un script TT est composé d'une seule chaîne de caractères contenant des lignes (séparateurs \n) ou bien d'une seule ligne terminée par le caractère final nul (caractère \0). Chaque ligne est analysée séquentiellement. Au sein d'une ligne, la première chaîne de caractères rencontrée doit contenir le mot clé de définition. Si le mot clé n'est pas reconnu, le restant de la ligne est interprété comme une simple remarque. Le séparateur blanc est utilisé pour les paramètres suivants de la ligne.

Il existe actuellement trois mots clé de définition :

SET/VAR : initialise la valeur d'une variable de substitution. Cette définition comporte deux arguments : le mot initial à substituer et le mot qui le remplacera. Cette substitution sera effective pour toutes les lignes suivantes, jusqu'à la fin du script TT.

IMA/SERIES : traitement d'une série d'images et génère autant d'images en sortie qu'en entrée.

IMA/STACK : traitement d'une pile d'images et génère une seule image en sortie.

Les paramétrages des fonctions IMA/SERIES et IMA/STACK sont exposés en détail dans une page spécifique concernant la syntaxe des scripts TT. L'exemple Tcl suivant montre comment corriger le dark d'une image par la méthode de l'optimisation du noir sur l'image i.fit :

ttscript2 "IMA/SERIES c:/ccd/ i . . .fit c:/ccd/prt/ i .
       .fit OPT dark=d60.fit bias=d0.fit unsmearing=0.0005"

Noter l'utilisation du / au lieu du \ pour définir les dossiers sous Windows. Ceci est normal et fonctionne parfaitement. Le symbole \ n'est pas employé car il est utilisé par Tcl en tant qu'identificateur de remplacement. Si l'on souhaite quant même utiliser le symbolisme \ pour désigner les chemins Windows, alors il faut remplacer \ par deux \\. Exemple :

ttscript2 "IMA/SERIES c:\\ccd\\ i . . .fit c:\\ccd\\prt\\
       i . .fit OPT dark=d60.fit bias=d0.fit unsmearing=0.0005"

combit ComNumber PinNumber ?BitValue?

Lit ou écrit des états binaires sur les broches du port série numéro ComNumber (1, 2, etc.). BitValue vaut 0 ou 1 et n'agit que sur les broches disponibles en écriture. PinNumber est le numéro de la broche sur une prise DB9 ou bien la désignation de la broche:

désignation lecture/écriture DB9 DB25
DCD
lecture
1
8
RxD
2
3
TxD
é criture
3
2
DTR
é criture
4
20
GND
(masse 0V)
5
7
DSR
lecture
6
6
RTS
é criture
7
4
CTS
lecture
8
5
RI
lecture
9
22

Exemple :

combit 2 DTR 1
,

passe au niveau 1 la broche numéro 4 (DTR) du port COM2.

Il faut préalablement ouvrir le port de communication pour envoyer ou recevoir les bits. Exemple:

set tty [open com2 w]
combit 2 DTR 1
close $tty

Les fonctions open et close proviennent de l'interpréteur Tcl.

libstd_id

Retourne la date de la compilation de la librairie LibAudela utilisée.

libstd_debugserial ?on?

Fonction obsolète de débuggage.

historik add|before|after|synchro|list

Gère une liste interne qui peut servir à garder l'historique de commandes. Les options sont les suivantes:

getclicks

Retourne un nombre qui s'incrémente d'une unité à chaque milliseconde.

add2 in operand out const nb

Addition d'une image operand à un lot de nb images de nom générique in. const est un nombre (en pas codeurs) à ajouter à tous les pixels. Le nom générique des images de sortie est out.

div2 in operand out const nb

Division d'une image operand à un lot de nb images de nom générique in. const est un nombre (en pas codeurs) à multiplier à tous les pixels. Le nom générique des images de sortie est out.

offset2 in out const nb

Addition d'une valeur constante const (en pas codeurs) à tous les pixels d'un lot de nb images de nom générique in. Le nom générique des images de sortie est out.

ngain2 in out const nb

Normalisation du gain à un lot de nb images de nom générique in. const est un nombre (en pas codeurs) qui représente la moyenne des pixels des images de sortie. Le nom générique des images de sortie est out.

noffset2 in out const nb

Normalisation du fond de ciel à un lot de nb images de nom générique in. const est un nombre (en pas codeurs) qui représente la moyenne des pixels des images de sortie. Le nom générique des images de sortie est out

opt2 in dark offset out const nb

Soustraction du noir optimisé à un lot de nb images de nom générique in. Le nom de fichier du noir est dark et le nom de fichier de précharge (bias) s'appelle offset. const est un nombre (en pas codeurs) à ajouter à tous les pixels. Le nom générique des images de sortie est out.

register2 in out number

Registration d'un lot de nb images de nom générique in. Le nom générique des images de sortie est out.

sadd in out number

Somme d'une pile de nb images de nom générique in. Le nom de l'image de sortie est out.

smean in out number

Moyenne d'une pile de nb images de nom générique in. Le nom de l'image de sortie est out.

smedian in out number

Médiane d'une pile de nb images de nom générique in. Le nom de l'image de sortie est out.

sub2 in operand out const nb

Soustraction d'une image operand à un lot de nb images de nom générique in. const est un nombre (en pas codeurs) à ajouter à tous les pixels.

trans2 in out number dx dy

Translation d'un lot de nb images de nom générique in. Le nom générique des images de sortie est out. La translation vaut dx et dy (en pixels).

hostaddress

Retourne une liste composée d'au moins deux éléments. Le dernier élément contient le nom de la machine locale. Les premiers éléments sont des listes contenant les quatre nombres de l'adresse IP locale. Par exemple : {192 168 0 1} {62.134.25.67} mycomputer.

ping IPAddress ?timeout?

Effectue la fonction ping à une adresse IP donnée. Retourne une liste composée de deux éléments. Le premier élément vaut 0 en cas d'échec à la connexion et 1 en cas de succès. Le second élément est un texte donnant des explications complémentaires.

| English Version | Mailing List Audela | ©2004 Audela | Design TechnoSpeak