
;+ ***********************************************************************
; NAME:
;	FLUX_NRH2
;
; PURPOSE:
;	Procedure de calcul et de traitement du FLUX des images contenues 
; dans un fichier NRH2
;
; CATEGORY:
;	WIDGET
;
; CALLING SEQUENCE:
; 	FLUX_NRH2, GROUP=group
;
; INPUTS:
;	Parm1:	Describe the positional input parameters here. Note again
;		that positional parameters are shown with Initial Caps.
;
; KEYWORD PARAMETERS:
;	GROUP	Identification du widget appelant
;
; OUTPUTS:
;	Describe any outputs here
;
; COMMON BLOCKS:
;	FICRH	Contenant la structure STR_FIC (voir RH_2D)
;
;	LIMIT	Contenant la structure STR_LIM (voir RH_@D)
;
;	INFO2D	Contenant la structure STR_INF2D (voir RH_2D)
;
; PROCEDURE:
;	Cette procedure calcule et trace le flux sur des images 2D contenues
; dans le fichier designe par STR_FIC.FILE.
;	Elle permet de choisir une heure de debut et de fin ainsi qu'une
; region
;
; EXAMPLE:
;
; MODIFICATION HISTORY:
;	Ecrit par: J Bonmartin le 12/01/98 (bonmartin@obspm.fr)
;		23/10/98 ajouter le controle et ouverture de fichier dans
;			la selection de region ( JB)
;		08/03/99 Corrige erreur dans OPLOT, suprime l'ouverture
;			de fenetre a l'ouverture
;		10/03/99 remis le calcul sur STOKESV (JB)
;			return_event->all_events
;		29/03/99 NRH_FOPEN enleve dans REGSEL
;		20/04/99 Suprime le controle du type de fichiers
;		26/10/00 Controle du Background et de la couleur (JB)
;		19/01/01 Modification d'ouverture de fichiers (JB)
;-*******************************************************************

PRO FLUX_NRH2_EVENT, event

COMMON FICRH,str_fic
COMMON LIMIT, str_lim
COMMON INFO2D, str_inf2d
COMMON ID_FLUX_NRH2, Str_fnrh2, Str_trac, Str_influx, Red, Green, Blue
COMMON DATA_FLUX, Flux,time,Header

WIDGET_CONTROL,event.id, Get_uvalue = ev

CASE ev OF
      	'Tdeb': BEGIN
		Str_lim.hd = event.Value
		Str_trac = Str_lim
	End
        'Tfin': BEGIN
		Str_lim.hf = event.Value
		Str_trac = Str_lim
	END
	'Indic': Str_fnrh2.indic = event.value
	'Stokes': Str_fnrh2.Stokes = event.index
	'Rstime': BEGIN
		str_lim.hd =Str_inf2d.hd
		str_lim.hf =Str_inf2d.hf
		Str_trac = Str_lim
		WIDGET_CONTROL, Str_fnrh2.Deb,SET_VALUE = str_lim.hd
		WIDGET_CONTROL, Str_fnrh2.Fin, SET_VALUE= str_lim.hf
		END

	'YRGA':	 Str_fnrh2.yrange = event.value
	'YRGC':  Str_fnrh2.yrange = event.value
	'BCK':	 Str_fnrh2.bck = event.value
	'CLR':	 Str_fnrh2.clr = event.value

	'SCALE':Str_fnrh2.ech = event.value

	'Zoom': Begin
		r = WIDGET_MESSAGE('Select two points')
		X1=long(0) & x2= long(0)
		Cursor, x1, y1,/down
		Cursor, x2,y2,/down
		IF X1 gt X2 Then BEGIN
			X= X1 & X1 = X2 & X2 = X & END
		str_trac.hd=msh(long(x1)) &str_trac.hf= msh(long(x2))
		WIDGET_CONTROL, Str_fnrh2.Deb,SET_VALUE = str_trac.hd
		WIDGET_CONTROL, Str_fnrh2.Fin, SET_VALUE= str_trac.hf
		End 
	'File': Begin
		Str_fic.File=DIALOG_PICKFILE( PATH= str_fic.rep, $
			FILTER= str_fic.filtre,/Read, /Noconfirm)

		IF Str_fic.file EQ '' THEN Return
		NRH_FOPEN, Str_fic.File, Str_inf2d, Str_lim, $
						Physpar, Lfreq
		if Str_fnrh2.info NE 0 THEN WIDGET_CONTROL,$
					 Str_fnrh2.info,/DESTROY
			Str_fnrh2.info= Cw_infonrh(event.top, Str_inf2d)

		Str_fnrh2.Stokes = 0

		WIDGET_CONTROL, Str_fnrh2.Deb,SET_VALUE = str_lim.hd
		WIDGET_CONTROL, Str_fnrh2.Stk,SET_VALUE = Physpar
		WIDGET_CONTROL, Str_fnrh2.Fin, SET_VALUE= str_lim.hf
		END

       'Regsel': BEGIN
		IF Str_fic.file EQ '' THEN BEGIN
			R = WIDGET_MESSAGE('First open an IMAGE File')
		RETURN & END

		READ_NRHIM, Str_fic.file, Str_trac.Hd,Str_inf2d,  $
				DATA, Str_im, $
				STOKES = Str_fnrh2.stokes
		cw_selfield,Data, str_im, str_lim, Size=300, GROUP=event.top
		END

	'Compt': BEGIN
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select an IMAGE File')
			RETURN
		END
