; the purpose of this routine is to deconvolve the data and make level 2 CDF files.
; It assumes that sep?_svy has already been loaded

pro mvn_sep_make_l2_files,pathnames=pathnames,trange=trange, filename = filename

  common mav_apid_sep_handler_com , sep_all_ptrs,  sep1_hkp,sep2_hkp,sep1_svy,sep2_svy,sep1_arc,sep2_arc,sep1_noise,sep2_noise ,sep1_memdump,sep2_memdump

  trange = timerange(trange)
;res = 86400.d
;days =  round( time_double(trange )/res)
;ndays = days[1]-days[0]
;tr = days * res
 
  ;dprint,/phelp,mapids
  ;     mapids=mapnums   ; do only most common one  
  
  ndays=1
  if not keyword_set(pathname) then pathname =  'maven/pfp/sep/l1/sav/YYYY/MM/mvn_sep_l1_YYYYMMDD_$NDAY.sav' 
  pn = str_sub(pathname, '$NDAY', strtrim(ndays,2) +'day')
  files = mvn_pfp_file_retrieve(pn,/daily,trange=trange,source=source,verbose=verbose,/valid_only,no_update=0,last_version=0)
  
  mvn_sep_handler,/clear
for i=0,n_elements(files)-1 do begin

  undefine, s1_hkp,s1_svy,s1_arc,s1_nse
  undefine, s2_hkp,s2_svy,s2_arc,s2_nse
  restore,verbose=verbose,filename=files[i]
  mav_gse_structure_append  ,sep1_hkp  , s1_hkp
  mav_gse_structure_append  ,sep1_svy  , s1_svy
  mav_gse_structure_append  ,sep1_arc  , s1_arc
  mav_gse_structure_append  ,sep1_noise, s1_nse
  mav_gse_structure_append  ,sep2_hkp  , s2_hkp
  mav_gse_structure_append  ,sep2_svy  , s2_svy
  mav_gse_structure_append  ,sep2_arc  , s2_arc
  mav_gse_structure_append  ,sep2_noise, s2_nse
  mav_gse_structure_append  ,mag1_hkp  , m1_hkp
  mav_gse_structure_append  ,mag2_hkp  , m2_hkp
  
endfor
  
  
  sepn = [1,2]
  for J = 0, 1 do begin
  data_str = 'mvn_sep'+roundst(sepn[j]) +'_svy'
  mvn_sep_extract_data,data_str,rawdat,trange=trange,num=num
  if keyword_set(rawdat) eq 0 then return
  mapnums = byte(median(rawdat.mapid))    ;  get most common mapnum
  mapids = where( histogram(rawdat.mapid) ne 0 ,n_mapids)   ; all mapids found
 
  for i = 0,n_elements(mapids)-1 do begin
     mapnum = mapids[i]
     if mapnum eq 0 then continue
     tname = 'mvn_sep'+strtrim(sepn[J],2)
     mapname = mvn_sep_mapnum_to_mapname(mapnum)
     wt = where(rawdat.mapid eq mapnum or finite(rawdat.time) eq 0,nt)   ; include gaps
     t = rawdat[wt].time
     dt = rawdat[wt].duration
     att_state = rawdat[wt].ATT
     ;geom = geoms[att_state]
     all_counts = transpose(rawdat[wt].data)
     value = findgen(256)
     bmaps = mvn_sep_lut2map(mapnum=mapnum)
     mvn_sep_det_cal,bmaps,sepn[J],units=1    
     level_2_now = mvn_sep_deconvolve_data(bmaps, rawdat[wt], nofit =1, /no_plot, $
                                           output_electron_energies = l2_electron_energies, $
                                           output_ion_energies = l2_ion_energies)
     if i eq 0 then level_2 = level_2_now else level_2 = [level_2, level_2_now]
   endfor
   if J eq 0 then sep1_l2= level_2 else sep2_l2 = level_2
   endfor
   
   sep_dataa = {time:sep1_l2[0].TIME, MET: sep1_l2[0].met, ET: sep1_l2[0].et,Delta_time:0, atten_state:fltarr(4), $
                         electron_energy_flux:replicate(1.0, 4)#$
                         reform (sep1_l2[0].electron_eflux_front), $
                         ion_energy_flux: replicate (1.0, 4)#reform (sep1_l2[0].ion_eflux_front), $
                         look_directions: fltarr(4,3)}
; now combine SEP 1 and SEP 2
   nt_sep1 = n_elements (sep1_l2.time)
   nt_sep2 = n_elements (sep2_l2.time)
   if nt_sep1 ne nt_sep2 then stop
   sep_data = replicate (sep_dataa,nt_sep1)
            
; add the look directions, 
   look_directions = mvn_sep_look_directions(sep1_l2.time, coordinate_frame ='MAVEN_SSO',/load)
   
            for J = 0, nt_sep1-1 do begin
                sep_data[j].time= sep1_l2[j].time
                sep_data[j].MET = sep1_l2[j].MET
                
                sep_data[j].Delta_time = sep1_l2[J].delta_time
                sep_data[J].atten_state[0:1] = [1,1]#sep1_l2[J].atten_state
                sep_data[J].atten_state[2:3] = [1,1]#sep2_l2[J].atten_state
                sep_data[j].electron_energy_flux[0,*] = sep1_l2[J].electron_eflux_front
                sep_data[j].electron_energy_flux[1,*] = sep1_l2[J].electron_eflux_back
                sep_data[j].electron_energy_flux[2,*] = sep2_l2[J].electron_eflux_front
                sep_data[j].electron_energy_flux[3,*] = sep2_l2[J].electron_eflux_back
                sep_data[j].ion_energy_flux[0,*] = sep1_l2[J].ion_eflux_front
                sep_data[j].ion_energy_flux[1,*] = sep1_l2[J].ion_eflux_back
                sep_data[j].ion_energy_flux[2,*] = sep2_l2[J].ion_eflux_front
                sep_data[j].ion_energy_flux[3,*] = sep2_l2[J].ion_eflux_back
                                ; NOTE: this is a placeholder for the look directions!!
                sep_data[j].look_directions = look_directions [J,*,*]
            endfor  
            sep_info = {electron_energy: l2_electron_energies, ion_energy: l2_ion_energies}
; NOW make             the CDF FILES
            ;file = '~/work/maven/data_analysis/mvn_sep_l2_spec_20140326_v002_r001.cdf'
             if not keyword_set(pathname) then pathname =  'maven/pfp/sep/l2/sav/YYYY/MM/mvn_sep_l2_YYYYMMDD_$NDAY.sav' 
             pn = str_sub(pathname, '$NDAY', strtrim(ndays,2)+'day')
             if not keyword_set (filename) then filename = $
               mvn_pfp_file_retrieve(pn,/daily,trange=trange[0],source=source,verbose=verbose,/create_dir)
            ;filename = '~/work/maven/data_analysis/mvn_sep_l2_spec_20140512_v002_r001.cdf'
            mvn_sep_make_l2_cdf, sep_data, sep_info,file = filename
   
end