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
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='*'
datatype = strfilter(vdatatypes, datatype ,delimiter=' ',/string)
addmaster=0
for s=0,n_elements(probe)-1 do begin
sc = 'th'+ probe[s]
relpathnames = file_dailynames(sc+'/l1/sst/',dir='YYYY/',sc+'_l1_sst_','_v01.cdf',trange=trange,addmaster=addmaster)
files = file_retrieve(relpathnames, _extra=my_themis )
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
vns = cdfi.vars.name
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_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_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_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_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_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 , $
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 }
store_data,sc+'_isst_config',data={x:*cache.isst_config_time,y:*cache.isst_config}
store_data,sc+'_esst_config',data={x:*cache.esst_config_time,y:*cache.esst_config}
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 ]
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 ]
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 ]
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 ]
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 ]
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 ]
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'
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
dprint,dlevel=4,'Data File Error: ',name,' ',ctags[wt[i]]
dprint,dlevel=4,/phelp,w
dprint,dlevel=4,/phelp,dt[w]
dprint,dlevel=4,/phelp,time_string(t[w])
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
tn_post_proc = tnames()
if ~array_equal(tn_pre_proc, '') then begin
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
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
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']
vL2datatypes= strjoin(['psif_'+l2_datatype_root_list,'psef_'+ 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
if ~undefined(tplotnames) then begin
en_eflux_vars = strfilter(tplotnames,'*en_eflux*')
options,en_eflux_vars,/default,/zlog,/ylog
thm_new_units, en_eflux_vars, units_in = 'eV/(cm^2-sec-sr-eV)'
thm_new_coords,en_eflux_vars, coords_in = 'DSL'
thm_fix_spec_units, en_eflux_vars
flux_vars = strfilter(tplotnames,'*_flux*')
options,flux_vars,/def,/ystyle
thm_new_coords,flux_vars, coords_in = 'DSL'
den_vars = strfilter(tplotnames,'*density*')
options,den_vars,/default,/ylog,/ystyle
thm_new_units, den_vars, units_in = '1/cm^3'
t3_vars = strfilter(tplotnames,'*t3*')
options,t3_vars,/default,/ylog,colors='bgr',/ystyle
thm_new_units, t3_vars, units_in = 'eV'
thm_new_coords,strfilter(tplotnames,'*_t3*'), coords_in = 'DSL'
thm_new_coords,strfilter(tplotnames,'*_magt3*'), coords_in = 'FA'
tens_vars = strfilter(tplotnames,'*tens*')
options,tens_vars,/default,colors='bgrmcy',/ystyle
thm_new_coords,tens_vars, coords_in = 'DSL'
vel_vars = strfilter(tplotnames,'*velocity*')
options,vel_vars,/defaults,/ystyle
thm_new_units, vel_vars, units_in = 'km/s'
thm_new_coords, strfilter(tplotnames,'*_velocity_dsl*'), coords_in = 'DSL'
thm_new_coords, strfilter(tplotnames,'*_velocity_gse*'), coords_in = 'GSE'
thm_new_coords, strfilter(tplotnames,'*_velocity_gsm*'), coords_in = 'GSM'
mag_names = strfilter(tplotnames,'*_magf*')
thm_new_units,mag_names, units_in ='nT'
thm_new_coords,mag_names, coords_in = 'DSL'
scpot_names = strfilter(tplotnames,'*_sc_pot*')
thm_new_units,scpot_names, units_in ='V'
symm_ang_names = strfilter(tplotnames,'*_symm_ange*')
thm_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
if size(/type,datatype0) gt 0 then datatype = datatype0
vb = keyword_set(verbose) ? verbose : 0
vb = vb > my_themis.verbose
dprint,dlevel=4,verbose=vb,'Start; $Id: thm_load_sst.pro 15224 2014-05-23 19:38:29Z aaflores $'
vprobes = ['a','b','c','d','e']
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=vprobes
probe=thm_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
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
if keyword_set(msg_probe) then dprint, dlevel=1, msg_probe
end