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