PRO traceisoph, x, lun, POLAR=polar, INTENS=intens,LEVELS=levels, $
          NLEVELS=nlevels,C_COLORS=c_colors,MAX_VALUE=max_value,NIV=niv, $
          HEURES=heures,CANAUX=canaux,CHGH=chgh,WIN=win, CHARSIZE = charsize, $
          LASER=Laser, TEK=tek, NOERASE=noerase, FONCTION = fonction, GRAY=gray

;	PROCEDURE DE TRACE D'ISOPHOTES A PARTIR DE 1 OU 2 TABLEAUX CONTENANT
; DES IMAGES EN FONCTION DU TEMPS PROVENANT DE LA FONCTION LEC1D (IMAGE 1D DU
; RH)
; (TABLEAU DE 2D CONTENANT UN SEUL TYPE DE DONNEES 'INTENSITE OU POLARISATION')
; (TABLEAU DE 3D CONTENANT LES 2 TYPE DE DONNEES 'INTENSITE ET POLARISATION')
; (1 TABLEAU ----> TRACE D'ISOPHOTES SUIVANT LE CHOIX PASSES EN INTERFACE) 
;
;     Parametres d'entree :    
;                         X ...... Tableau issu de LEC1D contenant les images
;                                  (2 dimensions) 
;                           X(num_Canal,Temps)
;                                  (3 Dim sinon )
;                           X(Num_Canal,Temps,type)
;                                               type = 0 ---> Intensite
;                                               type = 1 ---> Polarisation
;                        lun ......Numero d'unite logique dont x est issu.
;
;                        fin ......... Heure de fin du trace d'isophotes
;                        debut ....... Heure de debut du trace d'isophotes
;                        cdeb..........Canal de debut
;                        cfin..........Canal de fin
;                        /POLAR ...... Trace des donnees de polarisation
;                                      exclusivement 
;                        /INTENS ..... Trace de donnees d'intensite
;                                      exclusivement
;                        niv ......... Determine le pourcentage de niveaux
;                                      traces par rapport au niveau maximun
;                        /LASER ...... Permet de rediriger la sortie graphique
;                                      sur l'imprimante laser
;                        /TEK ........ Permet d'utiliser cette fonction sur
;                                      console TEKTRONIC
;                        win ......... TABLEAU 1D contenant les numero des
;                                      fenetres d'affichages
;                        /NOERASE .... Superposition des affichages
;                        fonction .....No de fonction a utiliser pour le pas des
;                                      niveaux d'isophotes
;                        levels,nlevels,max_value,c_colors (voir Manuel IDL)
;

;
;* -------------------------------------------- *
;*     Declaration des variables globales       *
;* -------------------------------------------- *
;
   COMMON NRH1_GLOBAL,nomfich,FichInfo
;
;* ----------------------------------------------------------- *
;*	Test de validite de la syntaxe de la procedure         *
;* ----------------------------------------------------------- *
;
  IF (N_PARAMS() LE 1) THEN BEGIN
      Print, 'Erreur de syntaxe: Parametres manquants'
      Print, ''
      Print, ' Syntaxe: TRACEISOPH, varx, infovarx, [,/intens]'
      Print, '                [,/polar] [,levels=nn] [,c_colors=nn] '
      Print, '                [niv=niveau max en %] [,max_value=max]'
      Print, '                [nlevels=nb de niveau] [debut=heure de depart]'
      Print, '                [fin=heure de fin] [cdeb=canal de depart]'
      Print, '                [cfin=canal de fin]'
      Print, '                [win=Num de fenetre d''affichage]'
      MESSAGE,' Erreur.'
  ENDIF


;* ----------------------------------------------------------------------- * 
;*	Memorisation de la taille du tableau; controle de la presence de V *
;* ------------------------------------------------------------------------* 
;*
s = size(x)   

IF ((s(0) LT 2) OR (s(0) GT 3)) THEN BEGIN
        Print,['Taille du tableau incompatible',$
                'Le tableau traite doit provenir',$
                'de la fonction LEC1D']
        return
ENDIF

IF(KEYWORD_SET(polar) AND s(0) EQ 2) THEN BEGIN
	print,['Polarisation demandee sur un fichier intensite seule',$
		'Retour au MENU']
	return
ENDIF

;
;* ------------------------------------------------------------- * 
;*	gestion de l'intervalle de temps de visualisation        *
;* --------------------------------------------------------------*

file=Fichinfo(lun)
HeurDx=file.heurdeb
HeurFx=file.Heurfin

TIME = lonarr(2)

IF NOT KEYWORD_SET(heures) THEN BEGIN
    TIME(0)=HeurDx
    TIME(1)=HeurFx  
ENDIF ELSE BEGIN 
    TIME(0) = hms(heures(0)) 
    TIME(1) = hms(heures(1)) 
ENDELSE 

;
;* ----------------------------- *
;*	changement d'heure       *
;* ----------------------------- *
;

; *** Remarque klk 2/7/96: Il faudrait eviter de poser des questions dans
; *** une procedure non liee aux widgets. ***
chgh=0
REPEAT BEGIN
;IF (chgh EQ 1) OR (TIME(0) eq 0) THEN BEGIN
;      hchaine = ''
;      READ, 'Entrez l''heure de debut (hh:mm:ss:ms) :  ', hchaine 
;      IF hchaine eq '' THEN TIME(0) = HeurDx ELSE TIME(0) = hms(hchaine) 
;      hchaine = ''
;      READ, 'Entrez l''heure de fin (hh:mm:ss:ms) :  ',hchaine
;      IF hchaine eq '' THEN TIME(1) = HeurFx ELSE TIME(1) = hms(hchaine) 
;ENDIF

IF  TIME(1) LT TIME(0) THEN BEGIN
     print, ' heure de debut superieure a l''heure de fin'
     return
ENDIF

IF (TIME(0) LT HeurDx) THEN  TIME(0) = HeurDx
IF (TIME(1) GT HeurFX) THEN  TIME(1) = HeurFx


;-----------------------------------------------------
; VERIFICATION DES PARAMETRES canaux

canaldeb=fix(file.valorg(0))
canalfin=fix(file.valorg(0)+file.paspix(0)*file.nbpix(0)-1)
IF NOT KEYWORD_SET(canaux) THEN BEGIN
   cdeb=canaldeb
   cfin=canalfin
ENDIF ELSE BEGIN
   cdeb=canaux(0)
   cfin=canaux(1)
ENDELSE
IF (cdeb LT canaldeb) THEN cdeb = canaldeb
IF (cfin GT canalfin) THEN cfin = canalfin

IF (cfin-cdeb LE 0) THEN BEGIN
    print,'canal de fin < canal de debut'
    return
ENDIF

;* ---------------------------------------------------------------- *
;*	Calcul de l'indice de la premiere et derniere images        *
;*	corespondant a l'intervalle de temps demande ainsi          *
;*	que le temps exact de debut et de fin de l'intervalle       *
;* ---------------------------------------------------------------- *
; 

hdeb= FLOAT(HeurDx)		; conversion de l'heure de debut en reel
dtx=file.paspix(1)		; Pas temporel entre deux images
IF TIME(0) LT hdeb THEN BEGIN 
   numix1 = 0
   tempx1 = HeurDx
ENDIF ELSE BEGIN
   numix1= INDICE(hdeb,TIME(0),dtx,tempx1) ; Indice et temps exact de l'image
ENDELSE

hfin= FLOAT(HeurFx)                     ; conversion de l'heure de fin en reel
IF TIME(1) GT hfin THEN BEGIN
   numix2 = s(2)-1
   tempx2 = HeurFx
ENDIF ELSE BEGIN
   numix2= INDICE(hdeb,TIME(1),dtx,tempx2) ; Indice et temps exact de l'image
ENDELSE

IF (numix1 EQ numix2) then BEGIN
	chgh=1;
	print,'Erreur dans le choix des heures',$
		'Le pas temporel du fichier est de ',$
		dtx,$
		'ms.',$
		'Entrez de nouvelles valeurs.',$
		'Temps de debut x = ',$
		MSH(tempx1),$
		'Temps de fin   x = ',$
		MSH(tempx2)
	return
ENDIF
ENDREP UNTIL (numix1 NE numix2)
; modif anne juillet 96 changer le sp indice!!!
if numix2 gt (size(x))(2)-1 then numix2=(size(x))(2)-1
;print,numix2
;-----------------------------------------------------
; recuperation du tableau contenant les images demandees 
; seulement

tx = x(*,numix1:numix2,*)

icandeb = FIX((cdeb-canaldeb) / file.paspix(0))
icanfin = FIX((cfin-canalfin) / file.paspix(0)) + file.nbpix(0)-1
xx = tx(icandeb:icanfin,*,*)
ss= size(xx)
ninst = ss(2)		;	nombre d'instants (d'images 1D)
tx = 0.		; Liberation place memoire
                                                                 
