
PRO superpose_img_volgaus, tabimg, heure, fichposi, Id_Win
COMMON INFO2D, str_inf2d
COMMON VISU_2D,str_visu
COMMON LIMIT,str_lim

	;calcul du nb de pixels en x et y en fonction de la region selectionnee
	interpx= Fix(str_visu.dim /( str_lim.Xf-str_lim.Xd))
	interpy= Fix(str_visu.dim /( str_lim.Yf-str_lim.Yd))
	interp= interpx
	if interpx gt interpy then interp = interpy
	nbpx = (str_lim.Xf-str_lim.Xd+1)*interp
	nbpy = (str_lim.Yf-str_lim.Yd+1)*interp

	; calcul des coordonnees heliographiques
	Xd = ind_rs(str_lim.Xd, str_inf2d.Xcen, str_inf2d.Ray)
	Xf = ind_rs(str_lim.Xf, str_inf2d.Xcen, str_inf2d.Ray)
	Yd = ind_rs(str_lim.Yd, str_inf2d.Ycen, str_inf2d.Ray)
	Yf = ind_rs(str_lim.Yf, str_inf2d.Ycen, str_inf2d.Ray)
	ECH_RS, Xd, Xf, nbpx, xplot
	ECH_RS, Yd, Yf, nbpy, yplot

	; affichage de l'image pour l'heure donnee
	tabaff=tabimg(str_lim.Xd:str_lim.Xf, str_lim.Yd:str_lim.Yf)
	tabaff = REBIN(tabaff, nbpx, nbpy)
	WSET, Id_Win
	TVSCL, tabaff

	; superposition du volume gaussien de chaque position
	position = [0,0,nbpx, nbpy]
	; recupere le nombre de positions figurant dans le fichier
	hprim = HEADFITS(fichposi)
	nbposi = FXPAR(hprim, 'N_EXTEND')
	FOR pos=0, nbposi-1 DO BEGIN
	    time = rdfilepos(fichposi, 'TIME', pos+1)
	    goodval = WHERE(time EQ heure, count)
		IF count GT 0 THEN BEGIN
			temp = {GAUSS, max:0.0, xmax:0.0, ymax:0.0, gra:0.0, grb:0.0, tet:0.0}
			rdline_fpos, fichposi, pos+1, goodval(0), temp
			tabaff = FLTARR(str_inf2d.Npx, str_inf2d.Npy)
			calc_volgauss, temp, str_inf2d.Npx, str_inf2d.Npy, tabaff
			tabaff=REBIN(tabaff(str_lim.Xd:str_lim.Xf, $
			str_lim.Yd:str_lim.Yf), nbpx, nbpy)
			CONTOUR, tabaff, xplot, yplot, XRANGE=[xplot(0), xplot(nbpx-1)], $
	   		YRANGE=[yplot(0),yplot(nbpy-1)], $
	   		/noerase, XSTYLE=1, YSTYLE=1, POS=position, /DEVICE
			xcpos = ind_rs(temp.xmax, str_inf2d.Xcen, str_inf2d.Ray)
	   		ycpos = ind_rs(temp.ymax, str_inf2d.Ycen, str_inf2d.Ray)
			XYOUTS, xcpos, ycpos, STRING(CEIL(pos), $
			FORMAT='(I3)'), CHARSIZE=1.5, /DATA
		ENDIF
	ENDFOR
	OPLOT_CIRCLE, 1.
END

PRO TRACE_IMGETVOL, img, vgaus, id_win1, id_win2, az

	SURFR, AZ=az
	WSET, id_win1
	SHADE_SURF, img, XSTYLE=4, YSTYLE=4, ZSTYLE=1, AZ=az, MIN_VALUE=0.0, $
	ZRANGE=[0, MAX(img)]
	CONTOUR, vgaus, NLEVELS=15, /T3D, /NOERASE, XSTYLE=4, YSTYLE=4, ZSTYLE=4, $
	MIN_VALUE=0.0, ZRANGE=[0, MAX(img)]
	WSET, id_win2
	SHADE_SURF, vgaus, XSTYLE=4, YSTYLE=4, ZSTYLE=1, AZ=az, MIN_VALUE=0.0, $
	ZRANGE=[0, MAX(img)]
