;----------------------
;Procedure: THM_LOAD_SST
;
;Purpose:  Loads THEMIS SST 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 'sst', 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 'l1', or level-1
;          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
;  /NO_TIME_CLIP: Disables time clipping, which is the default
;Example:
;   thg_load_sst,/get_suppport_data,probe=['a', 'b']
;Notes:
; Written by Davin Larson, Dec 2006
; Updated to use thm_load_xxx by KRB, 2007-2-5
; Update removed to not use thm_load_xxx by DEL
;
; $LastChangedBy: jimm $
; $LastChangedDate: 2018-11-29 10:02:16 -0800 (Thu, 29 Nov 2018) $
; $LastChangedRevision: 26182 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_4_1/projects/themis/spacecraft/particles/SST/thm_load_sst.pro $
;-


;change Matt D. 6/29
;----------------------

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

  compile_opt idl2,hidden

  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

;abstacting L1, to get rid of an annoying "goto"
pro thm_load_sst_l1,datatype=datatype,vdatatypes=vdatatypes,probe=probe,$
  trange=trange,my_themis=my_themis,downloadonly=downloadonly,verbose=vb,$
  use_eclipse_corrections=use_eclipse_corrections,suffix=suffix,no_time_clip=no_time_clip,$
  files=files_out


  compile_opt idl2,hidden
  
  tn_pre_proc = tnames()
  
  if not keyword_set(datatype) then datatype='*'
  if not keyword_set(suffix) then suffix=''
  
  datatype = strfilter(vdatatypes, datatype ,delimiter=' ',/string)
 
  addmaster=0
  
  for s=0,n_elements(probe)-1 do begin
    sc = 'th'+ probe[s]
    
    ;     format = sc+'l1/sst/YYYY/'+sc+'_l1_sst_YYYYMMDD_v01.cdf'   ; Won't work! for sst
    relpathnames = file_dailynames(sc+'/l1/sst/',dir='YYYY/',sc+'_l1_sst_','_v01.cdf',trange=trange,addmaster=addmaster)
    files = spd_download(remote_file=relpathnames, _extra=my_themis ) ;, nowait=downloadonly)
    
    if keyword_set(files) then begin
      files_out=array_concat(files,files_out)
    endif
    
    if keyword_set(downloadonly) or my_themis.downloadonly then continue
    
    cdfi = cdf_load_vars(files,/all,verbose=vb)
    if not keyword_set(cdfi) then begin
      continue
    endif
    
    cdf_data=cdfi
    
    ;     name = sc+'_sst_raw_data'
    ;     data_cache,name,data,/set,/no_copy
    vns = cdfi.vars.name
    
    ;     distdat = {  $
    ;        data:ptr_new()       ,$
    ;        time:ptr_new()    ,$
    ;        cnfg:ptr_new()    ,$
    ;        emode: ptr_new()    ,$
    ;        amode: ptr_new()    $
    ;     }

    cache = {  $
      project_name:    ''     , $
      data_name:  'SST data'  , $
      sc_name:      probe[s]    , $
      sif_064_time  : cdfi.vars[where(vns eq sc+'_sif_064_time')].dataptr   , $
      sif_064_cnfg  : cdfi.vars[where(vns eq sc+'_sif_064_config')].dataptr   , $
      sif_064_nspins: cdfi.vars[where(vns eq sc+'_sif_064_nspins')].dataptr   , $
      sif_064_atten : cdfi.vars[where(vns eq sc+'_sif_064_atten')].dataptr   , $
      ;     sif_064_hed   : cdfi.vars[where(vns eq sc+'_sif_064_hed')].dataptr   , $
      sif_064_data  : cdfi.vars[where(vns eq sc+'_sif_064')].dataptr  , $
      sif_064_edphi : ptr_new(), $
      
      sef_064_time  : cdfi.vars[where(vns eq sc+'_sef_064_time')].dataptr  , $
      sef_064_cnfg  : cdfi.vars[where(vns eq sc+'_sef_064_config')].dataptr  , $
      sef_064_nspins: cdfi.vars[where(vns eq sc+'_sef_064_nspins')].dataptr   , $
      sef_064_atten : cdfi.vars[where(vns eq sc+'_sef_064_atten')].dataptr   , $
      ;     sef_064_hed   : cdfi.vars[where(vns eq sc+'_sef_064_hed')].dataptr   , $
      sef_064_data  : cdfi.vars[where(vns eq sc+'_sef_064')].dataptr  , $
      sef_064_edphi : ptr_new(), $
      
      seb_064_time  : cdfi.vars[where(vns eq sc+'_seb_064_time')].dataptr  , $
      seb_064_cnfg  : cdfi.vars[where(vns eq sc+'_seb_064_config')].dataptr  , $
      seb_064_nspins: cdfi.vars[where(vns eq sc+'_seb_064_nspins')].dataptr   , $
      seb_064_atten : cdfi.vars[where(vns eq sc+'_seb_064_atten')].dataptr   , $
      ;     seb_064_hed   : cdfi.vars[where(vns eq sc+'_seb_064_hed')].dataptr   , $
      seb_064_data  : cdfi.vars[where(vns eq sc+'_seb_064')].dataptr  , $
      seb_064_edphi : ptr_new(), $
      
      sir_001_time  : cdfi.vars[where(vns eq sc+'_sir_001_time')].dataptr  , $
      sir_001_cnfg  : cdfi.vars[where(vns eq sc+'_sir_001_config')].dataptr  , $
      sir_001_nspins: cdfi.vars[where(vns eq sc+'_sir_001_nspins')].dataptr   , $
      sir_001_atten : cdfi.vars[where(vns eq sc+'_sir_001_atten')].dataptr   , $
      ;     sir_001_hed   : cdfi.vars[where(vns eq sc+'_sir_001_hed')].dataptr   , $
      sir_001_data  : cdfi.vars[where(vns eq sc+'_sir_001')].dataptr  , $
      sir_001_edphi : ptr_new(), $
      
      ser_001_time  : cdfi.vars[where(vns eq sc+'_ser_001_time')].dataptr  , $
      ser_001_cnfg  : cdfi.vars[where(vns eq sc+'_ser_001_config')].dataptr  , $
      ser_001_nspins: cdfi.vars[where(vns eq sc+'_ser_001_nspins')].dataptr   , $
      ser_001_atten : cdfi.vars[where(vns eq sc+'_ser_001_atten')].dataptr   , $
      ;     ser_001_hed   : cdfi.vars[where(vns eq sc+'_ser_001_hed')].dataptr   , $
      ser_001_data  : cdfi.vars[where(vns eq sc+'_ser_001')].dataptr  , $
      ser_001_edphi : ptr_new(), $
      
      sir_006_time  : cdfi.vars[where(vns eq sc+'_sir_006_time')].dataptr  , $
      sir_006_cnfg  : cdfi.vars[where(vns eq sc+'_sir_006_config')].dataptr  , $
      sir_006_nspins: cdfi.vars[where(vns eq sc+'_sir_006_nspins')].dataptr   , $
      sir_006_atten : cdfi.vars[where(vns eq sc+'_sir_006_atten')].dataptr   , $
      sir_006_data  : cdfi.vars[where(vns eq sc+'_sir_006')].dataptr  , $
      sir_006_edphi : ptr_new(), $
      
      ser_006_time  : cdfi.vars[where(vns eq sc+'_ser_006_time')].dataptr  , $
      ser_006_cnfg  : cdfi.vars[where(vns eq sc+'_ser_006_config')].dataptr  , $
      ser_006_nspins: cdfi.vars[where(vns eq sc+'_ser_006_nspins')].dataptr   , $
      ser_006_atten : cdfi.vars[where(vns eq sc+'_ser_006_atten')].dataptr   , $
      ser_006_data  : cdfi.vars[where(vns eq sc+'_ser_006')].dataptr  , $
      ser_006_edphi  : ptr_new(), $
      
      isst_config  : cdfi.vars[where(vns eq sc+'_isst_config')].dataptr  , $
      isst_config_time  : cdfi.vars[where(vns eq sc+'_isst_config_time')].dataptr  , $
      esst_config  : cdfi.vars[where(vns eq sc+'_esst_config')].dataptr  , $
      esst_config_time  : cdfi.vars[where(vns eq sc+'_esst_config_time')].dataptr  , $
      
      sst_atten_time : cdfi.vars[where(vns eq sc+'_sst_atten_time')].dataptr  , $
      sst_atten : cdfi.vars[where(vns eq sc+'_sst_atten')].dataptr  , $

      sir_mix_time  : ptr_new() , $
      sir_mix_index : ptr_new() , $
      sir_mix_mode  : ptr_new() , $
      ser_mix_time  : ptr_new() , $
      ser_mix_index : ptr_new() , $
      ser_mix_mode  : ptr_new() , $
      
      valid : 1 }
      
    If(ptr_valid(cache.isst_config_time) && ptr_valid(cache.isst_config)) Then $
       store_data,sc+'_isst_config' +suffix[0],data={x:*cache.isst_config_time,y:*cache.isst_config}
    If(ptr_valid(cache.esst_config_time) && ptr_valid(cache.esst_config)) Then $
       store_data,sc+'_esst_config' +suffix[0],data={x:*cache.esst_config_time,y:*cache.esst_config}

    If(ptr_valid(cache.sst_atten_time) && ptr_valid(cache.sst_atten)) Then $
       store_data,sc+'_sst_atten' +suffix[0],data={x:*cache.sst_atten_time,y:*cache.sst_atten}, $
                  dlimit={tplot_routine:'bitplot'}
    
    if ptr_valid(cache.sir_006_time) && ptr_valid(cache.sir_001_time) then begin
    
      sir_mix_time  = [ *cache.sir_006_time, *cache.sir_001_time ] ; this can easily fail!
      sir_mix_index = [lindgen(n_elements(*cache.sir_006_time)), lindgen(n_elements(*cache.sir_001_time)) ]
      sir_mix_mode  = [replicate(0,n_elements(*cache.sir_006_time)), replicate(1,n_elements(*cache.sir_001_time)) ]
      
    endif else if ptr_valid(cache.sir_001_time) then begin
    
      sir_mix_time  = [ *cache.sir_001_time ] ; this can easily fail!
      sir_mix_index = [ lindgen(n_elements(*cache.sir_001_time)) ]
      sir_mix_mode  = [ replicate(1,n_elements(*cache.sir_001_time)) ]
      
    endif else if ptr_valid(cache.sir_006_time) then begin
    
      sir_mix_time  = [ *cache.sir_006_time ] ; this can easily fail!
      sir_mix_index = [ lindgen(n_elements(*cache.sir_006_time)) ]
      sir_mix_mode  = [ replicate(1,n_elements(*cache.sir_006_time)) ]
      
    endif else begin
    
      dprint,dlevel=0,'No valid ion data in interval'
      return
      
    endelse
    
    srt = sort(sir_mix_time)
    cache.sir_mix_time  = ptr_new( sir_mix_time[srt] )
    cache.sir_mix_index = ptr_new( sir_mix_index[srt] )
    cache.sir_mix_mode  = ptr_new( sir_mix_mode[srt] )
    
    if ptr_valid(cache.ser_006_time) && ptr_valid(cache.ser_001_time) then begin
    
      ser_mix_time  = [ *cache.ser_006_time, *cache.ser_001_time ] ; this can easily fail!
      ser_mix_index = [lindgen(n_elements(*cache.ser_006_time)), lindgen(n_elements(*cache.ser_001_time)) ]
      ser_mix_mode  = [replicate(0,n_elements(*cache.ser_006_time)), replicate(1,n_elements(*cache.ser_001_time)) ]
      
    endif else if ptr_valid(cache.ser_001_time) then begin
    
      ser_mix_time  = [*cache.ser_001_time ] ; this can easily fail!
      ser_mix_index = [lindgen(n_elements(*cache.ser_001_time)) ]
      ser_mix_mode  = [replicate(1,n_elements(*cache.ser_001_time)) ]
      
    endif else if ptr_valid(cache.ser_006_time) then begin
    
      ser_mix_time  = [*cache.ser_006_time ] ; this can easily fail!
      ser_mix_index = [lindgen(n_elements(*cache.ser_006_time)) ]
      ser_mix_mode  = [replicate(1,n_elements(*cache.ser_006_time)) ]
      
    endif else begin
    
      dprint,dlevel=0,'No valid ion data in interval'
      return
      
    endelse
    
    srt = sort(ser_mix_time)
    cache.ser_mix_time  = ptr_new( ser_mix_time[srt] )
    cache.ser_mix_index = ptr_new( ser_mix_index[srt] )
    cache.ser_mix_mode  = ptr_new( ser_mix_mode[srt] )
    
    
    ptrs = ptr_extract(cdfi,except=ptr_extract(cache))
    ptr_free,ptrs
    name = sc+'_sst_raw_data'
    
    ; Check for timing problems:
    ctags = tag_names(cache)
    wt = strfilter(ctags,'*TIME',count=c,/index)
    for i=0,c-1 do begin
      if ptr_valid( cache.(wt[i]) ) then begin
        t = *( cache.(wt[i]) )
        dt = t-shift(t,1)
        If(n_elements(dt) Gt 1) Then dt[0] = dt[1]
        w = where(dt le 0,nw)
        if nw gt 0 then begin
          ;                beep
          ;2012-July  raised debug level, does not appear necessary
          dprint,dlevel=4,'Data File Error: ',name,'  ',ctags[wt[i]]
          dprint,dlevel=4,/phelp,w
          dprint,dlevel=4,/phelp,dt[w]  ;,varname='dt'
          dprint,dlevel=4,/phelp,time_string(t[w])  ;,varname='time'
          ;                wait,1.             ;bp
        endif
      endif
    endfor
    
    thm_sst_add_spindata, cache, trange=trange, use_eclipse_corrections=use_eclipse_corrections
    
    thm_sst_set_trange, cache, trange=trange, use_eclipse_corrections=use_eclipse_corrections
    
    data_cache,name,cache,/set,/no_copy
    
    thm_sst_to_tplot,probe=probe[s], suffix=suffix
    
    ; make sure tplot_vars created in post_procs get added to list
    tn_post_proc = tnames()
    
    if ~array_equal(tn_pre_proc, '') then begin
    
      ; make ssl_set_intersection doesn't get scalar inputs
      if n_elements(tn_pre_proc) eq 1 then tn_pre_proc=[tn_pre_proc]
      if n_elements(tn_post_proc) eq 1 then tn_post_proc=[tn_post_proc]
      
      post_proc_names = ssl_set_complement(tn_pre_proc, tn_post_proc)
      if size(post_proc_names, /type) eq 7 then tplotnames = post_proc_names
    endif else tplotnames = tn_post_proc
    ; clip data to requested trange
    If(~keyword_set(no_time_clip)) Then Begin
      If (keyword_set(trange) && n_elements(trange) Eq 2) $
        Then tr = timerange(trange) Else tr = timerange()
      for i = 0, n_elements(tplotnames)-1 do begin
        if tnames(tplotnames[i]) eq '' then continue
        time_clip, tplotnames[i], min(tr), max(tr), /replace, error = tr_err
        if tr_err then del_data, tplotnames[i]
      endfor
    Endif
  endfor
  
  
  return

