Audela
Audela

Compatibilité d'écriture des scripts

Compatibilité d'écriture des scripts

<<Cette page est destinée aux programmeurs non débutants>>

L'interface Audace utilise la fonction proc pour ajouter de nombreuses fonctions supplémentaires à Audela. Il est possible de créer une nouvelle interface qui fonctionnera en dehors du contexte Audace, mais alors de nombreuses fonctions décrites ci dessus ne sont plus accessibles. La liste complète des fonctions spécifiques à l'interface Audace sont repérées par le sigle [AC] dans la page consacrée à l'inventaire de toutes les fonctions disponibles.

Ce chapitre fait une mise au point importante sur la différence de programmation entre Audace et Audela. Ceci ne concerne donc pas les programmeurs débutants qui veulent découvrir la programmation de scripts dans l'interface Audace.

Nous avons vu que les scripts permettent de créer de nouvelles fonctions grâce à la fonction proc. C'est ainsi que l'interface Audace crée une multitude de nouvelles fonctions destinées à simplifier l'écriture des commandes utiles pour observer en imagerie numérique. Par exemple, la fonction loadima est crée par Audace mais n'existe pas dans le jeu de fonctions de base de Audela. Audace crée la fonction loadima à partir des fonctions d'objets de Audela. Ces fonctions d'objet sont très puissantes mais elles ont aussi une syntaxe lourde. Audace, comme toute interface, crée donc de nouvelles fonctions, faciles d'emploi, qui utilisent les objets Audela. Si on ne désire pas utiliser l'interface Audace, on ne peut alors utiliser que les objets Audela et c'est pourquoi nous donnons les exemples ci dessous sous la forme de scripts pour Audela donc avec une syntaxe lourde. Nous donnons ensuite l'équivalent avec les fonctions rajoutées par l'interface Audace. Par exemple le script Audela suivant :

for {set k 1} {$k<=10} {incr k} {
 cam1 exptime 20
 cam1 bin {2 2}
 cam1 acq
 vwait status_cam1
 buf1 save "image-$k"
}

est équivalent au script Audace, considérablement plus simple :

for {set k 1} {$k<=10} {incr k} {
 acq 20 2
 saveima "image-$k"
}

Retenir que Aud'ACE est une surcouche par rapport à Audela. Les scripts développés pour l'interface Audace ne sont donc pas forcément tous accessibles dans une autre interface du logiciel Audela. Enfin, l'interface Audace utilise un certain nombre de variables d'environnement (configurations utilisateurs) dont il faut tenir compte pour créer un script véritablement standard pour Audace.

1. Déclencher une pose CCD avec un script Tcl et Audela

On souhaite réaliser une pose de 5 secondes en binning 2x2 avec une caméra Audine branchée sur le port lpt1 de l'ordinateur. A la fin de la pose, on souhaite écrire l'image sur le disque avec le nom test1.fits. Avec l'interface Audace, on écrirait :

# fichier script : test1.tcl pour Audace
acq 5 2
saveima test1.fits

Dans le cadre de l'interface Audace, il existe un buffer et une caméra créés par défaut. Il s'agit de buf1 et cam1. Si on souhaite partir uniquement des fonctions de Audela, sans utiliser celles apportées en supplément par Audace, alors le script devient plus compliqué. En effet, la séquence d''initialisation de Audace procède automatiquement à la création de la caméra d'un buffer (associé à l'image provenant de la caméra) et d'une zone de visualisation. Sans l'interface Audace, il faudra donc créer les objets Audela, et les utiliser dans le cadre de leur syntaxe bien plus lourde que dans Audace :

Voici le contenu du script test1.tcl à écrire dans un fichier texte :

# fichier script : test1.tcl pour Audela
set num(buf1) [buf::create]
set num(cam1) [cam::create audine lpt1]
cam$num(cam1) buf $num(buf1)
cam$num(cam1) exptime 5
cam$num(cam1) bin {2 2}
cam$num(cam1) acq
vwait status_cam$num(cam1)
buf$num(buf1) save test1.fits
cam::delete $num(cam1)
buf::delete $num(buf1)

Nous avons pris soin d'écrire ici une syntaxe rigoureuse par souci pédagogique. Voici résumé la significations des commandes dans le script, point par point :

2 Visualiser une image avec un script Tcl et Audela

test2.tcl va charger une image du disque vers Audela et va ensuite la visualiser.

# fichier script : test2.tcl pour Audela
set num(buf1) [buf::create]
set num(visu1) [visu::create $num(buf1) 1 ]
canvas .display
.display create image 1 1 -image image1 -anchor nw -tag img
pack .display
buf$num(buf1) load test1.fits
visu$num(visu1) disp
buf::delete $num(buf1)
visu::delete $num(visu1)

Dans le cadre de l'interface Audace, il existe un buffer et une zone de visualisation créés par défaut. Il s'agit de buf1 et visu1. De cette façon, le script ci dessus, peut-être résumé par la simple fonction loadima de l'interface Audace :

loadima test1.fits
Attention, toutefois la définition de la fonction loadima est un peu plus compliquée...

3 Traitement d'image avec un script Tcl et Audela

Le script test3.tcl montre une procédure de prétraitement classique (soustraction du dark et division par le flat) sur une seule image test1.fits

# fichier script : test3.tcl pour Audela
set num(buf1) [buf::create]
buf$num(buf1) load test1.fits
buf$num(buf1) sub dark.fits 0
buf$num(buf1) div flat.fits 4000
buf$num(buf1) save testp1.fits
buf::delete $num(buf1)

Commentaires

Le script test3.tcl écrit pour l'interface Audace devient :

# fichier script : test3.tcl pour Audace
loadima test1.fits
sub dark.fits 0
div flat.fits 4000
saveima testp1.fits

Le script test4.tcl montre une procédure de prétraitement classique (soustraction du dark et division par le flat) sur un lot d'images test1.fits à test 9.fits

# fichier script : test4.tcl pour Audela
ttscript2 "IMA/SERIES . test 1 9 .fits . testp 1 .fits SUB file=dark.fits offset=0"
ttscript2 "IMA/SERIES . testp 1 9 .fits . testp 1 .fits DIV file=flat.fits constant=4000"

Le script test4.tcl écrit pour l'interface Audace devient :

# fichier script : test4.tcl pour Audace
sub2 test dark.fits testp 0 9
div2 testp flat.fits testp 4000 9

A noter ici que la fonction de chargement de sub2 et div2 ne reconnaît que les extensions .fit par défaut (on peut changer cela avec l'instruction buf1 extension). On ne peut donc pas effectuer tout à fait la même chose de cette façon là. De plus, l'utilisation de ttscript2 a aussi l'avantage de pouvoir manipuler un lot d'images dont le premier indice est différent de zéro.

Le script test5.tcl, effectue la même opération que test4.tcl mais cette fois-ci, la valeur moyenne du flat field est calculée dans le script

# fichier script : test5.tcl
set num(buf1) [buf::create]
buf$num(buf1) load flat.fits
set statistics [buf$num(buf1) stat]
set mean [lrange $statistics 4 4]
buf::delete $num(buf1)
ttscript2 "IMA/SERIES . test 1 9 .fits . testp 1 .fits SUB file=dark.fits offset=0"
ttscript2 "IMA/SERIES . testp 1 9 .fits . testp 1 .fits DIV file=flat.fits constant=$mean"

Commentaires

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