Exemples utilisation wrappers IFU_io et IFU_math en tcl et python

De facon générale, quelque soit le langage d'interfacage, les routines conservent le meme nom que dans les bibliothèques C, ainsi que la liste des parametres. Des simplifications ont toutefois été apportées aux commandes d'accès aux descripteurs et aux tables pour lesquelles les arguments étaient passés par adresse de facon a les rendre indépendantes du type de paramètre (voir exemples suivants).

Wrappers to IFU_iolibs 6.3
python wrapper
Les scripts doivent commencer par loader IFU_py_io de la facon suivante :

import sys
sys.path.append("XXXXXX/IFU_C_iolibs-6.3/python_wrapper")
from IFU_py_io import *


où XXXXX désigne la localisation (le PATH) de vos librairies.

Attention ! Les commandes d'accès aux descripteurs et aux tables ont quelque peu changé par rapport à la librairie C (paramètres de retour de RD_desc et RD_tbl)
Exemple de scripts python utilisant le wrapper :

Acces a un spectre :

# set format according to IFU_DEFAULT_FMT
set_user_dataformat()

spec = SPECTRUM()

open_spec (spec,'myspectrum','IO')

startx = spec.startx

val = RD_spec(spec, 10)
WR_spec(spec, 10, 15)

WR_desc(spec,'CRPIX1',FLOAT,1,20.0)
pixref = RD_desc(spec,'CRPIX1',FLOAT,1)
print "pixref = ",pixref

close_spec(spec)

spec.__del__

Acces a une table :

# set format according to IFU_DEFAULT_FMT
set_user_dataformat()

table = TABLE()

open_table(table,'Neon_ref.fits','IO')

collbda = get_col_ref(table, 'LAMBDA')

lbda = RD_tbl(table, 20, collbda)
print "table(20,",collbda,") =",lbda

WR_tbl(table, 20, collbda, 6500.0)

close_table(table)

table.__del__
tcl wrapper
Utilisable depuis tclsh, wish, bltwish, tixwish, etc ...Inutile d'utiliser le IFU_wish qui peut s'averer trop lourd en memoire.

Des simplifications ont ete apportees aux commandes d'acces aux descripteurs et aux tables pour lesquelles les arguments etaient passes par adresse de facon a etre independantes du type. Meme plus besoin de declarer vos variables, ni de les allouer dynamiquement !

Les scripts doivent commencer par loader IFU_tcl_io.so de la facon suivante :

load $IFU_PATH/IFU_C_iolibs-6.3/tcl_wrapper/IFU_tcl_io.so IFU_tcl_io
Exemple de scripts tcl utilisant le wrapper :

Acces a un spectre :

# set format according to IFU_DEFAULT_FMT
set_user_dataformat

set spec [new_SPECTRUM]

open_spec $spec "myspectrum" "IO"

set startx [ $spec cget -start ]
RD_desc $spec "CRPIX1" $FLOAT 1 pixref
WR_desc $spec "TOTO" $CHAR 10 "0123456789"

set val [RD_spec $spec 10]
WR_spec $spec 10 15

close_spec $spec

delete_SPECTRUM $spec

Acces a une table :

# set format according to IFU_DEFAULT_FMT
set_user_dataformat

set table [new_TABLE]

open_table $table "Neon_ref.fits" "IO"

set collbda [ get_col_ref $table "LAMBDA" ]

RD_tbl $table 20 $collbda lbda
puts "Lambda = $lbda"

WR_tbl $table 20 $collbda 6500.0

close_table $table

delete_TABLE $table
Wrappers to IFU_mathlibs 6.3
python wrapper
Les scripts doivent commencer par loader IFU_py_io de la facon suivante :

import sys
sys.path.append("XXXXXX/IFU_C_iolibs-6.3/python_wrapper")
from IFU_py_io import *


load $IFU_PATH/IFU_C_mathlibs-6.3/tcl_wrapper/IFU_tcl_math.so IFU_tcl_math
Exemple de scripts python utilisant le wrapper :

Calcul de la mediane :

import numarray as N
work = N.zeros(10)
data = N.arange(10,typecode='Float64')

data *= data

med = median(data,10,work)
print "median = ", med

del(data)
del(work)

Tri d'un tableau :

import numarray as N
idx = N.zeros(10)
data = N.arange(10,typecode='Float64')

data = (10-data)*data
print "data =", data

# sort values
indexx(10,data,idx)

print "min value =", data[idx[0]]
print "max value =", data[idx[9]]

del(data)
del(idx)
tcl wrapper
Les scripts doivent commencer par loader IFU_tcl_math.so de la facon suivante :

load $IFU_PATH/IFU_C_mathlibs-6.3/tcl_wrapper/IFU_tcl_math.so IFU_tcl_math
Exemple de scripts tcl utilisant le wrapper :

Calcul de la mediane :

set work [ new_intArray 10 ]
set data [ new_doubleArray 10 ]

for {set i 0} {$i < 10} {incr i} {
   doubleArray_setitem $data $i [expr $i*$i*1.0]
}

set median [median $data 10 $work]
puts "median = $median"

delete_intArray $work
delete_doubleArray $data

Tri d'un tableau :

set data [ new_doubleArray 10 ]
set idx [ new_intArray 10 ]

for {set i 0} {$i < 10} {incr i} {
   doubleArray_setitem $data $i [expr (10-$i)*$i*1.0]
}

# sort values
indexx 10 $data $idx

set imin [intArray_getitem $idx 0]
set imax [intArray_getitem $idx 9]

puts "min value = [doubleArray_getitem $data $imin]"
puts "max value = [doubleArray_getitem $data $imax]"

delete_doubleArray $data
delete_intArray $idx