end

;abstacting L2, to get rid of an annoying "goto"
pro thm_load_sst_l2,relpathnames_all=relpathnames_all,suffix=suffix,level=level,$
  probe=probe,datatype=datatype,trange=trange,verbose=verbose,downloadonly=downloadonly,$
  no_download=no_download,cdf_data=cdf_data,get_support_data=get_support_data,$
  varnames=varnames,valid_names=valid_names,files=files,progobj=progobjs,$
  varformat=varformat,get_cdf_data=get_cdf_data,no_time_clip=no_time_clip

  compile_opt idl2,hidden
  
  if not keyword_set(suffix) then suffix = ''
  
  vlevels_str = 'l1 l2'
  deflevel = 'l2'
  lvl = thm_valid_input(level,'Level',vinputs=vlevels_str,definput=deflevel,$
    format="('l', I1)", verbose=0)
  if lvl eq '' then return
 
  l2_datatype_root_list = ['delta_time','en_eflux','density','avgtemp','vthermal','sc_pot','t3','magt3','ptens','mftens','flux','symm',$
    'symm_ang','magf','velocity_dsl','velocity_gse','velocity_gsm','data_quality']
  vL2datatypes=  strjoin(['psif_'+l2_datatype_root_list,'psef_'+ l2_datatype_root_list, $
     'psib_'+l2_datatype_root_list,'pseb_'+ l2_datatype_root_list],' ')
 
  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=get_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 = 'sst', $
    file_vdatatypes = 'sst', $
    vlevels = vlevels_str, $
    vL2datatypes = vL2datatypes, $
    vL2coord = '', $
    deflevel = deflevel, $
    version = 'v01', $
    relpath_funct = 'thm_load_sst_relpath', $
    suffix=suffix, $
    progobj=progobj,$
    varformat=varformat, no_time_clip = no_time_clip,$
    tplotnames=tplotnames
    
    
  ;set good metadata settings on output variables
  ;
  ;filter list of vars from tplotnames so we don't accidentally mutate settings on other similarly named tplot variables
  
  if ~undefined(tplotnames) then begin
    ;eflux spectra
    en_eflux_vars = strfilter(tplotnames,'*en_eflux*')
    options,en_eflux_vars,/default,/zlog,/ylog
    spd_new_units, en_eflux_vars, units_in = 'eV/(cm^2-sec-sr-eV)'
    spd_new_coords,en_eflux_vars, coords_in = 'DSL'
    thm_fix_spec_units, en_eflux_vars
    
    ;flux vectors
    flux_vars = strfilter(tplotnames,'*_flux*')
    options,flux_vars,/def,/ystyle
    spd_new_coords,flux_vars, coords_in = 'DSL'
    
    ;density
    den_vars = strfilter(tplotnames,'*density*')
    options,den_vars,/default,/ylog,/ystyle
    spd_new_units, den_vars, units_in = '1/cm^3'
    
    ;temperature vectors
    t3_vars =  strfilter(tplotnames,'*t3*')
    options,t3_vars,/default,/ylog,colors='bgr',/ystyle
    spd_new_units, t3_vars, units_in = 'eV'
    
    spd_new_coords,strfilter(tplotnames,'*_t3*'), coords_in = 'DSL'
    spd_new_coords,strfilter(tplotnames,'*_magt3*'), coords_in = 'FA'
    
    ;tensors
    tens_vars = strfilter(tplotnames,'*tens*')
    options,tens_vars,/default,colors='bgrmcy',/ystyle
    spd_new_coords,tens_vars, coords_in = 'DSL'
    
    ;velocity vectors
    vel_vars = strfilter(tplotnames,'*velocity*')
    options,vel_vars,/defaults,/ystyle
    spd_new_units, vel_vars, units_in = 'km/s'
    
    spd_new_coords, strfilter(tplotnames,'*_velocity_dsl*'), coords_in = 'DSL'
    spd_new_coords, strfilter(tplotnames,'*_velocity_gse*'), coords_in = 'GSE'
    spd_new_coords, strfilter(tplotnames,'*_velocity_gsm*'), coords_in = 'GSM'
    
    ;magnetic field support data
    mag_names = strfilter(tplotnames,'*_magf*')
    spd_new_units,mag_names, units_in ='nT'
    spd_new_coords,mag_names, coords_in = 'DSL'
    
    ;spacecraft potential support data
    scpot_names = strfilter(tplotnames,'*_sc_pot*')
    spd_new_units,scpot_names, units_in ='V'
    
    symm_ang_names = strfilter(tplotnames,'*_symm_ange*')
    spd_new_units,scpot_names, units_in ='degrees'

  endif

