 Function rh_dpatch_cmd, fich_in, t_deb, t_fin, sel_freq,            $
                         i_redond, tab_sel_ext, tab_sel_ant, np,     $
                         ipolar, out_dir,larg, period, iuv, i_clean, $
                         fac_seuil1,                 $
                         mode_inter, crit_arret, larg_2, rot_p

; modif septembre 98 : creation des fichiers fits 2D d'harmoniques
; modif juillet 97   : selection des frequences
    s1 = ' DEF_STR_DP, str_dp'
    s1 = [s1,string(format='("str_dp.np=",f4.0)',np)]
    s1 = [s1,string(format='("str_dp.larg=",f4.1)',larg)]
    s1 = [s1,string(format='("str_dp.n_period=",f3.1)',period)]
    s1 = [s1,string(format='("str_dp.mode_interpol=",i1.1)',mode_inter+1)]
    s1 = [s1,string(format='("str_dp.rot_p=",i1.1)',rot_p)]

    s1 = [s1,string(format='("str_dp.ie0_ew=",i1.1)',tab_sel_ext(0))]
    s1 = [s1,string(format='("str_dp.ie0_ns=",i1.1)',tab_sel_ext(1))]
    s1 = [s1,string(format='("str_dp.ie1_ew=",i1.1)',tab_sel_ext(2))]
    s1 = [s1,string(format='("str_dp.ie2_ew=",i1.1)',tab_sel_ext(3))]
    s1 = [s1,string(format='("str_dp.ie2_ns=",i1.1)',tab_sel_ext(4))]
    s1 = [s1,string(format='("str_dp.ins45_ew=",i1.1)',tab_sel_ext(5))]
    s1 = [s1,string(format='("str_dp.ins45_ns=",i1.1)',tab_sel_ext(6))]
    s1 = [s1,string(format='("str_dp.i_redond=",i1.1)',i_redond)]
    s1 = [s1,string(format='("str_dp.i_pave_plein=",i1.1)',iuv)]

    s1 = [s1,string(format='("str_dp.mode_clean=",i1.1)',i_clean)]
    s1 = [s1,'str_dp.coeff_seuil1=str_dp.coeff_seuil1*fac_seuil1']
    s1 = [s1,string(format='("str_dp.crit_arret=[",3(i1.1,","),i1.1,"]")',$
         crit_arret)]
    s1 = [s1,string(format='("str_dp.larg_2=[",i2.2,",",i2.2,"]")',$
         larg_2)]

    del_ant = where( tab_sel_ant eq 0b, ncount)
;    print,'rh_dpatch-ssw',tab_sel_ant
;    print,'rh_dpatch-ssw',del_ant
    if ncount gt 0 then begin
        for k=0,ncount-1 do begin
           s1 = [s1,string(format='("str_dp.sel_ant(",i2.2,")=0b")', $
                           del_ant(k))]
        endfor
    endif
    if n_elements(sel_freq) ne 1 then begin
           s1=[s1,"sel_freq=strarr(10)"]
           s1=[s1,string(format= $
            '("sel_freq(*)=[",9("''",a1,"'',"),"''",a1,"'']")',sel_freq(*))]
    endif
    s = "rh_dpatchfits_nrh,'"+fich_in+ "',sel_freq,"
    s = s + strcompress(string(ipolar)+',[')

    s = s+string(format='(3(i2.2,","),i2.2)',t_deb)+'],['
    s = s+string(format='(3(i2.2,","),i2.2)',t_fin)+'],'
    s = s+"'"+out_dir+"'"+",str_dp"
    s = [s1, s]
    s1='.c' 
    s = [s, s1, s1, s1, s1, s1] 
;print,'commande>', s,'<' 
;stop 
    return, s
end

