Viewing contents of file '../idllib/ssw/allpro/animprof.pro'
;+ ***********************************************************************
; NAME:
; ANIMPROF
;
; PURPOSE:
; Cette procedure trace une serie d'images unidimensionnelles
; (intensite et/ou polarisation)animees
; CATEGORY:
; NRH1 profils
;
; CALLING SEQUENCE:
; ANIMPROF,Images, Unit
;
; INPUTS:
; IMAGES Tableau d'images 2dim(espace,temps) ou 3dim(espace,temps,I:V)
; voir lec1d
; UNIT Unite associee au tableau
;
; KEYWORD PARAMETERS:
; INTENSITE trace du parametre I
; POLAR trace du parametre V
; ATTENTE delais entre le trace de 2 images
; HEURES tTableau de chaine de caracteres [Heure debut,Heure de fin]
; format de l'heure "hh:mn:ss:ccc"
; CANAUX tableau contenant [Canal de debut, Canal de fin]
; format: valeurs entieres
;
; OUTPUTS:
; Trace des images sucessives
;
; COMMON BLOCKS:
; NRH1_GLOBAL
;
; MODIFICATION HISTORY: (bonmartin@obspm.fr)
; 13/11/98) Adapte du logiciel XHELIO
;-*******************************************************************
PRO AnimProf,tabl_X, lun $
,Intensite=intensite, Polar=Polar, ATTENTE=Attente $
,HEURES=heures, CANAUX=canaux
;* ---------------------------- *
;* Test de la syntaxe *
;* ---------------------------- *
;
IF N_PARAMS() LE 1 THEN BEGIN
print,$
'' $
, 'Syntaxe: AnimProf, Tableau a tracer, Numero d unite logique'$
,' ,INTENSITE=intens,POLAR=polar,...]'
ENDIF
;
;* ------------------------------------------- *
;* Declaration des variables globales *
;* ------------------------------------------- *
;
COMMON NRH1_GLOBAL,nomfich,FichInfo
COMMON NRH1_ANIM, Image, Vmage, Heurp, Xcoor, Annotx, Annoty, $
Ninst, Heurdeb, Wait, Stki, Stkv
IF (NOT KEYWORD_SET(intensite) AND NOT KEYWORD_SET(polar)) THEN BEGIN
Ret= WIDGET_MESSAGE("Ni I, ni V demandé")
RETURN
ENDIF
; -----------------------------------*
; Test de disponibilite des images V *
; -----------------------------------*
s = size(tabl_x)
IF( s(0) LT 3 AND KEYWORD_SET(polar)) THEN BEGIN
Ret= WIDGET_MESSAGE('File without Stokes V')
RETURN
ENDIF
; -----------------------------------------
; Memorisation des informations principales
; sur le fichier
; -----------------------------------------
file = fichinfo(lun)
heuredeb = file.Heurdeb
heurefin = file.HeurFin
cdeb = fix(file.valorg(0))
cfin = fix(file.valorg(0)+file.nbpix(0)-1)
dt = file.paspix(1) ; intervalle de temps
dx = file.paspix(0) ; intervalle de canaux
; ----------------------------------
; Transformation de l'heure
; en milliseconde
;- ----------------------------------
IF NOT KEYWORD_SET(heures) THEN BEGIN
hdebut=heuredeb
hfinale=heurefin
ENDIF ELSE BEGIN
hdebut=HMS(heures(0))
hfinale=HMS(heures(1))
ENDELSE
hdeb=heures(0)
hfin=heures(1)
;---------------------------------------------
; Test sur la conformite des heures specifiees
;---------------------------------------------
IF (hdebut GT heurefin) OR (hdebut LT heuredeb) THEN BEGIN
hdebut=heuredeb
hdeb=MSH(heuredeb)
ENDIF
IF (hfinale GT heurefin) OR (hfinale LT heuredeb) THEN BEGIN
hfin=MSH(heurefin)
ENDIF
;-------------------------------------------
; Test sur la conformite des canaux specifies
;-------------------------------------------
IF NOT KEYWORD_SET(canaux) THEN BEGIN
cnldeb=cdeb
cnlfin=cfin
ENDIF ELSE BEGIN
cnldeb=canaux(0)
cnlfin=canaux(1)
ENDELSE
IF (cnldeb GE cnlfin) THEN BEGIN
Ret = WIDGET_MESSAGE('CANAL DEB > OR = THAN CANAL FIN')
RETURN
ENDIF
IF(cnldeb GT cdeb AND cnldeb LT cfin) THEN cnldeb=cdeb+FIX((cnldeb-cdeb)/dx)*dx
IF(cnlfin GT cdeb AND cnlfin LT cfin) THEN cnlfin=cfin+FIX((cnlfin-cfin)/dx)*dx
canaux = [cnldeb, cnlfin]
xcoor = cdeb + findgen(file.nbpix(0))*dx ; Tableau d'Abscisses: canaux
icdeb = FIX((cnldeb-cdeb)/dx)
icfin = FIX((cnlfin-cdeb)/dx)
;nbcan = N_ELEMENTS(xcoor) ; Nbre de points de l'abscisse
nbcan = file.nbpix(0)
;---------------------------------------------------------------
; CHARGEMENT DES INFORMATIONS A AFFICHER
;---------------------------------------------------------------
freq=motcle(lun,'FREQ')
label=motcle(lun,'LABEL')
type=motcle(lun,'TYPE')
ytitle = 'Amplitude'
subtitle = label+' / ' + string(fichinfo(lun).date) + '/ '+ string(freq)
IF (!P.MULTI(1) NE 0) THEN Taille=0.4 ELSE Taille=0.7
;-------------------------------------
; AFFICHAGE D'UNE ANIMATION DE PROFILS
;-------------------------------------
numdeb = indice(heuredeb,hms(hdeb),dt)
numfin = indice(heuredeb,hms(hfin),dt)
ninst = numfin - numdeb + 1
;----------------------------------------------------------
; LECTURE DES PROFILS, STOCKAGE DANS TABLEAUX IMAGE, VMAGE
;----------------------------------------------------------
STKI = 0
IF KEYWORD_SET(intensite) THEN BEGIN
STKI = 1
image = fltarr(nbcan, ninst)
FOR i=numdeb,numfin DO BEGIN
LoadIntens,Tabl_x,imagex,i,FichInfo,lun
image(*,i-numdeb) = imagex
ENDFOR
maximage = MAX(image, MIN = minimage)
ENDIF
STKV = 0
IF KEYWORD_SET(polar) THEN BEGIN
STKV = 1
vmage = fltarr(nbcan, ninst)
FOR i=numdeb,numfin DO BEGIN
LoadPolar, Tabl_x, imagex, i, FichInfo,lun,ok
vmage(*, i-numdeb) = imagex
ENDFOR
maxvmage = MAX(vmage, MIN = minvmage)
IF KEYWORD_SET(intensite) THEN BEGIN ; Trace I et V
IF(-minvmage GT maximage) THEN maximage = -minvmage
minimage = - maximage
ENDIF ELSE BEGIN
minimage = minvmage & maximage = maxvmage
image = vmage
ENDELSE
ENDIF
space = 0.1*(maximage-minimage)
yrange = [minimage-space, maximage+space]
HEURP = STRARR(ninst) ; chaines de caracteres contenant les heures des profils
FOR i=numdeb,numfin DO BEGIN
temps = heuredeb + i*dt
heurp(i-numdeb) = MSH(temps)
ENDFOR
;-----------------------------------
; TRACE DU CADRE
;-----------------------------------
red = [0, 1, 1, 0, 0, 1] & green = [0,1,0,1,0,1] & blue = [0,1, 0, 0, 1, 0]
TVLCT, 255*red, 255*green, 255*blue
PLOT, xcoor, image(*, 0), xstyle=1, ystyle=1, XRANGE=canaux, YRANGE=yrange, $
/NODATA, COLOR=1, TICKLEN = -0.02, $
YTITLE = ytitle, SUBTITLE = subtitle, $
CHARSIZE=Taille,YMARGIN=[8,2]
IF (!P.MULTI(1)+!P.MULTI(2)) NE 0 THEN BEGIN
!P.MULTI(0)=!P.MULTI(0)+1
ENDIF
;-----------------------------------
; TRACE DES PROFILS
;-----------------------------------
annoty = 0.98*yrange(0) + 0.02*yrange(1)
annotx = 0.02*canaux(1) + 0.98*canaux(0) ; annotation heure
acc = 0.1 ; definition provisoire d'un facteur d'acceleration
IF NOT KEYWORD_SET(attente) THEN Wait = 0.1$ ; attente (defaut: 0.1 s)
; apres chaque trace de profil
ELSE Wait = Attente
NRH1_ANIM
IF !P.MULTI(0) NE 0 THEN BEGIN
!P.MULTI(0)=!P.MULTI(0)-1
ENDIF
END