pro sxign_make_genxcat, time0, time1, debug=debug, $
   catdir=catdir, cadence_days=cadence_days, goesn=goesn
;
;+
;   Name:sxign_make_genxcat
;
;   Purpose: sxi FITS headers -> "genx" catalog (read via read_genxcat.pro)
;
;   Input Parameters:
;      time0,time1 - time range for catalog(s)
;
;   Keyword Parameters:
;      catdir - output directory for catalog file(s) 
;               [def=$SSW_SXIGnn_GENXCAT -or- $SSWDB/goes/sxigNN ]
;      cadence_days - #days per catalog file (default=1=daily)
;      goesn - GOES satellite of SXI imager (def=12; 1st come, 1st served)
;
;   Method:
;      for each cadence range within input,
;         SXI headers -> structure vector (mreadfits_urls, sockets etc)
;         structure vector -> catalog (write_genxcat, etc)
; 
;   Calls:
;      ssw standards, anytim et al, mreadfits_urls, write_genxcat, sxi_files
;
;   History:
;      21-Jan-2003 - S.L.Freeland (eit/trace/write_genxcat<->read_genxcat heritage)
;
;-

debug=keyword_set(debug) 
if n_elements(goesn) eq 0 then goesn=12
sgoesn=strtrim(goesn,2)

case n_params() of 
   0: begin 
         time0='1-sep-2001'
         time1='21-dec-2001'  ; defaults are SXI-G12 test period (1st SXIn images) 
   endcase
   1: time1=reltime(time0,/day)
   else: 
endcase

sxign_genxcat=get_logenv('SSW_SXIG'+sgoesn+'_GENXCAT')
sxign_sswdb=concat_dir(concat_dir('$SSWDB','goes'),'sxig'+sgoesn)

; define output/genxcat dir
case 1 of 
   data_chk(catdir,/string,/scalar):                ; user/app passed via CATDIR=xxx
   sxign_genxcat(0) ne '': catdir=sxign_genxcat(0)  ; predifned via $SSW_SXIGnn_GENXCAT
   file_exist(sxign_sswdb):catdir=sxign_sswdb       ; default $SSWDB/goes/sxigNN
   else: begin 
      box_message,['Catalog output directory not defined..',$
                  'Use CATDIR=xxx, $SSWDB/goes/sxiNN/genxcat', $
                  '-or-',$
                  'specific environmental $SSW_SXIG'+sgoesn+'_GENXCAT']
      return
   endcase 
endcase

t0x=anytim(time0,/ecs)
t1x=anytim(time1,/ecs)

if not keyword_set(cadence_days) then cadence_days=1

tgrid=anytim(timegrid(t0x,reltime(t1x,/days),days=cadence_days),/date_only,/ecs)

for i=0,n_elements(tgrid)-2 do begin 
   sxifiles=sxi_files(tgrid(i),tgrid(i+1),/full_path,$
      /level1,goesn=goesn, nfiles=nfiles,/ngdc,/between)
   if sxifiles(0) ne '' then begin

;     ; read nSXI Headers -> structure vector 
      if debug then stop,'sxifiles,index'
      mreadfits_urls,sxifiles,index,server=sxi_server(),/gateway,/verbose, $
         success=success, status=status
      if not success then begin                        ; at least one problem record
         box_message,'Removing one or more problem records...'
         ssok=where(status,okcnt)
         file_append,concat_dir(catdir,'sxicat_problems.dat'),$
            anytim((index(where(1-status)).date_obs),/ecs)
         if okcnt gt 0 then begin 
            index=temporary(index(ssok))
         endif else delvarx,index                ; all bad
      endif

      if data_chk(index,/struct) then $
;        ssw standaard structure-vector -> catalog
         sswcat=struct2ssw(index)
         ktags='naxis1,naxis2,date_obs,time,mjd,day,crpix1,crpix2,xcen,ycen,cdelt1,' +$
               'crota,img_code,wavelnth,exptime,img_med,img_mean,img_sdev,miss_pix,sat_pix'
         write_genxcat,_extra=_extra,str_subset(sswcat,ktags) ,$
              /day_round,topdir=catdir,/geny,prefix='sxig'+sgoesn+'_',/nelements

   endif else begin 
      box_message,'No files for time range: ' + arr2str(tgrid(i:i+1),' - ')
   endelse
endfor
 
return
end

   
