;+
;Procedure: THM_LOAD_ESA
;
;Purpose:  Loads THEMIS ESA data
;
;keywords:
;  probe = Probe name. The default is 'all', i.e., load all available probes.
;          This can be an array of strings, e.g., ['a', 'b'] or a
;          single string delimited by spaces, e.g., 'a b'
;  datatype = The type of data to be loaded, for this case, there is only
;          one option, the default value of 'mom', so this is a
;          placeholder should there be more that one data type. 'all'
;          can be passed in also, to get all variables.
;  TRANGE= (Optional) Time range of interest  (2 element array), if
;          this is not set, the default is to prompt the user. Note
;          that if the input time range is not a full day, a full
;          day's data is loaded
;  level = the level of the data, the default is 'l2', or level-2
;          data. A string (e.g., 'l2') or an integer can be used. 'all'
;          can be passed in also, to get all levels.
;  CDF_DATA: named variable in which to return cdf data structure: only works
;          for a single spacecraft and datafile name.
;  VARNAMES: names of variables to load from cdf: default is all.
;  /GET_SUPPORT_DATA: load support_data variables as well as data variables
;                      into tplot variables.
;  /DOWNLOADONLY: download file but don't read it.
;  /valid_names, if set, then this routine will return the valid probe, datatype
;          and/or level options in named variables supplied as
;          arguments to the corresponding keywords.
;  files   named varible for output of pathnames of local files.
;  /VERBOSE  set to output some useful info
;Example:
;   thg_load_esa,/get_suppport_data,probe=['a', 'b']
;Notes:
; Written by Davin Larson, Dec 2006
; Updated to use thm_load_xxx by KRB, 2007-2-5
; Fixed bug in valid_names block, removed references to sst in coments
; jmm, 21-feb-2007
; Fixed bugs, added ylim, zlim calls for spec data, as in thm_load_sst
;
; $LastChangedBy: kenb-mac $
; $LastChangedDate: 2007-02-08 09:48:04 -0800 (Thu, 08 Feb 2007) $
; $LastChangedRevision: 328 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/thmsoc/trunk/idl/themis/spacecraft/particles/thm_load_esa.pro $
;-

;-----------------------------------------------------------------------------------------------------------------------

; esa-specific helper function
; to return relative path names to files in the data tree.
; this routine maps datatypes to file type.

function thm_load_esa_relpath, sname=probe, filetype=ft, $
                               level=lvl, trange=trange, $
                               addmaster=addmaster, _extra=_extra

  relpath = 'th'+probe+'/'+lvl+'/'+ ft+'/'
  prefix = 'th'+probe+'_'+lvl+'_'+ft+'_'
  dir = 'YYYY/'
  ending = '_v01.cdf'

  return, file_dailynames(relpath, prefix, ending, dir=dir, $
                          trange = trange,addmaster=addmaster)
end

;-----------------------------------------------------------------------------------------------------------------------

pro thm_load_esa_post, sname=probe, datatype=dt, level=lvl, $
                       tplotnames=tplotnames, $
                       suffix=suffix, proc_type=proc_type, coord=coord, $
                       delete_support_data=delete_support_data, _extra=_extra

  if tplotnames(0) eq '' then return 
  
  ;; add DLIMIT tags to data quantities
  for l=0, n_elements(tplotnames)-1 do begin
     tplot_var = tplotnames[l]
         
     get_data, tplot_var, data=d_str, limit=l_str, dlimit=dl_str
     
     isit_density=total(strmatch(strsplit(tplot_var,'_',/extract), 'density'))
     isit_velocity=total(strmatch(strsplit(tplot_var,'_',/extract), 'velocity'))
     isit_t3=total(strmatch(strsplit(tplot_var,'_',/extract), 't3')) 
     isit_eflux=total(strmatch(strsplit(tplot_var,'_',/extract), 'eflux'))
     isit_yaxis=total(strmatch(strsplit(tplot_var,'_',/extract), 'yaxis'))
     
     case 1 of 
       isit_density 	: begin
       			  unit=dl_str.cdf.vatt.units
           		  data_att = { data_type:'calibrated', unit:unit }
           		  str_element, dl_str, 'data_att', data_att, /add
           		  str_element, dl_str, 'ylog', 1, /add
       			  end
       isit_velocity	: begin
       			  unit=dl_str.cdf.vatt.units
           		  coord_sys=strlowcase(strmid(dl_str.cdf.vatt.coordinate_system,0,3))
           		  data_att = { data_type:'calibrated', coord_sys:coord_sys, unit:unit }
           		  str_element, dl_str, 'data_att', data_att, /add
           		  str_element, dl_str, 'colors', [2,4,6], /add
       			  end
       isit_t3  	: begin
       			  unit=dl_str.cdf.vatt.units
           		  data_att = { data_type:'calibrated', unit:unit }
           		  str_element, dl_str, 'data_att', data_att, /add
           		  str_element, dl_str, 'colors', [2,4,6], /add
       			  end
       isit_eflux	: begin
       			  unit=dl_str.cdf.vatt.units
           		  data_att = { data_type:'calibrated', unit:unit }
           		  str_element, dl_str, 'data_att', data_att, /add
           		  str_element, dl_str, 'ylog', 1, /add
           		  str_element, dl_str, 'zlog', 1, /add
       			  end
       else:	
     endcase
     
     store_data, tplot_var, data=d_str, limit=l_str, dlimit=dl_str
     
   
  endfor

 