;* --------------------------------------------- *
;*	Affectation des attributs  pour contour  *
;*---------------------------------------------- *

tabmax = FLTARR(ninst)
FOR i = 0, ninst-1 DO tabmax(i) = MAX(xx(*,i,0)) ; tableau des maxima d'image I
nivmax=MAX(tabmax,MIN=nivmin)			;  maximum le plus haut (bas)
	
IF(KEYWORD_SET(polar)) THEN BEGIN
	tabmin = FLTARR(ninst)
	FOR i = 0, ninst-1 DO tabmax(i) = MAX(xx(*,i,1))
	nivmax=MAX(tabmax)
	FOR i = 0, ninst-1 DO tabmin(i) = MIN(xx(*,i,1))
	nivmin = MIN(tabmin)
	IF(nivmax+nivmin LT 0.) THEN nivmax = -nivmin
ENDIF
IF N_ELEMENTS(niv) NE 0 THEN BEGIN
        IF (niv LT 0) THEN niv = 0
        IF (niv GT 100) THEN niv = 100
        IF (niv EQ 100) THEN BEGIN 
             IF (N_ELEMENTS(max_value) NE 0) THEN $
             max = max_value ELSE max = (niv*(nivmax)/100)
		cmin = nivmin
        ENDIF ELSE BEGIN
		max = (niv*(nivmax)/100)
		cmin = (niv*(nivmin)/100)
	ENDELSE