PRO RH_DPATCH_SSW_Event, Event

  COMMON rh_wdpatch, nom, T_DEB,T_FIN, sel_freq, ipolar, iba, $
                     out_dir, path_sel, fcmd
  common rh_id_base, bfreq,brs,bpol, bba, txt_message,hbase,sdeb,s_fin,snom

  COMMON rh_wdpim, np, larg , period, mode_inter, rot_p
  COMMON rh_wdphar, i_redond, tab_sel_ext, tab_sel_ant, iuv
  COMMON rh_wdpcl, i_clean, fac_seuil1, crit_arret, larg_2

  @rh_common.inc

  WIDGET_CONTROL, Event.Id, GET_UVALUE = Ev

  CASE Ev OF
 'selec_file' : BEGIN
	filter = '2???????.*'	 		
	nomfichier = ''
	rh_sel_fich, path_sel, filter, nomfichier, typ1, typ2
        tab_typ = ['d','D','q','Q','i','I','c','C']
        ind = where ( tab_typ eq typ2)
        IF ind(0) eq -1 or nomfichier EQ ''  THEN BEGIN 
	    rh_dp_aide, message, sujet = 'get_files'
            message2 = [' ***BAD TYPE FILE*** ' ,message] 
            mes = DIALOG_MESSAGE(message2, /INFORMATION, $
                  TITLE = 'How to get files ')
            t_deb=[0,0,0,0] & t_fin=[24,0,0,0]
        END ELSE BEGIN
            nom = nomfichier
            IF NOT (rh_open(NOMFICHIER)) THEN BEGIN
                r = dialog_message([' ',' ',!ERR_STRING,' ',' '], $
                    /information, title='Dpatch')
            ENDIF ELSE BEGIN
	        nom = nomfichier
                WIDGET_CONTROL, snom, set_value=nom
	        WIDGET_CONTROL,sdeb,/DESTROY
	        WIDGET_CONTROL,s_fin,/DESTROY
                t_deb = entfi.hdeb
                t_fin = entfi.hfin
                RH_CLOSE
                sdeb  = RH_CW_TIME( hBASE, MAXIMUM=T_FIN, MINIMUM=T_DEB, $
                   XSIZE=200, VALUE=T_DEB, TITLE='Time-start', $
                   UVALUE='heudeb')
                s_fin = RH_CW_TIME( hBASE, MAXIMUM=T_FIN, MINIMUM=T_DEB, $
                   XSIZE=200, VALUE=T_FIN, TITLE='Time-end', $ 
               UVALUE='heudfi')
	    ENDELSE
        END
    END
 'nom': BEGIN
          widget_control, event.id, get_value=nomget
;	  nom=nomget(0)
	  nomfichier=nomget(0)
          IF NOT (rh_open(NOMFICHIER)) THEN BEGIN
              r = dialog_message([' ',' ',!ERR_STRING,' ',' '],/information, $
                title='Dpatch')
          ENDIF ELSE BEGIN
	      nom = nomfichier
	      WIDGET_CONTROL,sdeb,/DESTROY
	      WIDGET_CONTROL,s_fin,/DESTROY
              t_deb = entfi.hdeb
              t_fin = entfi.hfin
              RH_CLOSE
              sdeb  = RH_CW_TIME( hBASE, MAXIMUM=T_FIN, MINIMUM=T_DEB, $
                   XSIZE=200, VALUE=T_DEB, TITLE='Time-start', $
                   UVALUE='heudeb')
              s_fin = RH_CW_TIME( hBASE, MAXIMUM=T_FIN, MINIMUM=T_DEB, $
                   XSIZE=200, VALUE=T_FIN, TITLE='Time-end', $ 
                   UVALUE='heudfi')
	  ENDELSE
	END 
 'DIR': BEGIN
           widget_control, event.id, get_value=out_dir
;           print,'dpatch',out_dir
        END  
 'heudeb': BEGIN
	   widget_control,event.id,GET_VALUE=TH_TEST
	   IF (TOTAL((TH_TEST-T_FIN)*[360000D,6000D,100D,1D]) GE 0) THEN BEGIN
	      widget_control,event.id,SET_VALUE=T_DEB
	     RETURN
	   ENDIF
           T_DEB = TH_TEST
           END
 'heudfi': BEGIN
           widget_control,event.id,GET_VALUE=TH_TEST
	   IF (TOTAL((TH_TEST-T_DEB)*[360000D,6000D,100D,1D]) LE 0) THEN BEGIN
	      widget_control,event.id,SET_VALUE=T_FIN
              RETURN
	   ENDIF
	   T_FIN=TH_TEST
	   END

  'ann':  WIDGET_CONTROL,EVENT.TOP,/DESTROY


  'polar':BEGIN
               CASE event.index OF
               0: ipolar=1
               1: ipolar=0
               ENDCASE
