pro mvn_swe_sc_pot, potential=phi, erange=erange, psmo=psmo, fudge=fudge, $
pans=pans, overlay=overlay, ddd=ddd, abins=abins, dbins=dbins, $
obins=obins, thresh=thresh
compile_opt idl2
@mvn_swe_com
if (size(mvn_swe_engy,/type) ne 8) then begin
print,"No energy data loaded. Use mvn_swe_load_l0 first."
phi = 0
return
endif
if not keyword_set(erange) then erange = [3.,20.]
erange = minmax(float(erange))
if not keyword_set(psmo) then psmo = 1
if not keyword_set(fudge) then fudge = 1.
if keyword_set(ddd) then dflg = 1 else dflg = 0
if not keyword_set(abins) then abins = replicate(1B, 16)
if not keyword_set(dbins) then dbins = replicate(1B, 6)
case n_elements(thresh) of
0 : thresh = [0.05, 0.025, 1.8]
1 : thresh = [float(thresh), 0.025, 1.8]
2 : thresh = [float(thresh), 1.8]
else : thresh = float(thresh[0:2])
endcase
if (dflg) then begin
t = swe_3d.time
npts = n_elements(t)
if (n_elements(obins) ne 96) then obins = reform(abins # dbins, 96)
indx = where(obins eq 1B, ocnt)
onorm = float(ocnt)
obins = replicate(1B, 64) # obins
e = fltarr(64,npts)
f = e
for i=0L,(npts-1L) do begin
ddd = mvn_swe_get3d(t[i], units='eflux')
e[*,i] = ddd.energy[*,0]
f[*,i] = total(ddd.data * obins, 2)/onorm
endfor
endif else begin
old_units = mvn_swe_engy[0].units_name
mvn_swe_convert_units, mvn_swe_engy, 'eflux'
t = mvn_swe_engy.time
npts = n_elements(t)
e = mvn_swe_engy.energy
f = mvn_swe_engy.data
endelse
indx = where(e[*,0] lt 60., n_e)
e = e[indx,*]
f = alog10(f[indx,*])
gndx = round(total(finite(f),1))
gndx = where(gndx eq n_e, npts)
t = t[gndx]
e = e[*,gndx]
f = f[*,gndx]
df = f
d2f = f
for i=0L,(npts-1L) do df[*,i] = deriv(f[*,i])
for i=0L,(npts-1L) do d2f[*,i] = deriv(df[*,i])
n_es = 4*n_e
emax = max(e, dim=1, min=emin)
dloge = (alog10(emax) - alog10(emin))/float(n_es - 1)
ee = 10.^((replicate(1.,n_es) # alog10(emax)) - (findgen(n_es) # dloge))
dfs = fltarr(n_es,npts)
for i=0L,(npts-1L) do dfs[*,i] = interpol(df[*,i],n_es)
d2fs = fltarr(n_es,npts)
for i=0L,(npts-1L) do d2fs[*,i] = interpol(d2f[*,i],n_es)
indx = where((ee[*,0] gt erange[0]) and (ee[*,0] lt erange[1]), n_e)
ee = ee[indx,*]
dfs = dfs[indx,*]
d2fs = d2fs[indx,*]
mvn_swe_shape_par
get_data,'mvn_swe_shape_par',data=par
par = interpol(par.y, par.x, t)
zcross = d2fs*shift(d2fs,1,0)
zcross[0,*] = 1.
phi = replicate(!values.f_nan, npts)
for i=0L,(npts-1L) do begin
indx = where((zcross[*,i] lt 0.) and (dfs[*,i] gt thresh[0]), ncross)
if (ncross gt 0L) then begin
dfsmax = max(dfs[indx,i],k)
d2fsmax = max(d2fs[0L:indx[k],i])
if ((d2fsmax gt thresh[1]) and (par[i] gt thresh[2])) then phi[i] = ee[indx[k],i]
endif
endfor
phi = smooth(phi*fudge,psmo,/nan)
if (not dflg) then begin
mvn_swe_engy[gndx].sc_pot = phi
mvn_swe_convert_units, mvn_swe_engy, old_units
endif else begin
mvn_swe_engy.sc_pot = interpol(phi,t,mvn_swe_engy.time)
endelse
swe_sc_pot = replicate(swe_pot_struct, npts)
swe_sc_pot.time = t
swe_sc_pot.potential = phi
swe_sc_pot.valid = 1
store_data,'df',data={x:t, y:transpose(dfs), v:transpose(ee)}
options,'df','spec',1
ylim,'df',0,30,0
zlim,'df',0,0,0
store_data,'d2f',data={x:t, y:transpose(d2fs), v:transpose(ee)}
options,'d2f','spec',1
ylim,'d2f',0,30,0
zlim,'d2f',0,0,0
pot = {x:t, y:phi}
store_data,'mvn_swe_sc_pot',data=pot
pans = 'mvn_swe_sc_pot'
store_data,'Potential',data=['d2f','mvn_swe_sc_pot']
ylim,'Potential',0,30,0
if keyword_set(overlay) then begin
str_element,pot,'thick',2,/add
str_element,pot,'color',0,/add
str_element,pot,'psym',3,/add
store_data,'swe_pot_overlay',data=pot
store_data,'swe_a4_pot',data=['swe_a4','swe_pot_overlay']
ylim,'swe_a4_pot',3,5000,1
tplot_options, get=opt
i = (where(opt.varnames eq 'swe_a4'))[0]
if (i ne -1) then opt.varnames[i] = 'swe_a4_pot'
i = (where(opt.varnames eq 'swe_a4_pot'))[0]
if (i eq -1) then opt.varnames = [opt.varnames, 'swe_a4_pot']
tplot, opt.varnames
endif
return
end