end

pro thm_load_sst,probe=probematch, datatype=datatype0, trange=trange, $
                 level=level, verbose=verbose, downloadonly=downloadonly, $
                 cdf_data=cdf_data,get_support_data=get_support_data, $
                 varnames=varnames, valid_names = valid_names, files=files, $
                 use_eclipse_corrections=use_eclipse_corrections, $
                 source_options = source_options, $
                 progobj=progobj, varformat=varformat, $
                 suffix = suffix, no_time_clip = no_time_clip

compile_opt idl2

if not keyword_set(source_options) then begin
   thm_init
   source_options = !themis
endif
my_themis = source_options
;my_themis.remote_data_dir += 'qa/'  ; remove this line after files have moved to proper location.

if size(/type,datatype0) gt 0 then datatype = datatype0 ;keep input vars from being altered

vb = keyword_set(verbose) ? verbose : 0
vb = vb > my_themis.verbose
dprint,dlevel=4,verbose=vb,'Start; $Id: thm_load_sst.pro 26182 2018-11-29 18:02:16Z jimm $'

vprobes = ['a','b','c','d','e'];,'f']
vlevels = ['l1','l2']
vdatatypes=['sst']

if keyword_set(valid_names) then begin
    probematch = vprobes
    level = vlevels
    datatype = vdatatypes
    return