;               print,'polar',ipolar
          END

  'selec':BEGIN
              nf=entfi.nf
              tab_freq = INTARR(10) & tab_freq = entfi.frq
              nom_f = strarr(nf)
              FOR i=0,nf-1 DO nom_f(i) = $
	      STRING(FORMAT='(F6.1," Mhz")',tab_freq(i)/10.)
              sel_freq=strarr(10)
              tab_sel_2d  = BYTARR(nf) & tab_sel_2d(*)  = 1b
	      rh_selection,'2D',nom_f,tab_sel_2d,group=event.top
              sel_freq(*)='N'
              sel_freq(where(tab_sel_2d eq 1b))='Y'
	      FOR nf=0,entFI.nf-1 do begin
	         if sel_freq(nf) eq 'Y' then begin
	         message = nom_f(nf)
	         WIDGET_CONTROL, txt_message, set_value = message, /APPEND
	         ENDIF
	      ENDFOR
          END
  'image':BEGIN
          rh_w_dp
          END
  'size': BEGIN
          if nom(0) ne '' then begin
             WIDGET_CONTROL,/HOURGLASS 
	     RH_DP_INFO, nom(0), sel_freq, t_deb, t_fin, ipolar, np, $  
	       dsmf, num_cnt, taille_mega
	     FOR nf=0,entFI.nf-1 do begin
	        IF sel_freq(nf) eq 'Y' then begin
	        message = [dsmf(nf), ' About '+ string(num_cnt(nf)*(ipolar+1))$
                   +' images'+ string(taille_mega(nf))+' megabytes ']
	        WIDGET_CONTROL, txt_message, set_value = message, /APPEND
	        ENDIF
	     ENDFOR
; duree de traitement par image : dt_im=0.50 sec + 6.5 sec pour le clean
;  pour une image de 128*128 . 

	     dt_im = 0.50
             if i_clean gt 0 then dt_im = dt_im + 6.
             dt_im=dt_im*(np/128.)^2
             tab_f= where (sel_freq eq 'Y',nb_freq)
	     tot_images = total(num_cnt(tab_f)*(ipolar+1))
	     duree = dt_im * tot_images/60.
	     ch_duree=string(long(duree))+ ' minute(s)'
	     if duree lt 1. THEN BEGIN
	        duree = dt_im * tot_images
	        ch_duree=string(long(duree))+ ' seconde(s)'
	     ENDIF
	     message = ' Processing the files will take about'+ ch_duree
         endif
         if nom(0) eq '' then message =' no file selected'
	 WIDGET_CONTROL, txt_message, set_value = message, /APPEND
         END

  'batch' : BEGIN
               CASE event.index OF
               0: iba=0
               1: iba=1
               ENDCASE