;		Controle = CALL_FUNCTION('CTRL_NRHFILE', $
;						Str_fic.file, CONTENT='h')
;		IF Controle EQ 0 THEN BEGIN
;			r=WIDGET_MESSAGE('Not an IMAGE file')
;			RETURN
;		END

		WIDGET_CONTROL, /HOURGLASS
		CPT_FLUX_NRH2, Str_fic.file, Str_inf2d, Str_lim, $
					Flux, Time, STOKES= Str_fnrh2.Stokes
		Str_influx = Str_inf2d
		Str_influx.Physpar = Str_fnrh2.Stokes
		Str_trac = Str_lim
		End

	'Write': BEGIN
		IF Str_fic.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First select an IMAGE File')
			RETURN
		END

		WIDGET_CONTROL, /HOURGLASS

		CPT_FLUX_NRH2, Str_fic.file, Str_inf2d, Str_lim, $
				Flux, Time, STOKES= Str_fnrh2.Stokes
		Str_influx = Str_inf2d
		Str_influx.Physpar = Str_fnrh2.Stokes
		Str_trac = Str_lim

;				Ecriture du fichier
		Numero=STRCOMPRESS(STRING(str_fnrh2.indic),/REMOVE_all) 
		File= CALL_FUNCTION('MOD_NRHFILE',$
				Str_fic.file,CONTENT='f', Heure=Str_lim.hd, $
			DIRECTORY= 'Current', $
			DIVERS= Numero)
		H0 = HEADFITS(Str_fic.file)
		CREATE_NRH_CFILE, File, H0, '2DF'

		Para = 'STOKESI' & IF Str_fnrh2.Stokes EQ 1 THEN $
							Para = 'STOKESV'
		HEADER = HEADFITS(Str_fic.file, EXTEN=1)
		WRITE_FLUXNRH,File, Header, Flux, Time, Str_lim, $
			ARRAY='2D', STK_PARA = Para
		WIDGET_CONTROL, str_fnrh2.wind, SET_VALUE=Str_fnrh2.indic
		End

	'Open': BEGIN
		Str_fnrh2.File = DIALOG_PICKFILE(FILTER= '*.fts')
		IF Str_fnrh2.File EQ '' THEN Return
		Controle = CALL_FUNCTION('CTRL_NRHFILE', $
						Str_fnrh2.file, CONTENT='f')
		IF Controle EQ 0 THEN BEGIN
			r=WIDGET_MESSAGE('Not a FLUX file',$
					DIALOG_Parent = Event.top)
			RETURN
			END
		OPEN_NRH_CFILE, Str_fnrh2.File, Str_Influx, Str_trac
		WIDGET_CONTROL, Str_Fnrh2.Deb,SET_VALUE = str_trac.hd
		WIDGET_CONTROL, Str_Fnrh2.Fin, SET_VALUE= str_trac.hf
		END

	'Read': BEGIN
		IF Str_fnrh2.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First Open a FLUX file',$
					DIALOG_Parent = Event.top)
			RETURN
		END

		EXTD = CW_XTD_NRHF(Str_fnrh2.File,GROUP=Event.top)
			IF EXTD LE 0 THEN BEGIN
				R=Widget_message('Incorrect FILE',$
					DIALOG_Parent = Event.top)
			RETURN & END
		INIT_NRH_CFILE, Str_fnrh2.File, Extd, Str_influx, Str_trac

		Im= MRDFITS( Str_fnrh2.file,extd,Header, /SILENT)
		Flux = Im.flux
		Time = Im.time
		End

	'Ascii': BEGIN
		IF Str_fnrh2.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First Open a FLUX file',$
					DIALOG_Parent = Event.top)
			RETURN
		END
		Fascii= Str_Fnrh2.file
		STRPUT, Fascii, 'asc', STRLEN(Fascii)-3
		NRH_FLUXASCI, Str_Fnrh2.file, Fascii, GROUP=Event.top
			R=Widget_Message('Flux file'+Fascii,$
					DIALOG_Parent = Event.top) 
		End		

        'PLOT' : BEGIN

		IF (SIZE(Flux))(1) le 1 THEN BEGIN
			Ret = WIDGET_MESSAGE('First compute or read a FLUX')
			Return
			END
		XLAB = Str_inf2d.Date
		Freq = STRING( Str_influx.Freq,FORMAT='(F5.1)')+'MHz'
		Xd = IND_RS(str_trac.xd,Str_influx.Xcen,Str_influx.Ray)
		Xf = IND_RS(str_trac.xf,Str_influx.Xcen,Str_influx.Ray)
		Yd = IND_RS(str_trac.yd,Str_influx.Ycen,Str_influx.Ray)
		Yf = IND_RS(str_trac.yf,Str_influx.Ycen,Str_influx.Ray)

		Slab=' I,' & IF Str_influx.Physpar EQ 1 THEN $
						Slab = ' V,'
		Clab= Slab + Freq+',X='+ $
			strcompress(string(Xd,format='(f12.2)'))+ ','+$
			strcompress(string(Xf,format='(f12.2)'))+ $
			',Y='+strcompress(string(Yd,format='(f12.2)')) +$
			','+strcompress(string(Yf,format='(f12.2)'))
		Ylab= 'Flux ( SFU )'

		Str_fnrh2.styl = 0
		TR_TIME_NRH, Flux, Time,HR_BEG=str_trac.hd, $ 
			HR_END=str_trac.hf, CLAB= clab, $
			YRANGE = Str_fnrh2.Yrange, PSYM=10, $
			XLAB = Xlab, YLAB = ylab, Ylog= Str_fnrh2.ech, $
			BACKGROUND= Str_fnrh2.bck, COLOR= Str_fnrh2.clr
		END

	'OPLOT': BEGIN
		Str_fnrh2.styl = str_fnrh2.styl +1
		Freq = STRING( Str_influx.Freq,FORMAT='(F5.1)')+'MHz'
		Xd = IND_RS(str_trac.xd,Str_influx.Xcen,Str_influx.Ray)
		Xf = IND_RS(str_trac.xf,Str_influx.Xcen,Str_influx.Ray)
		Yd = IND_RS(str_trac.yd,Str_influx.Ycen,Str_influx.Ray)
		Yf = IND_RS(str_trac.yf,Str_influx.Ycen,Str_influx.Ray)

		Slab=' I,' & IF Str_influx.Physpar EQ 1 THEN $
						Slab = ' V,'
		Clab= Slab+Freq+',X='+ $
			strcompress(string(Xd,format='(f12.2)'))+ ','+$
			strcompress(string(Xf,format='(f12.2)'))+ $
			',Y='+strcompress(string(Yd,format='(f12.2)')) +$
			','+strcompress(string(Yf,format='(f12.2)'))
 
		TR_TIME_NRH, Flux, Time, HR_BEG=str_trac.hd, PSYM=10, $
			HR_END= str_trac.Hf,  Ylog= Str_fnrh2.ech, $
			LINESTYLE= str_fnrh2.styl,CLAB=clab, /Oplot, $
			BACKGROUND=Str_fnrh2.bck, COLOR= Str_Fnrh2.Clr
		END

        'Exit': BEGIN
		TVLCT, Red, Green, Blue
		IF !d.name EQ 'PS' THEN BEGIN
			Device,/Close
			!P.multi[0] = 0
			r=WIDGET_MESSAGE('Last plots on flux.ps')
			Set_plot,GETENV('NRH_DEV')
			END
		WIDGET_CONTROL,event.top,/DESTROY
		END
