
;+ ***********************************************************************
; NAME:
;	CENTER_NRH2
;
; PURPOSE:
;	Procedure de calcul et de traitement des CENTRES ACTIFS  des
;	images contenues dans un fichier NRH2
;
; CATEGORY:
;	WIDGET
;
; CALLING SEQUENCE:
; 	CENTER_NRH2, [File],GROUP=group
;
; INPUTS:
;	Parm1:	Describe the positional input parameters here. Note again
;		that positional parameters are shown with Initial Caps.
;
; OPTIONAL INPUT
;	FILE	nom du fichier de position
;		si la chaine file n'est pas vide le fichier correspondant 
;		sera ouvert
;
; KEYWORD PARAMETERS:
;	GROUP	Identification du widget appelant
;
; OUTPUTS:
;	Describe any outputs here
;
; COMMON BLOCKS:
;
;	LIMIT	Contenant la structure STR_LIM (NRH_STR_LIM)
;

; PROCEDURE:
;	Cette procedure contient les widgets disponibles pour le trace des
;	resultats d'uncalcul de CENTRES ACTIFS
;
; EXAMPLE:
;
; MODIFICATION HISTORY:
;	Ecrit par: J Bonmartin (bonmartin@obspm.fr) le 12/10/98
;	23/10/98 modification d'appellation CENTER->SOURCE (JB)
;		Definition de SZ pour le trace des positions EW et NS
;	10/03/99 modifie la commande zoom, remplace return-event 
;		par all_events (JB)
;	29/03/99 introduit le style de trace (JB)
;	20/04/99 Supprime le controle de fichiers
;	10/05/99 Echelle curseurs pour les positions. Supprime YRANGE,
;		YLAB pour OPLOT (JB)
;	26/10/00 traces en couleur (JB)
;	12/03/01 Suppression de FLUX dans le cas d'Hessi (JB)
;       30/12/03 creation fichier ascii des positions des centres (AB)
;       28/03/05 modif adaptation des bornes du trace de positions au
;       cas des images de plus de 4 rayons solaires
;-*******************************************************************

PRO CENTER_NRH2_EVENT, event

COMMON LIMIT, str_lim
COMMON CENTER_NRH2, Str_cnrh2, Str_trac, Str_cfile, Str_file, Extd, Centre, $
	Red, Green, Blue


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

	'Rstime': BEGIN
		str_lim.hd =Str_cfile.hd
		str_lim.hf =Str_cfile.hf
		Str_trac = Str_lim
		WIDGET_CONTROL, Str_cnrh2.Deb,SET_VALUE = str_lim.hd
		WIDGET_CONTROL, Str_cnrh2.Fin, SET_VALUE= str_lim.hf
		END

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

	'SCALE':Str_cnrh2.ech = event.value

	'Repert': Str_file.rep =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_cnrh2.Deb,SET_VALUE = str_trac.hd
		WIDGET_CONTROL, Str_cnrh2.Fin, SET_VALUE= str_trac.hf
		IF Y1 GT Y2 THEN BEGIN
			Y=Y1 & Y1=Y2 & Y2=Y & END
		Str_cnrh2.Yrange[0] = Y1 & Str_cnrh2.Yrange[1]= Y2
		End 

	'Cparam': Str_cnrh2.Cparam = event.index

	'Style': BEGIN
		Style = event.index
		IF Style EQ 0 Then Str_cnrh2.Psym=10
		IF Style EQ 1 Then Str_cnrh2.Psym=0
		IF Style EQ 2 Then Str_cnrh2.Psym=2
		IF Style EQ 3 Then Str_cnrh2.Psym=1
		END

	'Stime':BEGIN
		R=WIDGET_MESSAGE('Select one point inside PLOT Window')
		CURSOR, X1,Y1,/down
		WIDGET_CONTROL, Str_cnrh2.bst, SET_VALUE= msh(x1)
		END

	'Open': BEGIN

		Str_file.File = DIALOG_PICKFILE(FILTER= '*'+'s'+'*.fts',$
				PATH = Str_file.rep)
		IF Str_file.File EQ '' THEN Return
		Controle = CALL_FUNCTION('CTRL_NRHFILE', $
						Str_File.file, CONTENT='s')
		IF Controle EQ 0 THEN BEGIN
			r=WIDGET_MESSAGE('Not a SOURCE file')
			RETURN
			END
		OPEN_NRH_CFILE, Str_file.File, Str_cfile, Str_trac
			HD = HEADFITS (Str_file.file)
			FILIN = FXPAR(Hd, 'FILEIMG')
			FL = STR_SEP(Filin, '/')
			SZ = SIZE(Fl)
			INSTRUME = FXPAR(Hd,'INSTRUME')
		IF STRMID(INSTRUME,0,4) EQ 'HSSI' THEN $
			LIST=['E-W Position', 'N-S Position', 'Intensity'] $
		ELSE $
			LIST=['E-W Position', 'N-S Position', 'Intensity', 'Flux']
 		WIDGET_CONTROL, Str_Cnrh2.Bparam, SET_VALUE = List
		WIDGET_CONTROL, Str_Cnrh2.Bflin, SET_VALUE = FL(sz(1)-1)
		WIDGET_CONTROL, Str_cnrh2.Deb,SET_VALUE = str_trac.hd
		WIDGET_CONTROL, Str_cnrh2.Fin, SET_VALUE= str_trac.hf
		END

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

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

		READ_NRHPOS, Str_file.file, Extd, Centre, Header

		End

	'Ascii': BEGIN
		IF Str_file.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First Open a SOURCE file',$
					DIALOG_Parent = Event.top)
			RETURN
		END
		Fascii= Str_file.file
		STRPUT, Fascii, 'asc', STRLEN(Fascii)-3
		NRH_CENTERASCI, Str_file.file, Fascii, GROUP=Event.top
			R=Widget_Message('Source file'+Fascii,$
					DIALOG_Parent = Event.top) 
		End		


        'PLOT' : BEGIN
		IF Str_file.file EQ '' THEN BEGIN
			r=WIDGET_MESSAGE('First Open a SOURCE file')
			RETURN
		END

		IF EXTD EQ 0 THEN BEGIN
			Ret = WIDGET_MESSAGE('First read a SOURCE')
			Return
			END
		Time = Centre.time
		SZ = Size ( Time )

		IF Str_cnrh2.Cparam EQ 0 THEN BEGIN	;Position E-W
			VALEUR = FLTARR(Sz(1))
			FOR I=0,SZ(1)-1 DO BEGIN 
				Valeur(i)=IND_RS(Centre.EWPOS(i), $
					Str_cfile.Xcen, Str_Cfile.Ray)
			END
			YLAB = 'E-W Position'
			IF Str_cnrh2.Yrange[0] EQ 0.0  AND $
				Str_cnrh2.Yrange[1] EQ 0.0 THEN $