END


PRO afficher, id, strpos, tabimg, win1, win2, orient
COMMON INFO2D, str_inf2d
COMMON VISU_2D,str_visu
COMMON LIMIT,str_lim
COMMON GAUScw_brwresult1, volgaus
COMMON FPOSIcw_brwresult1, FTIME1, FHITS, FPEW, FPNS, FFLUX, FAXEA, FAXEB, FANG, $
FPDEB, FPFIN, FNBHITS, LSTPOS

	;calcul du nb de pixels en x et y en fonction de la region selectionnee
	interpx= Fix(str_visu.dim /( str_lim.Xf-str_lim.Xd))
	interpy= Fix(str_visu.dim /( str_lim.Yf-str_lim.Yd))
	interp= interpx
	if interpx gt interpy then interp = interpy
	nbpx = (str_lim.Xf-str_lim.Xd+1)*interp
	nbpy = (str_lim.Yf-str_lim.Yd+1)*interp
	; calcul des coordonnees heliographiques
	Xd = ind_rs(0, str_inf2d.Xcen, str_inf2d.Ray)
	Xf = ind_rs(str_inf2d.Npx, str_inf2d.Xcen, str_inf2d.Ray)
	Yd = ind_rs(0, str_inf2d.Ycen, str_inf2d.Ray)
	Yf = ind_rs(str_inf2d.Npx, str_inf2d.Ycen, str_inf2d.Ray)
	ECH_RS, Xd, Xf, str_visu.dim, xplot
	ECH_RS, Yd, Yf, str_visu.dim, yplot

	; mise a jour des coordonnees du centre de la position et du flux
	idx=ind_rs(strpos.ewpos(id), str_inf2d.Xcen, str_inf2d.Ray)
	idy=ind_rs(strpos.nspos(id), str_inf2d.Ycen, str_inf2d.Ray)
	WIDGET_CONTROL, FPEW, SET_VALUE=idx
	WIDGET_CONTROL, FPNS, SET_VALUE=idy
	WIDGET_CONTROL, FFLUX, SET_VALUE=strpos.flux(id)

	; Informations sur le volume gaussien
	xa=COS(strpos.angle(id))/SQRT(strpos.majaxis(id))
	ya=SIN(ABS(strpos.angle(id)))/SQRT(strpos.majaxis(id))
	xa = ind_rs(xa, str_inf2d.Xcen, str_inf2d.Ray) - Xd
	ya = ind_rs(ya, str_inf2d.Ycen, str_inf2d.Ray) - Yd
	xb=COS(strpos.angle(id))/SQRT(strpos.minaxis(id))
	yb=SIN(ABS(strpos.angle(id)))/SQRT(strpos.minaxis(id))
	xb = ind_rs(xb, str_inf2d.Xcen, str_inf2d.Ray) - Xd
	yb = ind_rs(yb, str_inf2d.Ycen, str_inf2d.Ray) - Yd
	axea = SQRT(xa^2 + ya^2)
	axeb = SQRT(xb^2 + yb^2)
	WIDGET_CONTROL, FAXEA, SET_VALUE=axea
	WIDGET_CONTROL, FAXEB, SET_VALUE=axeb
	
	theta = strpos.angle(id)*!RADEG
	;IF theta LT 0 THEN theta = theta+90 ELSE theta = theta-90
	WIDGET_CONTROL, FANG, SET_VALUE=theta
		
	; selection de l'image pour l'heure donnee
	tabaff=tabimg(str_lim.Xd:str_lim.Xf, str_lim.Yd:str_lim.Yf)
	tabaff = REBIN(tabaff, nbpx, nbpy)

	; affichage de l'image+contour et 3d du volume gaussien
	volgaus = FLTARR(str_inf2d.Npx,str_inf2d.Npy)
	gauss = {GAUSS}
	gauss.max = strpos.intensity(id)
	gauss.xmax = strpos.ewpos(id)
	gauss.ymax = strpos.nspos(id)
	gauss.gra = strpos.majaxis(id)
	gauss.grb = strpos.minaxis(id)
	gauss.tet = strpos.angle(id)
	calc_volgauss, gauss, str_inf2d.Npx, str_inf2d.Npy, volgaus
	volgaus = REBIN(volgaus(str_lim.Xd:str_lim.Xf, str_lim.Yd:str_lim.Yf), nbpx, nbpy)
	WIDGET_CONTROL, /HOURGLASS
	trace_imgetvol, tabaff, volgaus, win1, win2, orient	