ENDCASE

END

PRO FLUX_NRH2, GROUP=group

COMMON FICRH,str_fic
COMMON LIMIT, str_lim
COMMON INFO2D, str_inf2d
COMMON ID_FLUX_NRH2, Str_fnrh2, Str_trac, Str_influx, Red, Green, Blue
COMMON DATA_FLUX, Flux,time, Header

	Str_fnrh2 = {str_fnrh2, Info:0l, Prt:0, Ech:0,Styl:0, $
		Deb:0L, Fin:0L, Wind:0l, Indic:0, Stk:0l, Stokes:0, $
		File:'', Yrange: [0.,0.],Bck:0, Clr:0}

STR_TRAC = Str_lim
STR_INFLUX = Str_inf2d

	PHYSPAR = ['',''] & LFREQ = ''
	IF str_fic.file EQ ' ' OR strlen(str_fic.file) EQ '' THEN $
		NRH_PICKFILE, Str_fic, Str_inf2d, Str_lim, Physpar, Lfreq $
	ELSE $;IF Str_inf2d.Physpar NE 0 THEN $
		NRH_FOPEN, Str_fic.File, Str_inf2d, Str_lim, Physpar, Lfreq 
 
		Str_Fnrh2.stokes = 0

If N_ELEMENTS(Group) EQ 0 THEN GROUP = 0