ENDIF ELSE BEGIN
        IF (N_ELEMENTS(max_value) NE 0) THEN $
        max=max_value ELSE max=nivmax
ENDELSE
  
max_value = nivmax+1   ; besoin de max_value pour que contour ne buggue pas 
                         ; valeur max du fichier +1
                         ; max: valeur max pour affichage

IF N_ELEMENTS(nlevels) EQ 0 THEN nlevels = 12 $
	ELSE IF ((nlevels LT 1) OR (nlevels GT 29 )) THEN nlevels = 12
IF N_ELEMENTS(c_colors) EQ 0 THEN c_colors = !p.color
IF N_ELEMENTS(noerase) EQ 0 THEN noerase = 0
;IF (max LE nivmin) THEN BEGIN
;	max=nivmin+1 
;ENDIF

IF ( NOT KEYWORD_SET(fonction)) THEN fonction = 0 
IF N_ELEMENTS(levels) EQ 0 THEN BEGIN

; type de fonction pour le calcul des niveaux (0: lin., min=deltaI/2)
	IF fonction LE 1 THEN BEGIN
		fct_type='linear'
		ctype = 1
		IF fonction EQ 0 THEN cmin=0.
		IF KEYWORD_SET(polar) THEN cmin = -max
		chniveaux, max, cmin, nlevels, ctype, levels
		contstyle = INTARR(nlevels)
		negs = WHERE(levels LT 0.)
		IF((SIZE(negs))(0) GT 0) THEN contstyle( negs ) = 1
	ENDIF ELSE IF fonction EQ 2 THEN  BEGIN
		fct_type='log'
		IF nivmin LE 0 THEN  $	; Min dans le champ
			cmin = niv*MIN(xx(WHERE(xx(*,*,0) GT 0.)))/100	
		ctype = 2
		chniveaux, max, cmin, nlevels, ctype, levels
		contstyle = INTARR(nlevels)
		negs = WHERE(levels LT 0.)
		IF((SIZE(negs))(0) GT 0) THEN contstyle( negs ) = 1
	ENDIF

ENDIF

;************************************************************** 
;****** GESTION DES DIFFERENTES CONFIGURATIONS POSSIBLES ******
;**************************************************************
;

cas = 0 

IF (s(0) EQ 2) THEN $	; le tableau d'entree a 2 dimensions => cas = 11
	cas=11 $