;				Yrange = [-2,2] ELSE $
                                Yrange = [ -Str_cfile.Xcen / Str_Cfile.Ray , $
                                  Str_cfile.Xcen / Str_Cfile.Ray] ELSE $
			YRANGE = Str_cnrh2.Yrange
			Ylog = 1
		END
		IF Str_cnrh2.Cparam EQ 1 THEN BEGIN	;Position N-S
			VALEUR = FLTARR(Sz(1))
			FOR I=0,SZ(1)-1 DO BEGIN 
				Valeur(i)=IND_RS(Centre.NSPOS(i), $
					Str_cfile.Ycen, Str_Cfile.Ray)
			END
			YLAB = 'N-S Position'
			IF Str_cnrh2.Yrange[0] EQ 0.0 AND $
				Str_cnrh2.Yrange[1] EQ 0.0 THEN $
;				Yrange = [-2,2] ELSE $
                                Yrange = [ -Str_cfile.Xcen / Str_Cfile.Ray , $
                                  Str_cfile.Xcen / Str_Cfile.Ray] ELSE $
			YRANGE = Str_cnrh2.Yrange 
			Ylog=1
		END
		IF Str_cnrh2.Cparam EQ 2 THEN BEGIN	;Intensite
			Valeur = Centre.INTENSITY
			Ylab = 'Intensity'
			YRANGE = Str_cnrh2.Yrange
			Ylog = Str_cnrh2.ech
		END

		IF Str_cnrh2.cparam EQ 3 THEN BEGIN	;Flux
			Valeur = Centre.flux
			Ylab = 'Flux ( SFU )'
			YRANGE = Str_cnrh2.Yrange
			YLOG = Str_cnrh2.ech
		END

		Freq = STRING( Str_cfile.Freq,FORMAT='(F5.1)')+'MHz'
		XLAB = Str_cfile.Date + ' ' + Freq

		CLAB=''
		Str_cnrh2.styl = 0
		TR_TIME_NRH, Valeur, Time,$
			HR_BEG=str_trac.hd, $ 
			HR_END=str_trac.hf, CLAB= clab, $
			YRANGE = Yrange, $
			PSYM= Str_cnrh2.Psym, $
			XLAB = Xlab, YLAB = ylab, Ylog= ylog, $
			BACKGROUND= Str_cnrh2.bck, COLOR= Str_cnrh2.clr
		END

	'OPLOT': BEGIN
		IF EXTD EQ 0 THEN BEGIN
			Ret = WIDGET_MESSAGE('First read a SOURCE')
			Return
			END
		Time = Centre.time
		SZ = Size ( Time )

		IF Str_cnrh2.Cparam EQ 0 THEN BEGIN	;Position E-W
			VALEUR = FLTARR(Sz(1))
			FOR I=0,SZ(1)-1 DO BEGIN 
				Valeur(i)=IND_RS(Centre.EWPOS(i), $
					Str_cfile.Xcen, Str_Cfile.Ray)
			END
			Ylog = 1
		END
		IF Str_cnrh2.Cparam EQ 1 THEN BEGIN	;Position N-S
			VALEUR = FLTARR(Sz(1))
			FOR I=0,SZ(1)-1 DO BEGIN 
				Valeur(i)=IND_RS(Centre.NSPOS(i), $
					Str_cfile.Ycen, Str_Cfile.Ray)
			END
			Ylog=1
		END
		IF Str_cnrh2.Cparam EQ 2 THEN BEGIN	;Intensite
			Valeur = Centre.INTENSITY
			Ylog = Str_cnrh2.ech
		END

		IF Str_cnrh2.cparam EQ 3 THEN BEGIN	;Flux
			Valeur = Centre.flux
			YLOG = Str_cnrh2.ech
		END

		Str_cnrh2.styl = str_cnrh2.styl +1

