
;+ ***********************************************************************
; NAME:
;	NRH2_PROJECTION
;
; PURPOSE:
;	Cette procedure contient les widgets de traitement de projection 
;	des fichiers NRH2
;
; CATEGORY:
;	NRH2 project
;
; CALLING SEQUENCE:
;	NRH2_PROJECTION
;
; INPUTS:
;	Non
;	
; KEYWORD PARAMETERS:
;	GROUP	Identification du widget appelant
;
; OUTPUTS:
;	Non
;
; COMMON BLOCKS:
;	LIMIT, Str_lim
;	FICRH, Str_fic
;	INF2D, Str_inf2d
;		Definis dans nrh2.pro
;
; EXAMPLE:
;	Please provide a simple example here
;
; MODIFICATION HISTORY:
;	Ecrit par:J Bonmartin (obspm.fr) le 09/07/99
;-*******************************************************************

PRO NRH2_PROJECTION_EVENT, Event

COMMON LIMIT, Str_lim
COMMON FICRH, Str_fic
COMMON INFO2D, Str_inf2d
COMMON PROJ_LABNRH, Str_labet
COMMON BASE_PROJ, Strp, Str_prj, Data, Time, Strc

WIDGET_CONTROL, event.id, GET_UVALUE = ev

CASE ev of
        'Repert':       Str_fic.rep = event.value
        'File': BEGIN
                NRH_PICKFILE, Str_fic, Str_inf2d, Str_lim, Physpar, Lfreq
                Strp.Binf = cw_infonrh(Strp.Binf, Str_inf2d, /INFO)
;			Initialisation des limites apres rotation
                READ_NRHIM, Str_fic.file, Strp.Hplot,Str_inf2d,DONNEE
		IMAGE = NRH_ROTIM(Donnee,0.0)
		Str_lim.Xf= (Size(Image))(1)-1 &Str_lim.Yf= (Size(Image))(2)-1
                Strp.Phi = 0
		Strp.Hplot = Str_inf2d.Hd
                WIDGET_CONTROL, Strp.sti, SET_VALUE = Physpar
                WIDGET_CONTROL,Strp.Bhp, set_value=Strp.Hplot
                WIDGET_CONTROL,Strp.Bhd, set_value=Str_inf2d.Hd
                WIDGET_CONTROL,Strp.Bhf, set_value=Str_inf2d.Hf
		END
        'Time':    Strp.Hplot = event.value
        'StokesI': Strp.Phi = event.index
        'Selfld': BEGIN
                IF Str_fic.File EQ '' THEN BEGIN
                   r=WIDGET_MESSAGE('First Select a FILE')
                        RETURN & END
                READ_NRHIM, Str_fic.file, Strp.Hplot,Str_inf2d, $
                                          DONNEE, Str_im,STOKES = Strp.Phi
		IMAGE = NRH_ROTIM(Donnee, Strp.angle, Xc, Yc, $
				XCEN=Str_inf2d.Xcen, YCEN=Str_inf2d.Ycen)
		Str_im.crpixx= Xc & Str_im.crpixy=Yc
		Str_lim.Xd=0 & Str_lim.Yd=0
		Str_lim.Xf= (Size(Image))(1)-1 &Str_lim.Yf= (Size(Image))(2)-1
		CW_SELFIELD,Image,Str_im,Str_lim, GROUP=Event.top