ELSE BEGIN		; le tableau d'entree a 3 dimensions 
        IF ((KEYWORD_SET(intens)) AND (NOT KEYWORD_SET(polar))) THEN $
        cas=cas+2	;	; trace I oui, V non: cas = 2
        IF ((NOT KEYWORD_SET(intens)) AND (KEYWORD_SET(polar))) THEN $
        cas=cas+3		; trace I non, V oui : cas = 3
        IF ((KEYWORD_SET(polar)) AND (KEYWORD_SET(intens))) OR $
               ((NOT KEYWORD_SET(intens)) AND (NOT KEYWORD_SET(polar)))  THEN $
        cas=cas+4		; trace I oui, V oui: cas = 4
;        IF (s(0) EQ 3) THEN $	; a quoi sert l'addition de 20 ???
        cas=cas+20        
ENDELSE

 
; si polar seul : unites = 2
; si intensite seule : unites =3
; si polar + intensite ou ni polar ni intensite : unites = 4
; si tableau x de dimension 2 : dizaines = 1
; si x de dimension 3 : dizaines = 2

nbcan = (SIZE(xx))(1)

IF (cas LE 23) THEN BEGIN
   t = 1
   titre = strarr(t)                    ;Titre du trace 
   tab2d = replicate(0.0,nbcan,ninst,t)  ;Tableau contenant les valeurs a tracer
   c = 0
   CASE cas OF

     11 : BEGIN
               ; Ecriture du tableau des intensites: tab2d(*,*,0)
                 FOR i=0,ninst-1,1 DO $
                     tab2d(*,i,0) = REFORM(xx(*,i))
                 titre(0) = motcle(lun,'FREQ') + ' I'
          END      
     22 : BEGIN
              ; Si le tableau est de 3 dim et intens demande
                titre(0) = motcle(lun,'FREQ') + ' I'
                FOR i=0,ninst-1,1 DO $
                    tab2d(*,i,0) = REFORM(xx(*,i,0))
          END
     23 : BEGIN
              ; SI le tableau est de 3 dim et polar demande
                titre(0) = motcle(lun,'FREQ') + ' V'
                FOR i=0,ninst-1,1 DO $
                    tab2d(*,i,0) = REFORM(xx(*,i,1))
              
          END
    ENDCASE
ENDIF

IF (cas EQ 24) THEN BEGIN	; option inutile pour l'instant; revoir pour trace I et V superpose (I en contours, V en niveaux de couleurs)
   t = 2
   titre = strarr(t)
   tab2d = replicate(0.0,nbcan,ninst,t)  
             ; Si il contient que 3 dimemsions rien ou tout demande
             ; on affiche polar et intens
               FOR i=0,ninst-1,1 DO BEGIN
                   tab2d(*,i,0) = REFORM(xx(*,i,0))
                   tab2d(*,i,1) = REFORM(xx(*,i,1))      
               ENDFOR
                 titre(0) = motcle(lun,'FREQ') + ' I'
                 titre(1) = motcle(lun,'FREQ') + ' V'
               c = 0  
 ENDIF


 
;* ---------------------------------------------- *
;*    Calcul de la graduation temporelle  (yaxis) *
;* ---------------------------------------------- *

   yaxis = TIME(0)+ findgen(ninst)*dtx
   milsec_axis, yaxis, tickv, tickl, ticks

;
;* ------------------------------------------------- *
;*	Calcul de la graduation spatiale (xaxis)     *
;* ------------------------------------------------- *
;

  pas = file.paspix(0)
  xaxis = cdeb+pas*findgen(nbcan)

      ; formule de calcul du numero de canal                
      ; No Point = ((canal - 1)* nb pix/nb canaux)+1

;* --------------------------------------------- *
;*	Prise en compte des parametres de        *
;*	visualisation entres par l'utilisateur    *
;* --------------------------------------------- *

     IF NOT KEYWORD_SET(win) THEN win = [1,2]
     sw =  SIZE(win)
     IF sw(1) LT t THEN BEGIN
         win = REFORM(win,t)
         Print,['Nombre de fenetres declarees insuffisant',$
                 'Veuillez entrer ',$
                  t-sw(1),$
                 ' numeros de plus']
         FOR i=sw(1),t-1,1 DO BEGIN
            READ,w
            win(i)=w
         ENDFOR
     ENDIF
     
               ;* ---------------------------------- *
               ;*	Affichage des isophotes      *
               ;* ---------------------------------- *