CLAB='' 
		TR_TIME_NRH, Valeur, Time, $
			HR_BEG=str_trac.hd, $
			PSYM= Str_cnrh2.Psym, $
			HR_END= str_trac.Hf,  Ylog= Str_cnrh2.ech, $
			LINESTYLE= str_cnrh2.styl,CLAB=clab, /Oplot, $
			BACKGROUND= Str_cnrh2.bck, COLOR= Str_cnrh2.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 CENTER_NRH2, File, GROUP=group

COMMON LIMIT, str_lim
COMMON CENTER_NRH2, Str_cnrh2, Str_trac, Str_cfile, Str_file, Extd, Centre, $
	Red, Green, Blue

	Str_cnrh2 = {str_cnrh2, Info:0l, Prt:0, Ech:0,Styl:0, $
		Deb:0L, Fin:0L, Yrange: [0.,0.], Bparam:0L, Cparam: 0, $
		Bflin:0L, Bst:0L, Psym:10, Bck:0, Clr:0}

STR_FILE ={NRH_STR_FIC}
STR_TRAC = Str_lim
STR_CFILE = {NRH_STR_INFIC}
Str_Cnrh2.Cparam = 0
EXTD = 0

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

		NOM=''
	IF File NE '' THEN BEGIN
		Str_file.File = File
		OPEN_NRH_CFILE, File, Str_cfile, Str_trac
			HD = HEADFITS (file)
			FILIN = FXPAR(Hd, 'FILEIMG')
			FL = STR_SEP(Filin, '/')
			SZ = SIZE(Fl)
			NOM= FL(sz(1)-1)
			INSTRUME = FXPAR(Hd,'INSTRUME')
	END
	IF STRMID(INSTRUME,0,4) EQ 'HSSI' THEN $
		LIST=['E-W Position', 'N-S Position', 'Intensity'] $
	ELSE $
		LIST=['E-W Position', 'N-S Position', 'Intensity', 'Flux']


CD, Current = REP
	Str_file.rep = Rep

If N_ELEMENTS(Group) EQ 0 THEN GROUP = 0

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 Sources', Column=1)

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

Base3= WIDGET_BASE(Base,/Column, /frame, /align_center)
       l=WIDGET_LABEL(Base3, value='PLOT Control',/align_center)
	Str_Cnrh2.Bparam= WIDGET_DROPLIST(Base3, Value= List,$
			 Uvalue= 'Cparam', TITLE= 'Parameter:')
		LIST=['Histo','Line','*','+']
	Stl = WIDGET_DROPLIST(Base3, Value= List,$
			 Uvalue= 'Style', TITLE= 'Style:')
       b= CW_PLOTSERIE(base3,PSNAME='center.ps', PNGNAME='center.png', $
		/BACKGROUND, /COLOR)

       b = CW_FIELD(Base, /STRING, TITLE= 'Directory :', /all_events,$
		Xsize=30, Value= Str_file.rep, Uvalue = 'Repert')
	Str_cnrh2.Bflin =CW_FIELD(Base, TITLE= 'Image file:',$
		Value = Nom,Xsize=30)
Base4= WIDGET_BASE(Base,/row, /align_center)
       b=WIDGET_BUTTON(Base4,Value='Show TIME on plot', Uvalue='Stime')
	Str_cnrh2.Bst =CW_FIELD(Base4, TITLE= ' : ',Value = ' ')
       b=WIDGET_BUTTON(Base,Value='Open SOURCES file', Uvalue='Open')
       b=WIDGET_BUTTON(Base,Value='Read SOURCE ', Uvalue='Read')
       b=WIDGET_BUTTON(Base,Value='Write SOURCES in ASCII file ', Uvalue='Ascii')
       b=WIDGET_BUTTON(Base,Value='Return', Uvalue='Exit')

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

WINDOW,/Free

Xmanager,'CENTER_NRH2',Base, /NO_BLOCK

END
       
       