;               print,'iba',iba
	    END
  'help': BEGIN
	     rh_dp_aide, message, sujet = 'get_files'
             mes = DIALOG_MESSAGE(message, /INFORMATION, $
                   TITLE = 'How to get files ')
	  END
  'ok':   BEGIN
          IF iba eq 1 and !version.os_family ne "unix" THEN BEGIN
	     iba = 0
	     message = ' Warning : interactive mode required'
	     WIDGET_CONTROL, txt_message, set_value = message, /APPEND
	  ENDIF
	  IF iba eq 0 THEN BEGIN 
	     message = '    processing in progress '
	     WIDGET_CONTROL, txt_message, set_value = message, /APPEND	
	     WIDGET_CONTROL,/HOURGLASS

             DEF_STR_DP, str_dp
             str_dp.np           = np
             str_dp.larg         = larg
             str_dp.n_period     = period
             str_dp.mode_interpol= mode_inter+1
             str_dp.rot_p        = rot_p
             str_dp.i_redond     = i_redond
             str_dp.ie0_ew       = tab_sel_ext(0)
             str_dp.ie0_ns       = tab_sel_ext(1)
             str_dp.ie1_ew       = tab_sel_ext(2)
             str_dp.ie2_ew       = tab_sel_ext(3)
             str_dp.ie2_ns       = tab_sel_ext(4)
             str_dp.ins45_ew     = tab_sel_ext(5)
             str_dp.ins45_ns     = tab_sel_ext(6)
             str_dp.sel_ant      = tab_sel_ant
             str_dp.i_pave_plein = iuv
             str_dp.mode_clean  = i_clean
             str_dp.coeff_seuil1 = str_dp.coeff_seuil1 * fac_seuil1
             str_dp.crit_arret  = crit_arret
             str_dp.larg_2       = larg_2

	     RH_DPATCHFITS_NRH, $
;     Nom de fichier, choix des frequences, de la polar, temps debut et fin,   
                 nom, sel_freq, ipolar, t_deb, t_fin,            $
;     Repertoire de sortie
                 out_dir,                                            $
;     Structure contenant les parametres de calcul d'image
                 str_dp

	     message = '    processing has completed'
	     WIDGET_CONTROL, txt_message, set_value = message, /APPEND
          ENDIF ELSE BEGIN
             s = rh_dpatch_cmd(nom, t_deb, t_fin, sel_freq , i_redond,    $
                    tab_sel_ext, tab_sel_ant, np , ipolar, out_dir, larg, $
                    period, iuv, i_clean, fac_seuil1,     $
                    mode_inter, crit_arret, larg_2, $
                    rot_p)
             lab1 = '  ==================== '
             lab = lab1+' CREATION FICHIER FITS '+lab1
             rh_command1, fcmd,[s], LABEL=lab, /IDL, group = event.top
	  ENDELSE
      END

  ENDCASE
END


PRO RH_DPATCH_SSW, path1, path2, cmd, GROUP=Group

  COMMON rh_wdpatch, nom, T_DEB, T_FIN, sel_freq, ipolar, iba, $
                     out_dir, path_sel, fcmd
  common rh_id_base, bfreq, brs, bpol, bba, txt_message, hbase, $
                     sdeb, s_fin, snom

  COMMON rh_wdpim, np, larg , period, mode_inter, rot_p
  COMMON rh_wdphar, i_redond, tab_sel_ext, tab_sel_ant, iuv
  COMMON rh_wdpcl, i_clean, fac_seuil1, crit_arret, larg_2

  @rh_common.inc
  if (xregistered('RH_DPATCH_SSW')) then begin     ; Don't make a second copy.
     print,' " Compute NRH files" already in use'
     return
  end
  cd, curdir, CURRENT=curdir
  if ( n_elements(path1) eq 0) then begin
;	print, 'path1 non defini'
	path1=curdir
  endif
  if ( n_elements(path2) eq 0) then begin
;	print, 'path2 non defini'
	path2=curdir
  endif
  if ( n_elements(cmd) eq 0) then begin
;	print, 'nom de commande non defini'
	cmd='dpatch'+ rh_no()
  endif
  out_dir=path2
  fcmd = cmd
  sel_freq=['Y','Y','Y','Y','Y','N','N','N','N','N']