END


PRO CW_BRWRESULT1_Event, Event
COMMON GAUScw_brwresult1, volgaus
COMMON IMGcw_brwresult1, bufimg
COMMON DATAcw_brwresult1, str_pos, fileposi, id_himg, id_source
COMMON DRAWcw_brwresult1, WDRAW1_Id, WDRAW2_Id, WDRAW3_Id, az
COMMON FIMGcw_brwresult1, FTIME2, FIMAGE
COMMON FPOSIcw_brwresult1, FTIME1, FHITS, FPEW, FPNS, FFLUX, FAXEA, FAXEB, FANG, $
FPDEB, FPFIN, FNBHITS, LSTPOS
COMMON FICRH,str_fic
COMMON INFO2D, str_inf2d

	flag = 0
	;helpfile='/disque1/user/dirhelio/nrhsw/nrhidl/sswnrh/radio/nrh/2dnrh/position/browse_hlp.txt'

  WIDGET_CONTROL,Event.Id,GET_UVALUE=Ev

  CASE Ev OF 

  ; evenements de la fenetre position
  'BNEXT1': BEGIN
      	nbhits = (SIZE(str_pos.time))(1)
	IF id_source NE nbhits-1 THEN BEGIN
		id_source = id_source+1
		flag=1
	ENDIF
      END
  
  'BPREV1': BEGIN
      IF id_source NE 0 THEN BEGIN
		id_source = id_source-1
		flag=1
	ENDIF
      END
  'FTIME1': BEGIN
	goodval = WHERE ( str_pos.time EQ HMS(Event.Value), count )
	IF count GT 0 THEN BEGIN
		id_source = goodval(0)
		flag=1
	ENDIF ELSE rep = DIALOG_MESSAGE('Not a valid time', /ERROR)
      END
  'LSTPOS': BEGIN
	numposi = Event.Index
	read_nrhpos, fileposi, numposi+1, str_pos, hext
	nbhits = FXPAR(hext, 'NAXIS1')/(FXPAR(hext, 'TFIELDS')*4)
	id_source = 0
	WIDGET_CONTROL, FPDEB, SET_VALUE=MSH(str_pos.time(0))
	WIDGET_CONTROL, FPFIN, SET_VALUE=MSH(str_pos.time(nbhits-1))
	WIDGET_CONTROL, FNBHITS, SET_VALUE=nbhits
	flag=1
      END
  'FHITS': BEGIN
	index = Event.Value
	nbhits = (SIZE(str_pos.time))(1)
	IF (index GE 1) AND (index LE nbhits) THEN BEGIN
		id_source = index-1
		flag=1
	ENDIF
      END
  'BUTM15': BEGIN		; bouton -15
	IF az EQ 0 THEN az=360
	az=az-15
	WIDGET_CONTROL, /HOURGLASS
	trace_imgetvol, bufimg, volgaus, WDRAW1_Id, WDRAW2_Id, az	
	END
  'BUTP15': BEGIN		; bouton +15
	az=az+15
	IF az EQ 360 THEN az=0
	WIDGET_CONTROL, /HOURGLASS
	trace_imgetvol, bufimg, volgaus, WDRAW1_Id, WDRAW2_Id, az
	END
  'BUTMAX': BEGIN		; bouton max
	valmax = MAX(str_pos.flux, id_source)
	flag=1
	END

  ; evenements de la fenetre image
  'BNEXT2': BEGIN
	IF id_himg NE str_inf2d.Nim-1 THEN BEGIN
		id_himg = id_himg+1
		flag=2
	ENDIF
      END
  'BPREV2': BEGIN
	IF id_himg NE 0 THEN BEGIN
		id_himg = id_himg-1
		flag=2
	ENDIF
      END
  'FIMAGE': BEGIN
	index = Event.Value
	IF (index GE 1) AND (index LE (str_inf2d.Nim-1)) THEN BEGIN
		id_himg = index-1
		flag=2
	ENDIF ELSE WIDGET_CONTROL, FIMAGE, SET_VALUE=id_himg+1
      END
  'FTIME2': BEGIN
	id = TIME_IND_NRH(str_fic.file, Event.Value)
	IF id GE 0 THEN BEGIN
		id_himg = id
		flag=2
	ENDIF ELSE rep = DIALOG_MESSAGE('Not a valid time', /ERROR)
      END

  'BHELP': BEGIN
	CW_BRW_HLP
      END
  'BRETU': BEGIN
      WIDGET_CONTROL, Event.Top, /DESTROY
      END
  
  ENDCASE

	IF flag EQ 1 THEN BEGIN
		temp = MSH(str_pos.time(id_source))
		WIDGET_CONTROL, FHITS, SET_VALUE=id_source+1	
		WIDGET_CONTROL, FTIME1, SET_VALUE=temp
		READ_NRHIM, str_fic.file, temp, str_inf2d, image, str_im
		bufimg = image
		afficher, id_source, str_pos, image, WDRAW1_Id, WDRAW2_Id, az
	ENDIF
	IF flag EQ 2 THEN BEGIN
		READ_NRHIM, str_fic.file, '00:00:00', str_inf2d, image, str_im, INDIC=id_himg
		WIDGET_CONTROL, FIMAGE, SET_VALUE=id_himg+1	
		WIDGET_CONTROL, FTIME2, SET_VALUE=str_im.time
		superpose_img_volgaus, image, HMS(str_im.time), fileposi, WDRAW3_Id
	ENDIF