;------------------------------------*
; Boucle sur le nombre t de traces   *
;------------------------------------*

FOR i=0,t-1,1 DO BEGIN 
	IF c LE 0 THEN k=0 ELSE k=1


; Rotation du tableau pour mettre l'axe du temps horizontal
image = rotate(tab2d(*,*,i),4)

; Titres du trace:

xtitle = 'Universal time (' + file.date + ')'
label = STRING(motcle(lun, 'LABEL'))
IF STRMID(label, 0, 3) EQ 'EST' THEN label = 'east-west'
;IF STRMID(label, 0, 3) EQ 'NOR' THEN label = 'north-south'
IF STRMID(label, 0, 3) EQ 'NOR' THEN label = 'south-north'
ytitle = 'Channel ' ;(' + label + ')'

IF(!P.MULTI(2) LE 2) THEN BEGIN
	if (!d.name eq 'X' ) then  chrxy = 0.4
	if (!d.name eq 'PS') then  chrxy = 0.6
	multichar = charsize
ENDIF ELSE BEGIN
	if (!d.name eq 'X' ) then  chrxy = 0.3
	if (!d.name eq 'PS') then  chrxy = 0.4
	multichar = 2*charsize
ENDELSE

!x.window(0) = !p.position(0) & !y.window(0) = !p.position(1)
!x.window(1) = !p.position(2) & !y.window(1) = !p.position(3)

    if (!d.name eq  'X') then begin
	xc_size = 1 ;	Claude: 0.7
	yc_size = 1 ;	Claude: 0.7
	ch_size = 0.6 * multichar
    endif
    if (!d.name eq 'PS') then begin
	xc_size = 0.7
	yc_size = 0.7
	ch_size = 0.6 * multichar
    endif

if(gray EQ 1 OR gray EQ 2) then begin
; Trace des niveaux de gris/couleurs (gray >0)
	imsize = SIZE(image)
	intpolcan = 100/imsize(2) + 1
	IF intpolcan GT 1 THEN BEGIN
		grimage = REBIN(image, imsize(1), intpolcan*imsize(2))
;	Enlever les (intpolcan-1) points au-dela du domaine de canaux 
;	selectionne (voir description REBIN, "Endpoint effects when expnading")
		grimage = grimage(*, 0:(SIZE(grimage))(2)-intpolcan )
	ENDIF ELSE BEGIN
		grimage=image
	ENDELSE
	IF (!D.NAME  EQ 'X') THEN BEGIN	; Trace sortie X
;		c = BYTSCL(image, MIN=levels(0), MAX=levels(nlevels-1))
		c = BYTSCL(grimage, MIN=levels(0), MAX=levels(nlevels-1))
		px = intarr(2) & py = intarr(2)
		for ipos = 0,1 do begin
			px(ipos) = !p.position(2*ipos) * !d.x_vsize
			py(ipos) = !p.position(2*ipos+1) * !d.y_vsize
		endfor
		sx = px(1) - px(0) +1
		sy = py(1) - py(0) + 1
		tv, congrid(c, sx, sy), px(0), py(0), /order

	ENDIF ELSE BEGIN	; Trace sortie laser

;		c=bytscl(-image, MIN=-levels(nlevels-1), MAX=-levels(0))
		c=bytscl(-grimage, MIN=-levels(nlevels-1), MAX=-levels(0))
		tv, c, !x.window(0), !y.window(0), $
			xsize = !x.window(1) - !x.window(0) ,$
			ysize = !y.window(1) - !y.window(0) , /norm, /order

	ENDELSE
	grimage = 0.

	if(gray eq 1) then $	; Trace du cadre
		CONTOUR, image, yaxis, xaxis, XSTYLE = 1, YSTYLE = 1, $
		MAX_VALUE = max_value, NLEVELS = nlevels, LEVELS = levels , $
		XRANGE = [time(0), time(1)], YRANGE = [cfin, cdeb], $
        	XTICKV = tickv, XTICKS = ticks(0), XMINOR = ticks(1), $
		XTICKNAME = tickl,$
		TICKLEN=-0.02, XTITLE = xtitle, YTITLE = ytitle, $
	    	charsize=ch_size, xcharsize=xc_size, ycharsize=yc_size, $ 
		COLOR = !p.color, /noerase, /nodata

	if (gray eq 2) then $	; Trace du cadre, superposition des isophotes
		CONTOUR, image, yaxis, xaxis, XSTYLE = 1, YSTYLE = 1, $
		MAX_VALUE = max_value, NLEVELS = nlevels, LEVELS = levels , $
		XRANGE = [time(0), time(1)], YRANGE = [cfin, cdeb], $
		XTICKV = tickv, XTICKS = ticks(0), XMINOR = ticks(1),$
		XTICKNAME = tickl, $
		TICKLEN=-0.02, XTITLE = xtitle, YTITLE = ytitle, $
		charsize=ch_size, xcharsize = xc_size, ycharsize = yc_size, $ 
		C_LINESTYLE = contstyle, $
		COLOR = !p.color, /NOERASE, /FOLLOW