; Parametres par defaut du calcul d'images
  COMMON rh_wdpim, np, larg , period, mode_inter
  COMMON rh_wdphar, i_redond, tab_sel_ext, tab_sel_ant, iuv
  COMMON rh_wdpcl, i_clean, fac_seuil1, crit_arret, larg_2
  def_str_dp, str_dp
  np          = str_dp.np
  larg        = str_dp.larg
  period      = str_dp.n_period
  mode_inter  = str_dp.mode_interpol - 1
  rot_p       = str_dp.rot_p
  i_redond    = str_dp.i_redond
  tab_sel_ext = intarr(7)
  tab_sel_ext(0) = str_dp.ie0_ew 
  tab_sel_ext(1) = str_dp.ie0_ns 
  tab_sel_ext(2) = str_dp.ie1_ew 
  tab_sel_ext(3) = str_dp.ie2_ew 
  tab_sel_ext(4) = str_dp.ie2_ns 
  tab_sel_ext(5) = str_dp.ins45_ew
  tab_sel_ext(6) = str_dp.ins45_ns
  tab_sel_ant = str_dp.sel_ant
  iuv         = str_dp.i_pave_plein
  i_clean     = str_dp.mode_clean
  crit_arret = intarr(4)
  crit_arret  = str_dp.crit_arret(0:3)
  fac_seuil1 = 1.
  larg_2       = str_dp.larg_2

  IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0
  filter = '2???????.*'	 		
  nomfichier = ''
  nom = ''
  path_sel = path1
 
  t_deb=[0,0,0,0] & t_fin=[24,0,0,0]
  mainBASE = WIDGET_BASE(GROUP_LEADER=Group, COLUMN=1,$ 
             TITLE='DPATCH : Compute NRH FITS Images', SPACE= 20, $
	    /BASE_ALIGN_CENTER)

  BASE = WIDGET_BASE(mainbase, /COLUMN, SPACE= 15,/BASE_ALIGN_CENTER,/FRAME)

  b = WIDGET_BUTTON( BASE, UVALUE='help', VALUE='How to get files', $
      xs=7., ys=1., units = 2)

  bb = WIDGET_BASE(BASE,SPACE=0,/ALIGN_CENTER,/COLUMN)
  l = WIDGET_Label(bb,Value='Input File') 

  snom  = widget_text(bb, /edit, value = nom, uvalue='nom', $
        ysize=1., xsize=40)
  bnom = WIDGET_BUTTON( bb, UVALUE='selec_file', VALUE='select a file')

  hbase = widget_base(base, /row, /frame)
  sdeb  = RH_CW_TIME( hBASE, MAXIMUM=T_FIN, MINIMUM=T_DEB, $
               XSIZE=200, VALUE=T_DEB, TITLE='Time-start', $
               UVALUE='heudeb')

  s_fin = RH_CW_TIME( hBASE, MAXIMUM=T_FIN, MINIMUM=T_DEB, $
               XSIZE=200, VALUE=T_FIN, TITLE='Time-end', $ 
               UVALUE='heudfi')
  fbase = widget_base(base, /row)

  bfreq = WIDGET_BUTTON( fBASE, UVALUE='selec', $
		VALUE='Frequencies ', $
		xs=4., ys=0.8, units = 2)

  ipolar=1
  bpol= WIDGET_DROPLIST( fBASE, UVALUE='polar',value=['Stokes I+V','Stokes I'])

  base_im = WIDGET_BUTTON( base,  UVALUE='image', $
              VALUE = ' Parameters for image computation')

  dbase = widget_base(base, /column)
  dl = widget_label(dbase, value='Output Files')
  sdir  = widget_text(dbase, /edit, value = out_dir, uvalue='DIR', $
        ysize=1, xsize=0.8, units = 2)
  jbase = widget_base(dbase, /row)
  b = WIDGET_BUTTON( jbase, UVALUE='size',  $ 
	VALUE='Info:size/name/time')
  iba = 0		; dpatch en mode interactif par defaut
  bba = WIDGET_DROPLIST( jBASE, UVALUE='batch', $
	value=['interactive mode','batch mode'])  
  ibase = widget_base(base, /row)
  b = WIDGET_BUTTON( iBASE, UVALUE='ok', VALUE='Compute', $
      xs=3., ys=1.5, units = 2)
  b = WIDGET_BUTTON( iBASE, UVALUE='ann', VALUE='Quit', $
      xs=1.5, ys=1.5, units = 2)
  txt_message = WIDGET_TEXT(mainbase, VALUE = 'All the frequencies are selected by default ', YSIZE=5, /SCROLL)

  WIDGET_CONTROL, mainBASE, /REALIZE
  
   XMANAGER, 'RH_DPATCH_SSW', mainBASE,/NO_BLOCK

END
