; Comments added by Erik Johnson 7/6/07
; step_wid.pro, compiles and runs with idl
; used in the manual step of removing spikes
;
;——————————————————————————-
;
; Event Handler
;
PRO step_wid_event, ev
WIDGET_CONTROL, ev.top, GET_UVALUE=statePtr
WIDGET_CONTROL, ev.id, GET_UVALUE=uval
CASE uval OF
'marker_select':(*statePtr).current_marker = ev.value
'component_select':begin
ss = (*statePtr).start_mark*3600
ee = (*statePtr).stop_mark*3600
(*statePtr).current_component = ev.value
if ev.value eq 0 then fix_level=-1*(median((*statePtr).bx(ee-600:ee))$
-median((*statePtr).bx(ee:ee+600)))
if ev.value eq 1 then fix_level=-1*(median((*statePtr).by(ee-600:ee))$
-median((*statePtr).by(ee:ee+600)))
if ev.value eq 2 then fix_level=-1*(median((*statePtr).bz(ee-600:ee))$
-median((*statePtr).bz(ee:ee+600)))
WIDGET_CONTROL, (*statePtr).slider2_id, SET_VALUE=fix_level
; WIDGET_CONTROL, (*statePtr).slider2_id, SET_slider_max=fix_level + 1000.
; WIDGET_CONTROL, (*statePtr).slider2_id, SET_slider_min=fix_level - 1000.
end
'plot_box': begin
location = convert_coord(ev.x,ev.y,/device,/to_data)
if ev.press eq 1 then begin
(*statePtr).start_mark = location(0)
new_slider_min = max([location(0)*3600 - 1000,0])
new_slider_max = min([location(0)*3600 + 1000,86399])
WIDGET_CONTROL, (*statePtr).slider4_id, SET_slider_max=new_slider_max
WIDGET_CONTROL, (*statePtr).slider4_id, SET_slider_min=new_slider_min
WIDGET_CONTROL, (*statePtr).slider4_id, SET_VALUE=location(0)*3600
endif
if ev.press eq 4 then begin
(*statePtr).stop_mark = location(0)
new_slider_min = max([location(0)*3600 - 1000,0])
new_slider_max = min([location(0)*3600 + 1000,86399])
WIDGET_CONTROL, (*statePtr).slider5_id, SET_slider_max=new_slider_max
WIDGET_CONTROL, (*statePtr).slider5_id, SET_slider_min=new_slider_min
WIDGET_CONTROL, (*statePtr).slider5_id, SET_VALUE=location(0)*3600
endif
if (ev.press eq 1 and ev.clicks eq 2) then begin
(*statePtr).start_mark = location(0) - 20./3600.
WIDGET_CONTROL,(*statePtr).slider4_id,SET_VALUE=(location(0)-20./3600.)*3600.
(*statePtr).stop_mark = location(0) + 20./3600.
WIDGET_CONTROL,(*statePtr).slider5_id,SET_VALUE=(location(0)+20./3600.)*3600.
endif
if (ev.press eq 1 or ev.press eq 4) then $
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
end
'file' :begin
WIDGET_CONTROL, (*statePtr).file_box_id, get_VALUE=file
WIDGET_CONTROL, (*statePtr).input_dir_box_id, get_VALUE=in
WIDGET_CONTROL, (*statePtr).output_dir_box_id, get_VALUE=out
(*statePtr).file = file & (*statePtr).in_dir = in & (*statePtr).out_dir = out
(*statePtr).file = dialog_pickfile(path=(*statePtr).in_dir, get_path=new_path, filter='*.s2')
(*statePtr).in_dir = new_path
WIDGET_CONTROL, (*statePtr).file_box_id, SET_VALUE=(*statePtr).file
IF(FILE_TEST((*statePtr).file, /READ)) THEN BEGIN
WIDGET_CONTROL, (*statePtr).input_dir_box_id, SET_VALUE=(*statePtr).in_dir
read_maccs,(*statePtr).file,t,x,y,z,/nt,bx2=bx2,by2=by2,bz2=bz2,tf1=tf1
(*statePtr).bx(*)=x & (*statePtr).by(*)=y & (*statePtr).bz(*)=z
(*statePtr).bx2(*)=bx2 & (*statePtr).by2(*)=by2 & (*statePtr).bz2(*)=bz2
(*statePtr).tf1(*)=tf1
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
ENDIF
end
'plot' :step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
'fix' :step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,$
(*statePtr).x_fix,(*statePtr).y_fix,(*statePtr).z_fix,/fixer
'do_it':begin
widget_control, (*statePtr).file_box_id, get_VALUE=file
widget_control, (*statePtr).output_dir_box_id, get_VALUE=out
(*statePtr).file = file & (*statePtr).out_dir = out
; OLD filename=(*statePtr).out_dir + $
; OLD strmid((*statePtr).file,strlen((*statePtr).file)-10,10)
filename=FILEPATH(strmid((*statePtr).file,strlen((*statePtr).file)-10,10), $
ROOT_DIR = (*statePtr).out_dir)
openw,unit,strmid(filename,0,strlen(filename)-2)+'txt',/get_lun,/append
ss = (*statePtr).start_mark*3600
ee = (*statePtr).stop_mark*3600
(*statePtr).tf1(ss:ee) = (*statePtr).tf1(ss:ee) + 2
if !version.os eq 'Win32' then begin
date_string=systime()
endif else begin
; date=today()
; date_string = ' '+strip(fix(date.month))+'/'+$
; strip(fix(date.day))+'/'+strip(date.year)+' '+getenv('USER')
date_string=systime()+' '+getenv('USER')
endelse
printf,unit,ss,ee,(*statePtr).x_fix,(*statePtr).y_fix,$
(*statePtr).z_fix,date_string,' *fixed*'
close,unit
free_lun,unit
bad = where((*statePtr).bx(*) eq 32767,count)
(*statePtr).bx(ss:ee) = (*statePtr).bx(ss:ee) + (*statePtr).x_fix
if count ne 0 then (*statePtr).bx(bad) = 32767
bad = where((*statePtr).bx2(*) eq 32767,count)
(*statePtr).bx2(ss:ee) = (*statePtr).bx2(ss:ee) + (*statePtr).x_fix
if count ne 0 then (*statePtr).bx2(bad) = 32767
bad = where((*statePtr).by(*) eq 32767,count)
(*statePtr).by(ss:ee) = (*statePtr).by(ss:ee) + (*statePtr).y_fix
if count ne 0 then (*statePtr).by(bad) = 32767
bad = where((*statePtr).by2(*) eq 32767,count)
(*statePtr).by2(ss:ee) = (*statePtr).by2(ss:ee) + (*statePtr).y_fix
if count ne 0 then (*statePtr).by2(bad) = 32767
bad = where((*statePtr).bz(*) eq 32767,count)
(*statePtr).bz(ss:ee) = (*statePtr).bz(ss:ee) + (*statePtr).z_fix
if count ne 0 then (*statePtr).bz(bad) = 32767
bad = where((*statePtr).bz2(*) eq 32767,count)
(*statePtr).bz2(ss:ee) = (*statePtr).bz2(ss:ee) + (*statePtr).z_fix
if count ne 0 then (*statePtr).bz2(bad) = 32767
fss1 = max([(*statePtr).start_mark*3600-30,0])
fee1 = min([(*statePtr).start_mark*3600+30,86399])
fss2 = max([(*statePtr).stop_mark*3600-30,0])
fee2 = min([(*statePtr).stop_mark*3600+30,86399])
(*statePtr).bx(fss1:fee1) = 32767
(*statePtr).bx(fss2:fee2) = 32767
(*statePtr).bx2(fss1:fee1) = 32767
(*statePtr).bx2(fss2:fee2) = 32767
(*statePtr).by(fss1:fee1) = 32767
(*statePtr).by(fss2:fee2) = 32767
(*statePtr).by2(fss1:fee1) = 32767
(*statePtr).by2(fss2:fee2) = 32767
(*statePtr).bz(fss1:fee1) = 32767
(*statePtr).bz(fss2:fee2) = 32767
(*statePtr).bz2(fss1:fee1) = 32767
(*statePtr).bz2(fss2:fee2) = 32767
(*statePtr).x_fix = 0
(*statePtr).y_fix = 0
(*statePtr).z_fix = 0
end
'write':begin
WIDGET_CONTROL, (*statePtr).file_box_id, get_VALUE=file
WIDGET_CONTROL, (*statePtr).input_dir_box_id, get_VALUE=in
WIDGET_CONTROL, (*statePtr).output_dir_box_id, get_VALUE=out
(*statePtr).file = file & (*statePtr).in_dir = in & (*statePtr).out_dir = out
; OLD filename = (*statePtr).out_dir + strmid((*statePtr).file,strlen((*statePtr).file)-10,10)
filename = FILEPATH(strmid((*statePtr).file,strlen((*statePtr).file)-10,10), ROOT_DIR = (*statePtr).out_dir)
write_maccs,strcompress(filename,/remove_all),(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
bx2=(*statePtr).bx2,by2=(*statePtr).by2,bz2=(*statePtr).bz2,$
tf1=(*statePtr).tf1,type='s2'
end
'next' :begin
(*statePtr).start_hour = 0
(*statePtr).stop_hour = 24
WIDGET_CONTROL, (*statePtr).slider6_id, SET_VALUE=(*statePtr).start_hour
WIDGET_CONTROL, (*statePtr).slider7_id, SET_VALUE=(*statePtr).stop_hour
next_day = string(fix(strmid((*statePtr).file,strlen((*statePtr).file)-6,3))+1,format='(i3.3)')
next_file = (*statePtr).file
strput,next_file,next_day,strlen(next_file)-6
(*statePtr).file = next_file
WIDGET_CONTROL, (*statePtr).file_box_id, SET_VALUE=(*statePtr).file
PRINT, 'Checking the existance of ', next_file
IF (FILE_TEST(next_file, /READ)) THEN BEGIN
read_maccs,(*statePtr).file,t,x,y,z,/nt,bx2=bx2,by2=by2,bz2=bz2,tf1=tf1
(*statePtr).bx(*)=x & (*statePtr).by(*)=y & (*statePtr).bz(*)=z
(*statePtr).bx2(*)=bx2 & (*statePtr).by2(*)=by2 & (*statePtr).bz2(*)=bz2
(*statePtr).tf1(*)=tf1
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
ENDIF ELSE BEGIN
PRINT, 'Does not exist. Try again'
ENDELSE
end
'flag' :begin
widget_control, (*statePtr).file_box_id, get_VALUE=file
widget_control, (*statePtr).output_dir_box_id, get_VALUE=out
(*statePtr).file = file & (*statePtr).out_dir = out
filename = (*statePtr).out_dir + strmid((*statePtr).file,strlen((*statePtr).file)-10,10)
openw,unit,strmid(filename,0,strlen(filename)-2)+'txt',/get_lun,/append
ss = (*statePtr).start_mark*3600
ee = (*statePtr).stop_mark*3600
if !version.os eq 'Win32' then begin
date_string=systime()
endif else begin
; date=today()
; date_string = ' '+strip(fix(date.month))+'/'+$
; strip(fix(date.day))+'/'+strip(date.year)+' '+getenv('USER')
date_string=systime()+' '+getenv('USER')
endelse
printf,unit,ss,ee,(*statePtr).x_fix,(*statePtr).y_fix,(*statePtr).z_fix,date_string,' *flagged*'
close,unit
free_lun,unit
(*statePtr).tf1(ss:ee) = (*statePtr).tf1(ss:ee) + 2
(*statePtr).bx(ss:ee) = 32767
(*statePtr).by(ss:ee) = 32767
(*statePtr).bz(ss:ee) = 32767
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
end
'slider2' : begin
if ((*statePtr).current_component eq 0) then (*statePtr).x_fix = ev.value
if ((*statePtr).current_component eq 1) then (*statePtr).y_fix = ev.value
if ((*statePtr).current_component eq 2) then (*statePtr).z_fix = ev.value
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,$
(*statePtr).x_fix,(*statePtr).y_fix,(*statePtr).z_fix,/fixer
end
'slider4' : (*statePtr).start_mark = ev.value/3600.
'slider5' : (*statePtr).stop_mark = ev.value/3600.
'slider6' : begin
(*statePtr).start_hour = ev.value
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
end
'slider7' : begin
(*statePtr).stop_hour = ev.value
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
end
'previous': begin
(*statePtr).start_hour = (*statePtr).start_hour - 1
(*statePtr).stop_hour = (*statePtr).stop_hour - 1
if (*statePtr).start_hour lt 0 then (*statePtr).start_hour=0
if (*statePtr).stop_hour lt 1 then (*statePtr).stop_hour=1
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
WIDGET_CONTROL, (*statePtr).slider6_id, SET_VALUE=(*statePtr).start_hour
WIDGET_CONTROL, (*statePtr).slider7_id, SET_VALUE=(*statePtr).stop_hour
end
'advance' : begin
if ((*statePtr).start_hour eq 0 and (*statePtr).stop_hour eq 24) then begin
(*statePtr).start_hour = -1
(*statePtr).stop_hour = 0
endif
(*statePtr).start_hour = (*statePtr).start_hour + 1
(*statePtr).stop_hour = (*statePtr).stop_hour + 1
if (*statePtr).start_hour gt 23 then (*statePtr).start_hour=23
if (*statePtr).stop_hour gt 24 then (*statePtr).stop_hour=24
step_view,(*statePtr).bx,(*statePtr).by,(*statePtr).bz,$
(*statePtr).start_mark,(*statePtr).stop_mark,0,0,0,$
ss=(*statePtr).start_hour,ee=(*statePtr).stop_hour
WIDGET_CONTROL, (*statePtr).slider6_id, SET_VALUE=(*statePtr).start_hour
WIDGET_CONTROL, (*statePtr).slider7_id, SET_VALUE=(*statePtr).stop_hour
end
'done': WIDGET_CONTROL, ev.top, /DESTROY
ENDCASE
END
;
;——————————————————————————
;
; Widget Definitions
;
PRO step_wid, InputDir = InputDir, OutputDir = OutputDir
IF NOT KEYWORD_SET(InputDir) THEN BEGIN
PRINT, 'Please provide initial input directory'
STOP
END
IF NOT KEYWORD_SET(OutputDir) THEN BEGIN
PRINT, 'Please provide initial input directory'
STOP
END
loadct,12
base = WIDGET_BASE(xoffset=100)
file_box = widget_text(base, value=, uvalue='file_text',$
xoffset=90, yoffset=0, xsize=30, /editable)
file_box_label = widget_label(base, value='Current file: ',$
xoffset=0, yoffset=0, xsize=100)
input_dir_box = widget_text(base, value=InputDir, uvalue='in_dir_text',$
xoffset=90, yoffset=30, xsize=30 ,/editable)
input_dir_box_label = widget_label(base, value=' Input directory: ',$
xoffset=0, yoffset=35, xsize=120)
output_dir_box = widget_text(base, value=OutputDir,$
uvalue='out_dir_text',xoffset=90, yoffset=55, xsize=30,$
/editable)
output_dir_box_label = widget_label(base, value=' Output directory: ',$
xoffset=0, yoffset=60, xsize=120)
file_button = WIDGET_BUTTON(base, VALUE='Select File', UVALUE='file',$
xoffset=0, yoffset=90, scr_xsize=100)
plot_button = WIDGET_BUTTON(base, VALUE='Plot', UVALUE='plot',$
xoffset=110, yoffset=90, scr_xsize=100)
do_it_button = WIDGET_BUTTON(base, VALUE='Do it', UVALUE='do_it',$
xoffset=0, yoffset=120, scr_xsize=100)
write_button = WIDGET_BUTTON(base, VALUE='Write!', UVALUE='write',$
xoffset=110, yoffset=120, scr_xsize=100)
next_button = WIDGET_BUTTON(base, VALUE='Next File', UVALUE='next',$
xoffset=220, yoffset=120, scr_xsize=100)
flag_button = WIDGET_BUTTON(base, VALUE='Flag Selection', UVALUE='flag',$
xoffset=620, yoffset=140, scr_xsize=100)
done_button = WIDGET_BUTTON(base, VALUE='Done', UVALUE='done',$
xoffset=110, yoffset=145, scr_xsize=100)
fix_button = WIDGET_BUTTON(base, VALUE='Fix', UVALUE='fix',$
xoffset=220, yoffset=90, scr_xsize=100)
slider2 = widget_slider(base, value=100, title=, uvalue='slider2',$;fix amount
xoffset=680, yoffset=10, minimum=-10000, maximum=10000, scr_xsize=100, /vertical)
slider4 = widget_slider(base, value=1, title=, uvalue='slider4',$
xoffset=380, yoffset=130, minimum=0, maximum=86399, scr_xsize=100)
slider5 = widget_slider(base, value=1, title=, uvalue='slider5',$
xoffset=500, yoffset=130, minimum=0, maximum=86399, scr_xsize=100)
slider6 = widget_slider(base, value=0, title='Start hour', uvalue='slider6',$
xoffset=380, yoffset=5, maximum=24, scr_xsize=100)
slider7 = widget_slider(base, value=24, title='Stop hour', uvalue='slider7',$
xoffset=500, yoffset=5, maximum=24, scr_xsize=100)
previous_button = WIDGET_BUTTON(base, VALUE='Previous', UVALUE='previous',$
xoffset=380, yoffset=70, scr_xsize=100)
advance_button = WIDGET_BUTTON(base, VALUE='Advance', UVALUE='advance',$
xoffset=500, yoffset=70, scr_xsize=100)
marker_select = CW_BGROUP(base, ['start marker','stop marker'], xoffset=400, yoffset=100,$
UVALUE='marker_select', /row, /exclusive)
component_select = CW_BGROUP(base, ['x','y','z'], xoffset=620, yoffset=10,$
UVALUE='component_select', /column, /exclusive)
plot_box = WIDGET_DRAW(base, xoffset = 0, yoffset = 170, XSIZE = 800, YSIZE = 500,$
UVALUE='plot_box', /button_events)
statePtr = ptr_new( { status: 0,$
bx: fltarr(86400),$
by: fltarr(86400),$
bz: fltarr(86400),$
bx2: fltarr(86400),$
by2: fltarr(86400),$
bz2: fltarr(86400),$
tf1: fltarr(86400),$
file: ,$
in_dir: '/cdrom/',$
out_dir: '/magneto1'+getenv('USER')+'/',$
slider2_value: 100,$
slider2_id: slider2,$
slider4_id: slider4,$
slider5_id: slider5,$
slider6_id: slider6,$
slider7_id: slider7,$
current_marker: 0,$
current_component: 0,$
start_mark: 1.0,$
stop_mark: 1.0,$
start_hour: 0.,$
stop_hour: 24.,$
x_fix: 0,$
y_fix: 0,$
z_fix: 0,$
file_box_id: file_box,$
input_dir_box_id: input_dir_box,$
output_dir_box_id: output_dir_box,$
current_path: 'v:\murr'} )
WIDGET_CONTROL, base, SET_UVALUE=statePtr
WIDGET_CONTROL, base, /REALIZE
WIDGET_CONTROL, plot_box, GET_VALUE = index
WSET, index
XMANAGER, 'step_wid', base
file_value = (*statePtr).file
ptr_free, statePtr
print,'done'
END