endif

if n_elements(probematch) eq 1 then if probematch eq 'f' then vprobes = ['f']

;if not keyword_set(probematch) then probematch='*'
;probe = strfilter(vprobes, probematch ,delimiter=' ',/string)

if not keyword_set(probematch) then probematch=vprobes
probe=ssl_check_valid_name(strtrim(strlowcase(probematch),2),vprobes,/include_all, $
                           invalid=msg_probe, type='probe')

if probe[0] eq '' then begin
  dprint, "Invalid probes selected.  Valid probes: 'a','b','c','d' or 'e'  (ie, probe='a')"
  return
end

;change Matt D. 6/29
;----------------------
vlevels_str='l1 l2'
deflevel='l1'
lvl = thm_valid_input(level,'Level',vinputs=vlevels_str,definput=deflevel,$
                        format="('l', I1)", verbose=0)

  if lvl eq 'l2' then begin 
    
    if arg_present(relpathnames_all) then begin
      downloadonly=1
      no_download=1
    end
    get_cdf_data = arg_present(cdf_data)
    
    thm_load_sst_l2,relpathnames_all=relpathnames_all,suffix=suffix,level=level,$
       probe=probe,datatype=datatype,trange=trange,verbose=verbose,downloadonly=downloadonly,$
       no_download=no_download,cdf_data=cdf_data,get_support_data=get_support_data,$
       varnames=varnames,valid_names=valid_names,files=files,progobj=progobjs,$
       varformat=varformat,get_cdf_data=get_cdf_data
       
  endif else begin
    thm_load_sst_l1,datatype=datatype,vdatatypes=vdatatypes,probe=probe,$
      trange=trange,my_themis=my_themis,downloadonly=downloadonly,verbose=vb,files=files,$
      use_eclipse_corrections=use_eclipse_corrections,suffix=suffix,no_time_clip=no_time_clip
      
  endelse

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

  ;notify user of invalid input
  if keyword_set(msg_probe) then dprint, dlevel=1, msg_probe

end