;                               Limites en rayons solaires
                RSXD = IND_RS(Str_lim.xd, Str_im.crpixx, Str_im.ray)
                RSYD = IND_RS(Str_lim.yd, Str_im.crpixy, Str_im.ray)
                RSXF = IND_RS(Str_lim.xf, Str_im.crpixx, Str_im.ray)
                RSYF = IND_RS(Str_lim.yf, Str_im.crpixy, Str_im.ray)
                END
	'Angle': BEGIN
                IF Str_fic.File EQ '' THEN BEGIN
                   r=WIDGET_MESSAGE('First Select a FILE')
                        RETURN & END
                READ_NRHIM, Str_fic.file, Strp.Hplot,Str_inf2d, $
                                          DONNEE, Str_im,STOKES = Strp.Phi

		LIGNE = PROFIL(Donnee, Xdir, Ydir)
		DX= Xdir((SIZE(Xdir))(1)-1) - Xdir(0)
		DY= Ydir((SIZE(Ydir))(1)-1) - Ydir(0)
		Strp.ANGLE = ATAN( FLOAT(DY) / FLOAT(DX)) *180 / !PI
                WIDGET_CONTROL,Strp.Bangl, set_value=Strp.angle
		END
	'Vangle': Strp.Angle= event.value

	'Plot': BEGIN
                IF Str_fic.File EQ '' THEN BEGIN
                   r=WIDGET_MESSAGE('First Select a FILE')
                        RETURN & END
                READ_NRHIM, Str_fic.file, Strp.Hplot,Str_inf2d, $
                                          DONNEE, Str_im,STOKES = Strp.Phi
		Str_prj=Str_im
		Image= NRH_ROTIM(Donnee,Strp.Angle,Xc,Yc,XCEN=Str_im.Crpixx,$
					YCEN=Str_im.Crpixy)
		Str_prj.Crpixx = Xc & Str_prj.Crpixy = Yc
		ID=0
		LIGNE= FLTARR(Str_lim.Xf-Str_lim.Xd+1)
		FOR I= Str_lim.Xd, Str_lim.Xf DO BEGIN
			Ligne[Id] = TOTAL (Image[i,Str_lim.Yd:Str_lim.Yf])
			Id = Id+1
		ENDFOR
		RD= IND_RS(Str_lim.Xd,Str_prj.Crpixx,Str_prj.Ray)
		RF= IND_RS(Str_lim.Xf,Str_prj.Crpixy,Str_prj.Ray)
		ECH_RS, Rd, Rf, Str_lim.Xf-Str_lim.Xd,Xcoord
		PLOT, Xcoord, Ligne
		END

	'Display': BEGIN
                IF Str_fic.File EQ '' THEN BEGIN
                   r=WIDGET_MESSAGE('First Select a FILE')
                        RETURN & END
                READ_NRHIM, Str_fic.file, Strp.Hplot,Str_inf2d, $
                                          DONNEE, Str_im,STOKES = Strp.Phi
		Str_prj=Str_im
		Image= NRH_ROTIM(Donnee,Strp.Angle,Xc,Yc,XCEN=Str_im.Crpixx,$
					YCEN=Str_im.Crpixy)
		Str_prj.Crpixx = Xc & Str_prj.Crpixy = Yc
		DIM = (SIZE(Image))(1)*2

		WINDOW,/FREE, XSIZE=Dim, YSIZE=Dim
		NRH_DISPLAY_IM,Image, Str_prj, Str_lim, 0, DIM=Dim
;		XP=[0., 1.]
;		YP=[0.,0.]
;		YP[1] = TAN(-Strp.Angle /180 * !pi)
;cursor,xp,yp,/device
;print,xp,yp
;		OPLOT, Xp,Yp
		END


	'Hdeb': Str_lim.Hd = Event.Value
	'Hfin': Str_lim.Hf = Event.value
	'Level':Strp.Level = Event.Value
	'Pmax': Strp.Pmax = Event.Value
	'Pmin':Strp.Pmin = Event.Value
	'Labet': Str_labet=CW_LABELNRH()
	'Yrange': BEGIN
		CURSOR,X,YL,4, /Data
		CURSOR,X,YH,4, /Data
		IF Yl GT Yh THEN X=Yl & Yl=Yh & Yh=X
			& Str_lim.Xd=Str_lim.Xf & Str_Lim.Xf=X
		Str_lim.Xd = Rs_Ind(Yl,Strc.Xcen, Strc.Ray)
		Str_lim.Xf = Rs_Ind(Yh,Strc.Xcen, Strc.Ray)
		WIDGET_CONTROL,Strp.Byl,SET_VALUE=Yl
		WIDGET_CONTROL,Strp.Byh,SET_VALUE=Yh
		END
	'Ymin': Str_lim.Xd= RS_IND(Event.value,Strc.Xcen, Strc.Ray)
	'Ymax': Str_lim.Xf= RS_IND(Event.value,Strc.Xcen, Strc.Ray)

	'Comp': BEGIN
                IF Str_fic.File EQ '' THEN BEGIN
                   r=WIDGET_MESSAGE('First Select a FILE')
                        RETURN & END
		WIDGET_CONTROL,/Hourglas
		NRH2_Project2d, Str_fic.file, Str_inf2d, Str_lim, Strp.Angle,$
			Data, Time, Strc, STOKES = Strp.Phi
		END
	'Cont': BEGIN
		IF Str_lim.Xd LE 0 THEN Str_lim.Xd=0
		SZ= Size(Data)
		IF Str_lim.Xf GT SZ(2)-1 THEN Str_lim.Xd = Sz(2)-1
		ID=TIME_IND(time,str_lim.hd) & IDF=time_ind(time,str_lim.hf)
		NRH2_TRISOPH, Data[Id:idf,str_lim.xd:str_lim.xf], $
			Time[Id:Idf], Str_lim, Strc, $
			NLEVELS=Strp.level, MAXP= Strp.Pmax, MINP= Strp.Pmin,$
			LAB_TITLE= Str_labet
		END

        'Png':    BEGIN
                WRITE_PNG, 'proj.png', TVRD()
                R= WIDGET_MESSAGE('Image writted in proj.png')
        END 

        'Color':        XLOADCT
        'Return': BEGIN
                        WIDGET_CONTROL, event.top, /DESTROY
                        NRH_FCLOSE, Str_inf2d
                        END