END


PRO cw_brwresult1, fichposi, GROUP=Group
COMMON INFO2D, str_inf2d
COMMON FICRH,str_fic
COMMON DATAcw_brwresult1, str_pos, fileposi, id_himg, id_source
COMMON DRAWcw_brwresult1, WDRAW1_Id, WDRAW2_Id, WDRAW3_Id, az
COMMON FIMGcw_brwresult1, FTIME2, FIMAGE
COMMON FPOSIcw_brwresult1, FTIME1, FHITS, FPEW, FPNS, FFLUX, FAXEA, FAXEB, FANG, $
FPDEB, FPFIN, FNBHITS, LSTPOS
COMMON IMGcw_brwresult1, bufimg

	fileposi = fichposi
	hprim = HEADFITS(fileposi)
	nbposi = FXPAR(hprim, 'N_EXTEND')

  IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0

  MAIN13 = WIDGET_BASE(GROUP_LEADER=Group, $
      COLUMN=1, $
      MAP=1, $
      TITLE='BROWSE', $
      UVALUE='MAIN13')

  BASE2 = WIDGET_BASE(MAIN13, $
      ROW=1, $
      MAP=1, $
      TITLE='MENU', $
      UVALUE='BASE2')

  BASEPOS = WIDGET_BASE(BASE2, $
      COLUMN=1, $
      FRAME=2, $
      MAP=1, $
      UVALUE='BASEPOS')

  BMENU1 = WIDGET_BASE(BASEPOS, $
      ROW=1, $
      FRAME=1, $
      MAP=1, $
      UVALUE='BMENU1')

  BUTNEXT1 = WIDGET_BUTTON( BMENU1, UVALUE='BNEXT1', VALUE='Next')
  BUTPREV1 = WIDGET_BUTTON( BMENU1, UVALUE='BPREV1', VALUE='Previous')
  FTIME1 = CW_FIELD( BMENU1, VALUE='00:00:00', $
      ROW=1, $
      STRING=1, $
      RETURN_EVENTS=1, $
      TITLE='Time:', $
      UVALUE='FTIME1', $
      XSIZE=12)
  BUTP15 = WIDGET_BUTTON( BMENU1, UVALUE='BUTP15', VALUE='+15°')
  BUTM15 = WIDGET_BUTTON( BMENU1, UVALUE='BUTM15', VALUE='-15°')
  BUTMAX = WIDGET_BUTTON( BMENU1, UVALUE='BUTMAX', VALUE='MAX')

  BINFPOS = WIDGET_BASE(BASEPOS, $
      COLUMN=1, $
      MAP=1, $
      UVALUE='BINFPOS')

  BINFP1 = WIDGET_BASE(BINFPOS, $
      ROW=1, $
      MAP=1, $
      UVALUE='BBINFP1')

  BINFP2 = WIDGET_BASE(BINFPOS, $
      ROW=2, $
      MAP=1, $
      TITLE='INFPOSI', $
      UVALUE='BASE12')
    
  LSTPOS = WIDGET_DROPLIST( BINFP1, VALUE=SINDGEN(nbposi), UVALUE='LSTPOS', $
      TITLE='Position n°:')

  FPDEB = CW_FIELD( BINFP1,VALUE='00:00:00', $
      ROW=1, $
      STRING=1, $
      TITLE='From:', $
      UVALUE='FPDEB', $
      XSIZE=12)

  FPFIN = CW_FIELD( BINFP1,VALUE='00:00:00', $
      ROW=1, $
      STRING=1, $
      TITLE='To:', $
      UVALUE='FPFIN', $
      XSIZE=12)

  FHITS = CW_FIELD( BINFP2,VALUE=0, $
      ROW=1, $
      INTEGER=1, $
      RETURN_EVENTS=1, $
      TITLE='Hits:', $
      UVALUE='FHITS', $
      XSIZE=3)

  FNBHITS = CW_FIELD( BINFP2,VALUE=0, $
      ROW=1, $
      INTEGER=1, $
      TITLE='on', $
      UVALUE='FNBHITS', $
      XSIZE=3)

  FFLUX = CW_FIELD( BINFP2,VALUE=0.0, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Flux:', $
      UVALUE='FFLUX', $
      XSIZE=5)

  FPEW = CW_FIELD( BINFP2,VALUE=0.0, $
      ROW=1, $
      FLOAT=1, $
      TITLE='EW:', $
      UVALUE='FPEW', $
      XSIZE=5)

  FPNS = CW_FIELD( BINFP2,VALUE=0.0, $
      ROW=1, $
      FLOAT=1, $
      TITLE='NS:', $
      UVALUE='FPNS', $
      XSIZE=5)

  FAXEA = CW_FIELD( BINFP2,VALUE=0.0, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Major axis:', $
      UVALUE='FAXEA', $
      XSIZE=5)

  FAXEB = CW_FIELD( BINFP2,VALUE=0.0, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Minor axis:', $
      UVALUE='FAXEB', $
      XSIZE=5)

  FANG = CW_FIELD( BINFP2,VALUE=0.0, $
      ROW=1, $
      FLOAT=1, $
      TITLE='Angle:', $
      UVALUE='FANG', $
      XSIZE=5)

  BDRAWP = WIDGET_BASE(BASEPOS, $
      ROW=1, $
      MAP=1, $
      UVALUE='BDRAWP')

  WDRAW1 = WIDGET_DRAW( BDRAWP, $
      RETAIN=2, $
      UVALUE='WDRAW1', $
      XSIZE=256, $
      YSIZE=256)

  WDRAW2 = WIDGET_DRAW( BDRAWP, $
      RETAIN=2, $
      UVALUE='WDRAW2', $
      XSIZE=256, $
      YSIZE=256)

  ; Partie image
  BASEIMG = WIDGET_BASE(BASE2, $
      COLUMN=1, $
      FRAME=2, $
      MAP=1, $
      UVALUE='BIMG')

  BMENU2 = WIDGET_BASE(BASEIMG, $
      ROW=1, $
      FRAME=1, $
      MAP=1, $
      UVALUE='BMENU2')

  BUTNEXT2 = WIDGET_BUTTON( BMENU2, UVALUE='BNEXT2', VALUE='Next')
  BUTPREV2 = WIDGET_BUTTON( BMENU2, UVALUE='BPREV2', VALUE='Previous')
  FTIME2 = CW_FIELD( BMENU2, VALUE='00:00:00', $
      ROW=1, $
      STRING=1, $
      RETURN_EVENTS=1, $
      TITLE='Time:', $
      UVALUE='FTIME2', $
      XSIZE=12)

  BINFIMG = WIDGET_BASE(BASEIMG, $
      ROW=2, $
      MAP=1, $
      UVALUE='BINFIMG')

  FIMAGE = CW_FIELD( BINFIMG ,VALUE=0, $
      ROW=1, $
      INTEGER=1, $
      RETURN_EVENTS=1, $
      TITLE='Image:', $
      UVALUE='FIMAGE', $
      XSIZE=3)

  FNBIMG = CW_FIELD( BINFIMG ,VALUE=0, $
      ROW=1, $
      INTEGER=1, $
      TITLE='on', $
      UVALUE='FNBIMG', $
      XSIZE=3)

  FIDEB = CW_FIELD( BINFIMG ,VALUE='00:00:00', $
      ROW=1, $
      STRING=1, $
      TITLE='From:', $
      UVALUE='FIDEB', $
      XSIZE=12)

  FIFIN = CW_FIELD( BINFIMG ,VALUE='00:00:00', $
      ROW=1, $
      STRING=1, $
      TITLE='To:', $
      UVALUE='FIFIN', $
      XSIZE=12)

  WDRAW3 = WIDGET_DRAW( BASEIMG, $
      RETAIN=2, $
      UVALUE='WDRAW3', $
      XSIZE=256, $
      YSIZE=256)

  BUTHELP = WIDGET_BUTTON( MAIN13, UVALUE='BHELP', VALUE='Help')
  BUTRETU = WIDGET_BUTTON( MAIN13, UVALUE='BRETU', VALUE='Return')

  WIDGET_CONTROL, MAIN13, /REALIZE

  ; Get drawable window index
  WIDGET_CONTROL, WDRAW1, GET_VALUE=WDRAW1_Id
  WIDGET_CONTROL, WDRAW2, GET_VALUE=WDRAW2_Id
  WIDGET_CONTROL, WDRAW3, GET_VALUE=WDRAW3_Id

	az = 30	
	numposi = 0
	; lit la position dans le fichier
	read_nrhpos, fileposi, numposi+1, str_pos, hext
	nbhits = FXPAR(hext, 'NAXIS1')/(FXPAR(hext, 'TFIELDS')*4)
	id_source = 0	
	
	; fait a chaque nouvelle position
	WIDGET_CONTROL, FPDEB, SET_VALUE=MSH(str_pos.time(0))
	WIDGET_CONTROL, FPFIN, SET_VALUE=MSH(str_pos.time(nbhits-1))
	WIDGET_CONTROL, FNBHITS, SET_VALUE=nbhits
	
	; heures de debut et de fin du fichier images
	WIDGET_CONTROL, FIDEB, SET_VALUE=str_inf2d.Hd
	WIDGET_CONTROL, FIFIN, SET_VALUE=str_inf2d.Hf
	WIDGET_CONTROL, FNBIMG, SET_VALUE=str_inf2d.Nim

	WIDGET_CONTROL, /HOURGLASS
	; mise a jour 3D (position) apres un changement d'heure
	temp = MSH(str_pos.time(id_source))
	WIDGET_CONTROL, FHITS, SET_VALUE=id_source+1	
	WIDGET_CONTROL, FTIME1, SET_VALUE=temp
	READ_NRHIM, str_fic.file, temp, str_inf2d, image, str_im
	bufimg = image
	afficher, id_source, str_pos, image, WDRAW1_Id, WDRAW2_Id, az

	; mise a jour 2D (image) apres un changement d'heure
	id_himg = 0
	READ_NRHIM, str_fic.file, '00:00:00', str_inf2d, image, str_im, INDIC=id_himg
	WIDGET_CONTROL, FIMAGE, SET_VALUE=id_himg+1	
	WIDGET_CONTROL, FTIME2, SET_VALUE=str_im.time
	superpose_img_volgaus, image, HMS(str_im.time), fileposi, WDRAW3_Id

  XMANAGER, 'cw_brwresult1', MAIN13
END
