
;+ ***********************************************************************
; NAME:
;	MENUCALCFLUX1D
;
; PURPOSE:
;	Cette procedure contient les WIDGETS pour le calculde flux sur les
;	fichiers images 1 dimension du NRH
;	"Button" 1D FLUX du menu principal
;
; CATEGORY:
;	NRH1 Menu
;
; CALLING SEQUENCE:
;	MENUCALCFLUX1D
;
; INPUTS:
;	Non
;
; KEYWORD PARAMETERS:
;	Non
;
; OUTPUTS:
;	Non
;
; COMMON BLOCKS:
;	NRH1_GLOBAL
;	NRH1_HELIO
;
; MODIFICATION HISTORY: (bonmartin@obspm.fr)
;	16/11/98 adapte du logiciel XHELIO
;-*******************************************************************

PRO MENUCALCFLUX_EVENT, ev

ON_ERROR,2
common NRH1_GLOBAL,nomfich,fichinfo
common NRH1_HELIO,mainstruct

; on charge les variables locales
stash = WIDGET_INFO ( ev.top, /CHILD )
WIDGET_CONTROL, stash, GET_UVALUE = state

; lecture du fichier d'images
IF (ev.id EQ state.file1) THEN BEGIN
   WIDGET_CONTROL, state.file1, GET_VALUE = fichier
   err = newlitentete(1,fichier(0),file)
   IF (err EQ 1) THEN RETURN
; Construction du nom du fichier de flux: 'f' + nom du fichier d'images
   i = 0 & nslash = 0 & nbcar = STRLEN(fichier)
   nslash = RSTRPOS(fichier,'/')	; derniere apparition du caract. '/'
   fflux = STRMID(fichier, 0, nslash) + '/f' + $
			 STRMID(fichier, nslash+1, nbcar-nslash)

; Modification pour fichier images FITS
		S= STR_SEP(Fflux, '.')
		Sz= SIZE(s)
		IF S(1) EQ 'fts' THEN $
 		    IF Mainstruct.array EQ 0 THEN Fflux = S(0)+'.few'$
			ELSE Fflux = S(0)+'.fns'

   WIDGET_CONTROL, state.file2, SET_VALUE = fflux
   hdeb=MSH(file.heurdeb)
   hfin=MSH(file.heurfin)
   cdeb=fix(file.valorg(0))
   cfin = fix(file.valorg(0)+(file.nbpix(0)-1)*file.paspix(0))
   WIDGET_CONTROL, state.canaux, SET_VALUE = [cdeb,cfin]
   WIDGET_CONTROL, state.heures, SET_VALUE = [hdeb,hfin]
ENDIF

; Pour les fichiers FITS choix EW NS
IF Ev.id EQ State.Id_ewns THEN $
	Mainstruct.array = ev.value


; bouton de controle

IF ( ev.id EQ state.bgroup_control ) THEN BEGIN 
  ; ******** update ********* on recupere les variables globales 
     IF ( ev.value EQ 0 ) THEN BEGIN
        WIDGET_CONTROL, state.canaux, GET_VALUE = mainstruct.canaux
        WIDGET_CONTROL, state.heures, GET_VALUE = mainstruct.heures     
     ENDIF
  ; ******* done ********* on change de fichier rh
     IF ( ev.value EQ 1 ) THEN BEGIN 
         WIDGET_CONTROL,state.file1,GET_VALUE = temp             
         WIDGET_CONTROL, stash, SET_UVALUE = state
         WIDGET_CONTROL, ev.top,/DESTROY   
         RETURN
     ENDIF
  ; ******* calcul du flux *********
    IF ( ev.value EQ 2 ) THEN BEGIN
        WIDGET_CONTROL,/HOURGLASS
      ; *******   On recupere  toutes les valeurs des widgets *********
        WIDGET_CONTROL, state.file1, GET_VALUE = fichier1 
        WIDGET_CONTROL, state.file2, GET_VALUE = fichier2      
       WIDGET_CONTROL, state.heures, GET_VALUE = heures
        WIDGET_CONTROL, state.canaux, GET_VALUE = canaux
  
        nomfich1=STRING(fichier1,FORMAT='(A30)')
        nomfich2=STRING(fichier2,FORMAT='(A30)')

;	Ecriture du fichier flux dans un fichier de type "position 1D"
	lun = 2	
 	err = newlec1d(lun,a,sa,FICHIER=fichier1)
        IF (err NE 1) THEN calcflux, a, lun, $
			 HEURES=heures, CANAUX=canaux, temps, FLUX
	close, lun


	WIDGET_CONTROL, state.canaux, SET_VALUE = canaux
	WIDGET_CONTROL, state.heures, SET_VALUE = heures
	nbmaxpt = N_ELEMENTS(temps)	; nbre d'instants
	npos = 1			; nbre de positions a ecrire
	itete = [1, LONG(temps(0)), nbmaxpt]	; entete de la position; no, hdeb, nb pts

	idtms = LONG( fichinfo(lun).paspix(1))	; intervalle temps [ms]
	xmin = MIN(flux, MAX=xmax)
	trp = fltarr(5, nbmaxpt, npos)
	cancentral = .5*total(canaux)
	fwhm = canaux(1) - canaux(0)
	FOR num = 0, nbmaxpt-1 DO BEGIN
		trp(0, num, npos-1) = num
		trp(1, num, npos-1) = cancentral	; canal
		trp(2, num, npos-1) = flux(num, 0)		; flux I
		trp(3, num, npos-1) = flux(num, 1)		; flux V
		trp(4, num, npos-1) = fwhm		; largeur
	ENDFOR