ENDCASE
END

PRO NRH2_PROJECTION, GROUP=Group

COMMON LIMIT, Str_lim
COMMON FICRH, Str_fic
COMMON INFO2D, Str_inf2d
COMMON PROJ_LABNRH, Str_labet
COMMON BASE_PROJ, Strp, Str_prj, Data, Time, Strc

STRP = {STR_PROJECT, Sti:0L, Phi:0, Angle:0.0, Hplot:'',Hdeb:'',Hfin:'',$
	Level:5, Pmax:90, Pmin:5, $
	Binf:0L, Bhp:0L, Bhd:0l, Bhf:0l,Bangl:0L, $
	Bxd:0L, Bxf:0L, Byl:0l, Byh:0L}
STR_PRJ= {NRH_STR_IMAGE}
STR_LABET = {NRH_STR_LABEL}

        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  

	IF str_fic.file EQ '' THEN RETURN
Strp.Hplot = Str_inf2d.Hd
Strp.Hdeb = Str_Inf2d.Hd
Strp.Hfin = Str_Inf2d.Hf 
;			Initialisation des limites apres rotation
         READ_NRHIM, Str_fic.file, Str_lim.Hd,Str_inf2d,DONNEE
	IMAGE = NRH_ROTIM(Donnee,0.0,Xc,Yc,XCEN=Str_inf2d.Xcen,$
					YCEN=Str_inf2d.Ycen)
	Str_lim.Xf= (Size(Image))(1)-1 &Str_lim.Yf= (Size(Image))(2)-1
	RD= IND_RS(Str_lim.Xd,Xc,Str_Inf2d.Ray)
	RF= IND_RS(Str_lim.Xf,Xc,Str_inf2d.Ray)

IF N_ELEMENTS(Group) EQ 0 THEN Group = 0

Base = WIDGET_BASE(GROUP_LEADER = Group, TITLE='1 dimension Projection', $
               /COLUMN)

Base1 = WIDGET_BASE(Base, /FRAME, /ALIGN_CENTER, /COLUMN )
L= WIDGET_LABEL(Base1, VALUE = 'IMAGE', /ALIGN_CENTER)
    Base13 =WIDGET_BASE(Base1, /ALIGN_CENTER, /COLUMN)
	  B= CW_FIELD (Base13, /STRING, TITLE= 'Directory:', /ALL_EVENTS, $
                XSIZE= 35, VALUE=Str_fic.rep, UVALUE= 'Repert')
   Base11 =WIDGET_BASE(Base1, /ALIGN_CENTER, /ROW)
    Base113 =WIDGET_BASE(Base11, /ALIGN_CENTER, /COLUMN)
          B= WIDGET_BUTTON (Base113, UVALUE='File', VALUE='Select FILE')
          B= WIDGET_BUTTON (Base113, UVALUE='Selfld', VALUE='Select Region')
        Strp.sti =  WIDGET_DROPLIST(Base113, Value= Physpar ,$
                                                 Uvalue= 'StokesI')
    Base111 =WIDGET_BASE(Base11, /ALIGN_CENTER, /COLUMN)
          Strp.Binf = cw_infonrh(base111, Str_inf2d )