endif else IF gray EQ 0 THEN begin	; Trace des isophotes seules (gray = 0)

		CONTOUR, image, yaxis, xaxis, XSTYLE = 1, YSTYLE = 1, $
		MAX_VALUE = max_value, NLEVELS = nlevels, LEVELS = levels , $
		XRANGE = [time(0), time(1)], YRANGE = [cfin, cdeb], $
		XTICKV = tickv, XTICKS = ticks(0), XMINOR = ticks(1), $
		XTICKNAME = tickl, $
		TICKLEN=-0.02, XTITLE = xtitle, YTITLE = ytitle, $
		charsize=ch_size, xcharsize = xc_size, ycharsize = yc_size, $ 
;		C_COLORS = c_colors, $
		C_LINESTYLE = contstyle, $
		COLOR = !p.color, $
		NOERASE = noerase, /FOLLOW

endif else IF gray EQ 3 THEN begin	; Trace des isophotes et d'une surf. 3D
	SHOW3, image>cmin<max
ENDIF


x0 = !p.position(0) & x1 = !P.position(2)
y0 = !p.position(1) & y1 = !P.position(3)

distcad = (y1-y0)/0.58
; la div par 0.58 vient du 0.21 de distcad dans MENUTRACEISOPH. A revoir

IF STRUPCASE(STRMID(label, 0, 1)) EQ "E" THEN lab = ["E", "W"] $
	ELSE lab = ["S", "N"]
xyouts, x0, y1+0.05*distcad, lab(0), CHARSIZE = .9, alignment = 1., /normal
xyouts, x0, y0-0.1*distcad, lab(1), CHARSIZE = .9, alignment = 1., /normal

; Sauvetage des parametres du cadre d'isophotes/niveaux de gris
savpos = !p.position
savtransx = !x.s
savtransy = !y.s

; Ecriture des informations a droite du trace

!p.position(0) = 1.05*x1 & !P.position(2) =  1. ; .95 

; 1) Titre, type de contours, temps d'integration
	xyouts,.99*!p.position(2) , !p.position(3)+0.1*distcad, alignment=1.,$ 
		titre(0), CHARSIZE = .9, /normal
	xyouts,.99*!p.position(2), !p.position(1)-0.1*distcad, alignment=1., $ 
	'Integ.:' + string(format='(f7.1)', file.paspix(1)/1000.)+ ' s',$
		 charsize = .7, /normal
	xyouts, .99*!p.position(2), !p.position(3) , alignment=1.,$
		'Levels' + ' (' + fct_type + '):', charsize = .7, $
		/normal 

; 2) Valeurs des niveaux (option gray = 0; isophotes)

	IF(KEYWORD_SET(polar)) THEN nivmax = MAX(xx(*,*,1), MIN = nivmin)$
		ELSE nivmax = MAX(xx(*,*,0), MIN = nivmin)
	lev = WHERE(levels GE nivmin AND levels LE nivmax)
	nlev = N_ELEMENTS(lev) 