end

;-----------------------------------------------------------------------------------------------------------------------


pro thm_load_esa,probe=probe, datatype=datatype, trange=trange, $
                 level=level, verbose=verbose, downloadonly=downloadonly, $
                 relpathnames_all=relpathnames_all, no_download=no_download, $
                 cdf_data=cdf_data,get_support_data=get_support_data, $
                 varnames=varnames, valid_names = valid_names, files=files, $
                 suffix=suffix, type=type, coord=coord, varformat=varformat, $
                 progobj=progobj

  if arg_present(relpathnames_all) then begin
     downloadonly=1
     no_download=1
  end
  if not keyword_set(suffix) then suffix = ''

  vlevels = 'l1 l2'
  deflevel = 'l2'
  lvl = thm_valid_input(level,'Level',vinputs=vlevels,definput=deflevel,$
                        format="('l', I1)", verbose=0)
  if lvl eq '' then return                            

  if lvl eq 'l1' then begin
     print, 'This routine does not currently load l1 data.'
     print, 'There is no l1 ESA data it is loaded and calibrated from l0.'
     print, 'See ESA crib sheet for appropriate l0/packet routines.'
     return
  endif
  
  vcoord=['dsl','gse','gsm','all']
  if keyword_set(coord) then begin
    coordkey=0
    if size(coord,/dimen) eq 0 then coord=strsplit(coord,' ',/extract)
    for i=0,2 do if total(strmatch(strtrim(strlowcase(coord),2),vcoord(i))) gt 0 then coordkey=coordkey+(i+2)
    if total(strmatch(strtrim(strlowcase(coord),2),vcoord(3))) gt 0 then coordkey=9
    case coordkey of
      0 : begin
          print, "Invalid coordinate keyword.  Valid coordinates: 'dsl gse gsm all'"
          return
          end
      2 : vL2datatypes='peif_density peif_velocity_dsl peif_t3 peif_en_eflux peef_density peef_velocity_dsl peef_t3 peef_en_eflux'
      3 : vL2datatypes='peif_density peif_velocity_gse peif_t3 peif_en_eflux peef_density peef_velocity_gse peef_t3 peef_en_eflux'
      4 : vL2datatypes='peif_density peif_velocity_gsm peif_t3 peif_en_eflux peef_density peef_velocity_gsm peef_t3 peef_en_eflux'
      5 : vL2datatypes='peif_density peif_velocity_dsl peif_velocity_gse peif_t3 peif_en_eflux peef_density peef_velocity_dsl peef_velocity_gse peef_t3 peef_en_eflux'
      6 : vL2datatypes='peif_density peif_velocity_dsl peif_velocity_gsm peif_t3 peif_en_eflux peef_density peef_velocity_dsl peef_velocity_gsm peef_t3 peef_en_eflux'
      7 : vL2datatypes='peif_density peif_velocity_gse peif_velocity_gsm peif_t3 peif_en_eflux peef_density peef_velocity_gse peef_velocity_gsm peef_t3 peef_en_eflux'
      else : vL2datatypes='peif_density peif_velocity_dsl peif_velocity_gse peif_velocity_gsm peif_t3 peif_en_eflux peef_density peef_velocity_dsl peef_velocity_gse peef_velocity_gsm peef_t3 peef_en_eflux'
    endcase
  endif else vL2datatypes='peif_density peif_velocity_dsl peif_velocity_gse peif_velocity_gsm peif_t3 peif_en_eflux peef_density peef_velocity_dsl peef_velocity_gse peef_velocity_gsm peef_t3 peef_en_eflux'
  

  thm_load_xxx,sname=probe, datatype=datatype, trange=trange, $
               level=level, verbose=verbose, downloadonly=downloadonly, $
               relpathnames_all=relpathnames_all, no_download=no_download, $
               cdf_data=cdf_data,get_cdf_data=arg_present(cdf_data), $
               get_support_data=get_support_data, $
               varnames=varnames, valid_names = valid_names, files=files, $
               vsnames = 'a b c d e', $
               type_sname = 'probe', $
               vdatatypes = 'esa', $
               file_vdatatypes = 'esa', $
               vlevels = vlevels, $
               vL2datatypes = vL2datatypes, $
               vL2coord = '', $
               deflevel = deflevel, $
               version = 'v01', $
               relpath_funct = 'thm_load_esa_relpath', $
               post_process_proc='thm_load_esa_post', $
               delete_support_data=delete_support_data, $
               proc_type=type, coord=coord, suffix=suffix, $
               progobj=progobj,$
               varformat=varformat
               
end