Base2 = WIDGET_BASE(Base, /ALIGN_CENTER, /COLUMN)
     Base21 =WIDGET_BASE(Base2, /ALIGN_CENTER, /COLUMN, /FRAME)
        Strp.Bhp= CW_FIELD (Base21, /STRING, TITLE= 'Time:', /ALL_EVENTS, $
                XSIZE= 20, VALUE= Strp.Hplot, UVALUE= 'Time')
     Base22 =WIDGET_BASE(Base2, /ALIGN_CENTER, /ROW, /FRAME)	
	Ba = WIDGET_BUTTON (Base22, UVALUE='Angle', VALUE='Direction')
        Strp.Bangl= CW_FIELD (Base22, /Integer, TITLE= 'Val:', /ALL_EVENTS, $
                XSIZE= 10, VALUE= 0, UVALUE= 'Vangle')

        B= WIDGET_BUTTON (Base2, UVALUE='Plot', VALUE='Plot 1 Projection')
        B= WIDGET_BUTTON (Base2, UVALUE='Display', VALUE='Display 1 Image')

Base3 = WIDGET_BASE(Base, /ALIGN_CENTER, /COLUMN, /FRAME)
L= WIDGET_LABEL(Base3, VALUE = 'CONTOURS', /ALIGN_CENTER)
     Base30 =WIDGET_BASE(Base3, /ALIGN_CENTER, /ROW, /FRAME)
     Base31 =WIDGET_BASE(Base30, /ALIGN_CENTER, /COLUMN)
        Strp.Bhd= CW_FIELD (Base31,/STRING,TITLE='Begin Time:',/ALL_EVENTS, $
                XSIZE= 20, VALUE= Strp.Hdeb, UVALUE= 'Hdeb')
        Strp.Bhf= CW_FIELD (Base31, /STRING, TITLE= 'End Time:',/ALL_EVENTS,$
                XSIZE= 20, VALUE= Strp.Hfin, UVALUE= 'Hfin')
     Base310 =WIDGET_BASE(Base31, /ALIGN_CENTER, /ROW)
        Byr= WIDGET_BUTTON (Base310, Uvalue='Yrange', VALUE='Y Range')
        Strp.Byl= CW_FIELD (Base310,/FLOAT,TITLE='Low:',/ALL_EVENTS, $
                XSIZE= 5, VALUE= Rd, UVALUE= 'Ymin')
        Strp.Byh= CW_FIELD (Base310,/FLOAT,TITLE='Hight:',/ALL_EVENTS, $
                XSIZE= 5, VALUE= Rf, UVALUE= 'Ymax')
        B= WIDGET_BUTTON (Base31, UVALUE='Comp', VALUE='Compute Projection')
        B= WIDGET_BUTTON (Base31, Uvalue='Cont', VALUE='Plot Contours')
	B= WIDGET_BUTTON (Base31, Uvalue='Labet', VALUE='TITLE Label')
     Base32 =WIDGET_BASE(Base30, /ALIGN_CENTER, /COLUMN)
	B=WIDGET_SLIDER(Base32,UVALUE='Level',TITLE='Nb levels', $
		VALUE=String(Strp.level), MAXIMUM=30, MINIMUM=3)
	B=WIDGET_SLIDER(Base32,UVALUE='Pmax',TITLE='% Max level', $
		VALUE=String(Strp.Pmax), MAXIMUM=100, MINIMUM=10)
	B=WIDGET_SLIDER(Base32,UVALUE='Pmin',TITLE='% Min level', $
		VALUE=String(Strp.Pmin), MAXIMUM=90, MINIMUM=0)

Base4 = WIDGET_BASE(Base, /ALIGN_CENTER, /ROW)
        b = widget_button( base4,Uvalue = 'Png',value='Save on PNG')
        B= WIDGET_BUTTON (Base4, Uvalue='Color', VALUE='Color')
        B= WIDGET_BUTTON (Base4, Uvalue='Return', VALUE='RETURN')

WIDGET_CONTROL, Base, /REALIZE
XMANAGER, 'NRH2_PROJECTION', Base, /NO_BLOCK

END
