Pro thm_esa_dtc4mom, probe = probe, trange = trange, noload = noload, $
use_esa_mode = use_esa_mode, scpot_correct = scpot_correct, $
out_suffix = out_suffix, keep_temp_moments = keep_temp_moments, $
no_despike = no_despike, nsig_despike = nsig_despike, _extra = _extra
dtc_denom = 1
thm_init
vprobes = ['a', 'b', 'c', 'd', 'e']
If(keyword_set(probe)) Then Begin
probes = thm_check_valid_name(strlowcase(probe), vprobes, /include_all)
If(is_string(probes) Eq 0) Then Begin
dprint, 'No valid probe input: '+probe
Return
Endif
Endif Else probes = vprobes
If(keyword_set(trange) && n_elements(trange) Eq 2) $
Then tr = timerange(trange) Else tr = timerange()
If(is_string(use_esa_mode)) Then Begin
mode = strlowcase(strcompress(use_esa_mode, /remove_all))
Endif Else mode = 'f'
Case mode Of
'f': datat = ['peif', 'peef']
'r': datat = ['peir', 'peer']
'b': datat = ['peib', 'peeb']
Else: Begin
dprint, "Please use 'f', 'r', or 'b' for mode, Setting mode to 'f'"
datat = ['peif', 'peef']
End
Endcase
If(n_elements(trange) Eq 2) Then tr0 = time_double(trange) $
Else tr0 = timerange()
timespan, tr0[0], tr0[1]-tr0[0], /seconds
If(keyword_set(out_suffix)) Then osfx = out_suffix Else osfx = ''
ii = ['peim', 'peem']
vv = ['density', 'flux', 'mftens', 'eflux', 'velocity', 'ptens', 'ptot']
np = n_elements(probes)
For j = 0, np-1 Do Begin
sc = probes[j] & thx = 'th'+sc
have_i_data = thm_part_check_trange(sc, datat[0], tr0)
have_e_data = thm_part_check_trange(sc, datat[1], tr0)
If(~keyword_set(noload)) Then Begin
If(have_i_data Eq 0) Then thm_part_load, probe = sc, trange = tr0, datatype = datat[0], $
suffix = '_temp4dtc'
If(have_e_data Eq 0) Then thm_part_load, probe = sc, trange = tr0, datatype = datat[1], $
suffix = '_temp4dtc'
Endif
If(keyword_set(scpot_correct)) Then Begin
thm_load_esa_pot, sc = sc, efi_datatype = 'mom'
scpot_suffix = '_esa_pot'
Endif Else scpot_suffix = ''
For i = 0, 1 Do Begin
thm_part_products, probe = sc, datatype = datat[i], /zero_dead_time, $
scpot_suffix = scpot_suffix, suffix = '_temp4dtc_0', $
outputs = 'moments'
get_data, thx+'_'+datat[i]+'_ptens_temp4dtc_0', data = ptd, dlimits = dl
If(is_struct(ptd)) Then Begin
ptot = total(ptd.y[*, 0:2], 2)/3.0
store_data, thx+'_'+datat[i]+'_ptot_temp4dtc_0', data = {x:ptd.x, y:ptot}, $
dlimits = dl
Endif
Endfor
For i = 0, 1 Do Begin
thm_part_products, probe = sc, datatype = datat[i], $
scpot_suffix = scpot_suffix, suffix = '_temp4dtc', $
outputs = 'moments'
get_data, thx+'_'+datat[i]+'_ptens_temp4dtc', data = ptd, dlimits = dl
If(is_struct(ptd)) Then Begin
ptot = total(ptd.y[*, 0:2], 2)/3.0
store_data, thx+'_'+datat[i]+'_ptot_temp4dtc', data = {X:ptd.x, y:ptot}, $
dlimits = dl
Endif
Endfor
tplot_force_monotonic,'*_temp4dtc',/forward
If(keyword_set(nsig_despike)) Then nsg = nsig_despike Else nsg = 0.5
vv = [vv, 'ptot']
tvars = thx+'_'+datat[0]+'_'+vv+'_temp4dtc'
tvars0 = tvars+'_0'
tvars_dtc = thx+'_'+datat[0]+'_'+vv+'_dtc'+osfx
For k = 0, n_elements(vv)-1 Do Begin
get_data, tvars[k], data = dd
get_data, tvars0[k], data = dd0
dtc = dd.y/dd0.y
If(~keyword_set(no_despike)) Then Begin
ndim = n_elements(dtc[0,*])
For ll = 0, ndim -1 Do Begin
flag = dydt_spike_test(dd.x-dd.x[0], abs(dtc[*, ll]), nsig = nsg)
spike_ss = where(flag Eq 1, nspike) & ok_ss = where(flag Eq 0, nok)
If(nok Lt 3) Then Begin
dprint, dlevel=2, 'Data for '+thx+datat[0]+'_'+vv[k]+' is all spikes, '+$
'suggests larger value of nsig_despike needed. Not despiking'
Endif Else Begin
If(nspike Gt 0) Then Begin
dtc[*,ll] = interpol(dtc[ok_ss,ll], dd.x[ok_ss], dd.x)
Endif
Endelse
Endfor
Endif
store_data, tvars_dtc[k], data = {x:dd.x, y:dtc}
Endfor
tvars = thx+'_'+datat[1]+'_'+vv+'_temp4dtc'
tvars0 = tvars+'_0'
tvars_dtc = thx+'_'+datat[1]+'_'+vv+'_dtc'+osfx
For k = 0, n_elements(vv)-1 Do Begin
get_data, tvars[k], data = dd
get_data, tvars0[k], data = dd0
dtc = dd.y/dd0.y
If(~keyword_set(no_despike)) Then Begin
ndim = n_elements(dtc[0,*])
For ll = 0, ndim -1 Do Begin
flag = dydt_spike_test(dd.x-dd.x[0], abs(dtc[*, ll]), nsig = nsg)
spike_ss = where(flag Eq 1, nspike) & ok_ss = where(flag Eq 0, nok)
If(nok Lt 3) Then Begin
dprint, dlevel=2, 'Data for '+thx+datat[1]+'_'+vv[k]+' is all spikes, '+$
'suggests larger value of nsig_despike needed. Not despiking'
Endif Else Begin
If(nspike Gt 0) Then Begin
dtc[*,ll] = interpol(dtc[ok_ss,ll], dd.x[ok_ss], dd.x)
Endif
Endelse
Endfor
Endif
store_data, tvars_dtc[k], data = {x:dd.x, y:dtc}
Endfor
If(~keyword_set(keep_temp_moments)) Then Begin
del_data, '*_temp4dtc'
del_data, '*_temp4dtc_0'
Endif
options, thx+'*_dtc'+osfx, 'ynozero', 1
Endfor
Return
End