function call_dproc, dp_task, dp_pars, names_out = names_out, no_setactive = no_setactive, $
hwin = hwin, sbar = sbar, call_sequence=call_sequence,$
loadedData=loadedData,gui_id = gui_id, dpr_extra = _extra
compile_opt idl2,hidden
in_vars = loadedData->getactive(/parent)
If(is_string(in_vars) Eq 0) Then Begin
hwin -> update, 'No active data, Returning'
sbar -> update, 'No active data, Returning'
Return, otp
Endif
otp = loadedData->dproc(dp_task, dp_pars,callSequence=call_sequence, names_out = names_out, in_vars=in_vars, $
no_setactive = no_setactive, hwin = hwin, sbar = sbar, gui_id = gui_id)
return,otp
end
Function spd_ui_dproc, info, uval, $
group_leader = group_leader, ext_statusbar = ext_statusbar, $
ptree = ptree
otp = 0b
err0 = 0
catch, err0
If(err0 Ne 0) Then Begin
catch, /cancel
ok = error_message(traceback = 1, /noname, title = 'Error in Data Processing: ')
Return, 0b
Endif
If(is_struct(info) Eq 0) Then message, 'Invalid info structure?'
uv0 = ['subavg', 'submed', 'smooth', 'blkavg', 'clip', 'deflag', $
'degap', 'spike', 'deriv', 'pwrspc', 'wave', 'hpfilt', $
'interpol','split','join']
uvlong = ['Average subtraction', 'Median subtraction', $
'Time smoothing', 'Block average', 'Clip', 'Deflag', $
'Degap', 'De-spike', 'Time derivative', $
'Dynamic Power spectrum', 'Wavelet transform', $
'High-pass filter', 'Interpolate']
hwin = info.historywin
If(obj_valid(ext_statusbar)) Then sbar = ext_statusbar $
Else sbar = info.statusbar
If(is_string(uval) Eq 0) Then Begin
msg = 'SPD_UI_DPROC: No user value.'
sbar -> update, msg
info.historywin -> update, msg
Return, otp
Endif
uv = strcompress(/remove_all, strlowcase(uval))
is_possible = where(uv0 Eq uv)
If(is_possible[0] Eq -1) Then Begin
msg = 'SPD_UI_DPROC: Invalid user value: '+uval
sbar -> update, msg
info.historywin -> update, msg
Return, otp
Endif
info.windowStorage->getProperty,callSequence=call_sequence
active_data = info.loadedData->getactive(/parent)
if ~is_string(active_data[0]) then begin
message = 'No active data. Returning to Data Processing window.'
sBar->update, message
info.historyWin->update, 'SPD_UI_PWRSPC: ' + message
return,''
endif
If(keyword_set(group_leader)) Then guiid = group_leader[0] Else guiid = info.master
Case uv Of
'split':begin
otp = call_dproc(uv, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
end
'join':begin
values = spd_ui_join_variables_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv, values,hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif
end
'subavg': otp = call_dproc(uv,hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
'submed': otp = call_dproc(uv,hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
'deriv': begin
values = spd_ui_time_derivative_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv, values,hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else sbar->update,'Time derivative canceled'
end
'spike': begin
values = spd_ui_clean_spikes_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv, values,hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else sbar->update,'Clean Spikes canceled'
end
'pwrspc': Begin
overwrite_selections = 0
popt = spd_ui_pwrspc_options(guiid, info.loadtr, info.historywin, sbar)
if popt.success eq 0 then return,''
active_data = info.loadedData->getactive(/parent)
if ~is_string(active_data[0]) then begin
message = 'No active data. Returning to Data Processing window.'
sBar->update, message
info.historyWin->update, 'SPD_UI_PWRSPC: ' + message
return,''
endif
spd_ui_pwrspc, popt, active_data, info.loadedData, info.historywin, $
sbar, guiId, fail=fail, overwrite_selections = overwrite_selections
if ~keyword_set(fail) then begin
call_sequence->addPwrSpecOp,popt,active_data,overwrite_selections
endif
End
'smooth': Begin
values = spd_ui_smooth_data_options(guiid, sbar, info.historywin)
If ~values.ok Then Begin
msg = 'Operation Cancelled: '+uvlong[is_possible]
sbar -> update, msg
hwin -> update, msg
Endif Else Begin
otp = call_dproc(uv, values, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
Endelse
End
'blkavg': Begin
datap = ptr_new(info.loadeddata)
values = spd_ui_block_ave_options(guiid, sbar, info.historywin, datap)
if values.ok then begin
if obj_valid(values.trange) then str_element,values,'trange', $
[values.trange->getStartTime(),values.trange->getEndTime()],/add_replace
otp = call_dproc(uv, values, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else sbar->update,'Block Average Canceled'
End
'clip':Begin
values = spd_ui_clip_data_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv,values, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else sbar->update,'Clip Data Canceled'
End
'deflag': Begin
values = spd_ui_deflag_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv, values, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else sbar->update,'Deflag Canceled'
End
'degap':Begin
values = spd_ui_degap_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv, values, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else sbar->update,'Degap Canceled'
End
'wave':Begin
active_data = info.loadedData->getactive()
for i=0, n_elements(active_data)-1 do begin
info.loadeddata->getvardata, name=active_data[i], trange=tr0
if obj_valid(tr0) then break
endfor
if ~obj_valid(tr0) then tr0 = info.loadtr
tr = [tr0->getstarttime(),tr0->getendtime()]
plabel = ['Start Time:', 'Stop Time: ', 'Max # of Samples']
pvalue = [time_string(tr),strtrim(2l^15,2)]
opar = obj_new('spd_ui_dproc_par', dp_string = uv, $
dp_struct = {pvalue:pvalue, plabel:plabel})
trange0 = spd_ui_dproc_par_choose(opar, gui_id = guiid, $
par_pad = 2, label_xsize = 100, $
title = 'Wavelet Transform Time Range', $
bottomlabel = 'Format: yyyy-mm-dd/hh:mm:ss')
obj_destroy, opar
msg = ''
If(trange0[0] Eq 'Cancelled') Then Begin
msg = 'Operation Cancelled: '+uvlong[is_possible]
hwin -> update, msg
sbar -> update, msg
Endif Else Begin
if n_elements(trange0) ne 3 then begin
wavelet_err_msg = 'Error calculating wavelet transform, missing some parameters. Did you leave a textbox in the wavelet panel empty?'
hwin->update, wavelet_err_msg
sbar->update, wavelet_err_msg
break
endif
t00 = spd_ui_timefix(trange0[0])
If(is_string(t00)) Then Begin
t00x = time_double(t00)
Endif Else Begin
msg = 'Invalid Start Time: "' + trange0[0] + '"'
Endelse
t01 = spd_ui_timefix(trange0[1])
If(is_string(t01)) Then Begin
t01x = time_double(t01)
Endif Else Begin
msg = 'Invalid End Time: "' + trange0[1] + '"'
Endelse
if msg eq '' then begin
trange = [t00x, t01x]
If(trange[0] Le 0) Then Begin
msg = 'Invalid Start Time: "' + trange0[0] + '"'
Endif Else If(trange[1] Le 0) Then Begin
msg = 'Invalid End Time: "' + trange0[1] + '"'
Endif Else If(trange[0] Ge trange[1]) Then Begin
msg = 'Start Time: '+trange0[0]+' is GE End Time: '+trange0[1]
endif else if ~is_numeric(trange0[2]) then begin
msg = 'Invalid Max # of Samples: "' + trange0[2] + '"'
endif else begin
otp = call_dproc(uv,{trange:trange,maxpoints:float(trange0[2])} , hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
Endelse
endif
if msg ne '' then begin
ok = dialog_message(msg,/center,title='Error Initializing Wavelet: ')
hwin -> update, msg
sbar -> update, msg
endif
Endelse
End
'hpfilt':Begin
values = spd_ui_high_pass_options(guiid, sbar, info.historywin)
if values.ok then begin
otp = call_dproc(uv, values, hwin=info.historyWin,sbar=sbar,call_sequence=call_sequence,loadedData=info.loadedData, gui_id=guiid)
endif else begin
msg = 'High Pass Filter Canceled'
sbar -> update, msg
hwin -> update, msg
endelse
End
'interpol':Begin
datap = ptr_new(info.loadeddata)
result = spd_ui_interpol_options(guiid,info.historywin, sbar, datap, ptree = ptree)
if is_struct(result) then begin
if result.ok then begin
active_data = info.loadedData->getactive(/parent)
if ~is_string(active_data[0]) then begin
msg = 'Interpolate: No active data. Returned to Data Processing window.'
sbar -> update, msg
hwin -> update, msg
endif else begin
if obj_valid(result.trange) then str_element,result,'trange', $
[result.trange->getStartTime(),result.trange->getEndTime()],/add_replace
spd_ui_interpolate, result,active_data, info.loadedData, info.historywin, $
sbar, fail=fail, guiid=guiid, cadence_selections=cadence_selections,$
overwrite_selections=overwrite_selections
if fail eq 0 then begin
call_sequence->addInterpOp,result,active_data,cadence_selections,overwrite_selections
endif
endelse
endif
endif
End
Endcase
info.drawobject->update, info.windowstorage, info.loadeddata
info.drawobject->draw
info.scrollbar->update
Return, otp
End