; *** Ecriture d'un nouveau fichier de flux ou fusion avec un ancien:
		valfreq = MOTCLE(lun, 'FREQ')
		valres = MOTCLE(lun, 'LABEL')
		chrec_cle=['INDICE','CANAL','FLUX-I','FLUX-V','DIAMETRE']
		nbrec =  N_ELEMENTS(chrec_cle)
; essai 
   hdeb=fichinfo(lun).heurdeb
   hfin=fichinfo(lun).heurfin

		c2idate, fichinfo(lun).date, idate
			SZ = SIZE(FINDFILE(fichier2))
		IF SZ(0) EQ 0 THEN $
			ECRPOS, xmin, xmax, idtms, hdeb, hfin, idate, $
				valfreq, valres, nbrec, chrec_cle, $
				fichier2, npos, nbmaxpt, itete, trp $
		ELSE $
			FUSIONPOS1D,  xmin, xmax, idtms, hdeb, hfin, idate, $
				valfreq, valres, nbrec, chrec_cle, $
				fichier2, npos, nbmaxpt, itete, trp
   ENDIF     
ENDIF


IF ( ev.id EQ state.heures ) THEN BEGIN
mainstruct.heures = ev.value
ENDIF


IF ( ev.id EQ state.canaux ) THEN BEGIN
mainstruct.canaux = ev.value
ENDIF


; on sauve les modifications
WIDGET_CONTROL, stash, SET_UVALUE = state
END



PRO MENUCALCFLUX1D
;          
;                             les variables globales (mainstruct)
;          Utilisations des fenetres 5,6,7,8 pour les affichages 
;          (mainstruct.windows(5:8))

common NRH1_HELIO,mainstruct

Title = "COMPUTE FLUX DENSITY"
;         initialisation du button group
valmax=10
valtri=10L
valnit=4

base = WIDGET_BASE (TITLE = title,/FRAME,/COLUMN, XOFFSET = 200,$
                                      YOFFSET = 200 )
base_file = WIDGET_BASE ( base,/COLUMN,/FRAME )
base_time = WIDGET_BASE(base,/ROW )          ; Saisie hdeb, hfin

fich1=mainstruct.ewfile
str = "Fichier RH source"
file1 = CW_pickfile_nrh(base_file, TITLE = "Fichier RH", $
              VALUE = fich1, FILTER = '*.[e,.n,.f]*')
Id_ewns = CW_BGROUP(base_file,['E-W','N-S'],$
	COLUMN=2, /EXCLUSIVE,SET_VALUE = Mainstruct.array) 

nslash = RSTRPOS(fich1,'/')	; derniere apparition du caract. '/'
fich2 = STRMID(fich1, 0, nslash) + '/f' + $
			 STRMID(fich1, nslash+1, STRLEN(fich1)-nslash)
file2 = CW_pickfile_nrh(base_file, TITLE = "Fichier flux", $
              VALUE = fich2)

; Lecture de l'entete du fichier

err = newlitentete(1,fich1,file)
IF err EQ 0 THEN BEGIN

	
   canal=[fix(file.valorg(0)),$
          fix(file.valorg(0)+(file.nbpix(0)-1)*file.paspix(0))]
   heure= [MSH(file.heurdeb),MSH(file.heurfin)]
ENDIF ELSE BEGIN
   canal=[-512,512]
   heure=['00:00:00:00','24:00:00:00']
ENDELSE


;Groupe de saisie des horaires de debut et de fin de visualisation

heures = CX_HEURES (base_time,VALUE=heure)


canaux = CX_CANAUX (base_time,VALUE=canal)

bgroup_control = CW_BGROUP ( base, ['UPDATE','QUITTER','CALCULER'],$
                 /ROW,Xsize= 300)
    
state = { $
;          button:button, switch:switch,$
          bgroup_control:bgroup_control , $
          file1:file1, file2:file2,Id_ewns: Id_ewns, $
          heures:heures, canaux:canaux }

WIDGET_CONTROL, WIDGET_INFO ( base, /CHILD ), SET_UVALUE = state 

WIDGET_CONTROL, base ,/REALIZE

XMANAGER,'MENUCALCFLUX', base,GROUP_LEADER = mainstruct.root, /NO_BLOCK

END


 