TVLCT, R, G, B, /GET
	Red=R & Green=G & Blue=B

ISCROLL = 0
DEVICE, GET_SCREEN_SIZE = SCR_SIZE
RETBASE:			;Retour pour  Ascenseur
IF ISCROLL THEN $
    base = WIDGET_BASE (TITLE = title,/COLUMN,$
       /SCROLL,X_SCROLL_SIZE = Xss,Y_SCROLL_SIZE = Yss ) $
ELSE $
Base = WIDGET_BASE(Group_leader= Group, TITLE=' NRH FLUX', Column=1)

Base2= WIDGET_BASE(Base,/column, /frame, /align_center)
       l=WIDGET_LABEL(Base2, value='Select TIME for PLOT',/align_center)
       Str_fnrh2.Deb=cw_field(base2, value=str_lim.hd, Uvalue='Tdeb',/string, $
			 TITLE= 'BEGIN Time:',/ALL_events,Xsize=20)
       Str_fnrh2.Fin=cw_field(base2, value=str_lim.hf, Uvalue='Tfin',/string, $
			 TITLE= 'END Time:  ',/ALL_events,Xsize=20)
       b=WIDGET_BUTTON(Base2,Value='Select REGION', Uvalue='Regsel')
       b=WIDGET_BUTTON(Base2,Value='Reset TIME', Uvalue='Rstime')
       b=WIDGET_BUTTON(Base2,Value='Zoom', Uvalue='Zoom')
       b=WIDGET_BUTTON(Base2,Value='Select IMAGE File', Uvalue='File')

Base3= WIDGET_BASE(Base,/Column, /frame, /align_center)
       l=WIDGET_LABEL(Base3, value='PLOT Control',/align_center)
       b= CW_PLOTSERIE(base3,PSNAME='flux.ps', PNGNAME='flux.png', $
		/COLOR, /BACKGROUND)

Base4= WIDGET_BASE(Base,/row, /align_center)
       Str_fnrh2.Wind=cw_field(base4, value=str_fnrh2.indic, Uvalue='Indic',$
		/Integer, TITLE= 'FLUX File,indic:  ',/ALL_events,Xsize=5)

	Str_fnrh2.Stk= WIDGET_DROPLIST(Base4, Value= Physpar, Uvalue='Stokes')

       b=WIDGET_BUTTON(Base,Value='Compute FLUX', Uvalue='Compt')
       b=WIDGET_BUTTON(Base,Value='Compute & Write', Uvalue='Write')
       b=WIDGET_BUTTON(Base,Value='Open FLUX file', Uvalue='Open')
       b=WIDGET_BUTTON(Base,Value='Read FLUX ', Uvalue='Read')
       b=WIDGET_BUTTON(Base,Value='WRITE FLUX file in ASCII ', Uvalue='Ascii')
       b=WIDGET_BUTTON(Base,Value='Return', Uvalue='Exit')

	Str_fnrh2.info= Cw_infonrh(Base, Str_inf2d)

widget_control,base,/Realize,TLB_GET_SIZE = Wid_size
	IF (Wid_size(0) GT 0.9*Scr_size(0) OR Wid_size(1) GT  0.9*Scr_size(1) $
			AND NOT Iscroll ) THEN BEGIN
		WIDGET_CONTROL, Base, /DESTROY
		Iscroll = 1
		XSS = Scr_size(0) * 0.5
		YSS = Scr_size(1) * 0.8
				GOTO, RETBASE
	ENDIF

Xmanager,'FLUX_NRH2',Base, /NO_BLOCK

END
       
       
