pro sotsp_l12indexm, t0, t1, l1dirs=l1dirs, $
   save_fits=save_fits, outdir=outdir, scanid=scanid
;+
;   Name: sotsp_l12indexm
;
;   Purpose: SOT/SP reconstrructed STOKES maps -> SSW compliant "INDEX"
; 
;   Input Parameters:
;      t0,t1 - time range 
;   
;   Output Parameters:
;      function returns SSW compliant "index" (or indices) for all L1 data sets
;
;   Keyword Parameters:
;      save_fits - if set, save correpsonding "INDEX,DATA" -> n2D FITS 
;                  (default includes Continuum, Logitudinal, and Transverse FITS files)
;      outdir (implies /save_fits) - output directory for FITS, if not specified, 
;         writes to L1.5 dir if exists, else L1 dir
;
;      l1dirs - in lieu of timerange, user desire L1 subdirectory list
;
;   History:
;       5-Nov-2007 - S.L.Freeland - part of L0->L1 pipeline - usually run on
;                    server but sswidl client may run on one or more local
;                    "l1dirs"
;      20-Apr-2020 - M.DeRosa - version 1.1 - fixed issue with naming level 1
;                    conti,longi,trans,veloc files when date_obs keyword of
;                    first level 1 spectrum in the list does not match
;                    date/time in directory
;      14-Apr-2021 - M.DeRosa - version 1.2 - outdir keyword now puts FITS
;                    files in directories instead of all together in the
;                    specified outdir
;   

version=1.2 ; include in index.HISTORY since derivation of meta-tags may evolve

if n_params() eq 1 then t1=reltime(t1,/day_only)

case 1 of 
  data_chk(l1dirs,/string):         ; user supplied
  else: l1dirs=sotsp_monthdirs(t0)  ; assumes local SOT/SP hierarchy under
endcase

l15dirs=str_replace(l1dirs,'hao','d') ; 
l15dirs=str_replace(l15dirs,'/archive','/archive1')

nind=n_elements(l1dirs)
save=keyword_set(save_fits) or keyword_set(outdir) ; FITS output requested

case 1 of 
  data_chk(outdir,/string): outdirs=outdir+'/'+ssw_strsplit(l1dirs,'/',/tail)
  file_exist(l15dirs(0)): outdirs=l15dirs
  else: outdirs=l1dirs
endcase
retval=''

for i=0,nind-1 do begin 
  box_message,'Proc>> ' + l1dirs(i)
  l1f=file_search(l1dirs(i),'*fits')
  nf=n_elements(l1f)
  if l1f(0) ne '' then  begin    
    mreadfits_header,l1f,indexn
    atime=anytim(average(anytim(indexn.date_obs)),/ccsds)
    axcen=average(indexn.xcen)
    aycen=average(indexn.ycen)
    cdelt1=indexn(0).cdelt2  ; spatial
    stks=file_search(l15dirs(i),'stksim*save')
    if stks(0) eq '' then $
    stks=file_search(l1dirs(i),'*stksim*save') ; check L1 dir if not in L1.5
    if stks(0) ne '' then begin 
      delvarx,stksdat
      stksdat=ssw_save2struct(stks(0))
      conti=gt_tagval(stksdat,/conti)
      nx1=data_chk(stksdat.conti,/nx)
      nx2=data_chk(stksdat.conti,/ny)
      ssw_fake_index,indexn(0).date_obs,findex, xcen=axcen, ycen=aycen,$
        nx=nx1, ny=nx2, cdelt1=cdelt1,index
      retval=indexn(0)
      retval.xcen=findex.xcen
      retval.ycen=findex.ycen
      retval.naxis1=findex.naxis1
      retval.naxis2=findex.naxis2
      retval.date_end=last_nelem(indexn.date_end) 
      retval.cdelt1=findex.cdelt1 
      retval.date_end=last_nelem(indexn.date_end)
      retval.crpix1=0. & retval.crpix2=0.0
      retval.crval1=0. & retval.crval2=0.0
      retval=struct2ssw(retval) ; rationalize crpix/crval using XCEN/YCEN
      update_history,retval,/caller,version=version
      if save then begin 
        stags=str2arr('conti,blapp,btapp,ctrline')
        nmaps=n_elements(stags)
        froots='_' + str2arr('conti,longi,trans,veloc') + '_'
        ;fnames='sotsp'+froots+time2file(retval.date_obs,/sec)+'.fits' ; v1.0
        fnames='sotsp'+froots+str_replace((strsplit(stks(0),'/',/ext))(-1),'_stksimg.save','.fits') ; v1.1
        outname=concat_dir(outdirs(i),fnames)
        cunit=['Continuum Intensity','Longitudinal Flux Density, Mx cm^-2','Transverse Flux Density, Mx cm^-2','Velocity 6301.5A']
        indx=replicate(retval,nmaps)
        indx.cunit1=cunit
        indx.cunit2=cunit
        for u=0, nmaps-1 do begin 
          data=(gt_tagval(stksdat,stags(u)))(*,*,0,0)
          mwritefits,indx(u),data,outfile=outname(u)
        endfor
      endif
    endif else box_message, 'No STKSIMAGES output....??'
  endif else box_message,'No L1 FITS found..??'
endfor

return
end