; *** test
;print,"Niveaux min, max du fichier : ", nivmin, nivmax
;print, "Indices des niveaux a annoter :", lev 

	IF(gray EQ 0) THEN BEGIN
		slevels = STRING(levels(0:nlev-1),FORMAT='(G11.3)')
		IF(!P.MULTI(2) LE 3) THEN $
			nniveau = nlev ELSE nniveau=nlev/2
		pas = 0.8*(!p.position(3) - !p.position(1))/(nniveau+1)
		aux = !p.position(1) + 0.125*pas
		annotx = aux + findgen(nniveau)*pas
		annoty = .99*!p.position(2)	;	!p.position(0)

		IF(!P.MULTI(2) LE 3) THEN BEGIN
			FOR ind=0, nniveau-1 DO xyouts, annoty, annotx(ind), $
				alignment=1.,slevels(ind), $
				charsize = chrxy, /NORMAL
		ENDIF ELSE BEGIN
			FOR ind=0, nniveau-1 DO begin
				slev = slevels(ind+nniveau) + slevels(ind) 
				xyouts, annoty, annotx(ind), alignment=1., $
				slev, charsize=chrxy,/normal
			ENDFOR			
		ENDELSE
	ENDIF ELSE IF gray EQ 1 OR gray EQ 2 THEN BEGIN

; 3) Trace de la barre des couleurs (gray>0: niveaux gris avec ou sans isoph.)
		auxpos = !p.position
		!p.position(2) = !p.position(0) + .02
		pas = !p.position(3) - !p.position(1)
		!p.position(1) = !p.position(1) + 0.1*pas
		!p.position(3) = !p.position(3) - 0.1*pas

		!x.window(0) = !p.position(0) & !y.window(0) = !p.position(1)
		!x.window(1) = !p.position(2) & !y.window(1) = !p.position(3)

		dist = (levels(nlev-1)-levels(0))/(!D.N_COLORS-1)
		bright =  levels(0) + findgen(!D.N_COLORS)*dist
		barrecoul = fltarr(2, !D.N_COLORS)
		for i = 0,1 do barrecoul(i,*) = bright(*)
	
		if(!D.NAME EQ 'X') then begin
			c = BYTSCL(barrecoul, MIN=levels(0), $
				MAX=levels(nlev-1))	
			FOR ipos = 0,1 DO BEGIN
				px(ipos) = !p.position(2*ipos) * !d.x_vsize
				py(ipos) = !p.position(2*ipos+1) * !d.y_vsize
			ENDFOR
			sx = px(1) - px(0) + 1
			sy = py(1) - py(0) + 1
			tv, congrid(c, sx, sy), px(0), py(0)
			CONTOUR, barrecoul,[0,1] , bright, YSTYLE = 1, $
	        	TICKLEN=-0.02, $
			xticks=1, xtickname=[' ',' '], xminor=1, $
			yticks=1, ytickname=[' ',' '], yminor=1, $
			/noerase, /nodata
			AXIS, YAXIS=1, YSTYLE=1, CHARSIZE=0.6, $
				TICKLEN=-0.02, XMINOR=1
	
		ENDIF ELSE BEGIN

			c=bytscl(-barrecoul, MIN=-levels(nlev-1), $
				MAX=-levels(0))
			tv, c, !x.window(0), !y.window(0), $
				xsize = !x.window(1) - !x.window(0) ,$
				ysize = !y.window(1) - !y.window(0) ,$
				/norm
			CONTOUR, barrecoul,[0,1] , bright, YSTYLE = 1, $
		        	TICKLEN=-0.02, $
				xticks=1, xtickname=[' ',' '], xminor=1, $
				yticks=1, ytickname=[' ',' '], yminor=1, $
				/noerase, /nodata
			AXIS, YAXIS=1, YSTYLE=1, CHARSIZE=0.6, $
				TICKLEN=-0.02, XMINOR=1

		ENDELSE

		!p.position = auxpos
		!P.MULTI(0) = !P.MULTI(0)-1
		IF(!P.MULTI(0) LT 0) THEN !P.MULTI(0) = !P.MULTI(2)-1
;	ENDELSE
	ENDIF

; Remise des parametres du cadre des isophotes/niveaux de gris
	!p.position = savpos
	!x.s = savtransx
	!y.s = savtransy

	IF KEYWORD_SET(tek) THEN Pause  
	c = c-1
ENDFOR               
     
               ;* ------------------------------------ *
               ;*   Fin de l'affichage des isophotes   *
               ;* ------------------------------------ *

; on met a jour !p.multi pour que les prochains traces
; se produisent au bon endroit (noerase ne gere pas le !p.multi)

  IF (KEYWORD_SET(NOERASE)) THEN BEGIN
      IF !P.MULTI(0) NE 0 THEN BEGIN
        !P.MULTI(0)=!P.MULTI(0)-1
      ENDIF
  ENDIF  


 END
