Viewing contents of file '../idllib/astron/contrib/varosi/code/allpro/efficiency.pro'
; NAME:
; Effic_Event
;
; PURPOSE:
; Process button events which are user requests to display,
; analyze, store/Load, etc..., the efficiency data/results acquired,
; or unmap/destroy the widget if the user has pressed the DONE button.
; This is the event handler routine that the Xmanager calls when
; an event occurs for Efficiency widget.
;
; CALLING:
; Effic_Event, event
;
; INPUT:
; event = structure variable defining the widget event.
;
; EXTERNAL CALLS:
; pro Print/Plot/Edit/Save_Eff_Meas
; pro Restore_Eff_M
; pro Calc_Effics
; pro Print/Plot/Save/Restore_Effics
; pro Plot_Reflect
; pro Model_Effic
; pro iconify_windows
; COMMON BLOCKS:
; common Efficiency, effic_widget
; common Analyze_Image, analyze_widget
; common Effic_Data, eff_meas ;the List of measurements.
; common Effic_Calc, effics ;the computed results
; PROCEDURE:
; Big CASE breakdown.
; HISTORY:
; Frank Varosi NASA/GSFC 1994.
pro Effic_Event, event
common Efficiency, effic_widget
common Analyze_Image, analyze_widget
common Effic_Data, eff_meas ;the List of measurements.
common Effic_Calc, effics ;the computed results
common Effic_Reflect, ref_mirr, ref_grat
common Model_Effics, win_ge, win_ae
effic_widget.dir_io = effic_widget.dir_io_save
if N_struct( analyze_widget ) EQ 1 then begin
if ( analyze_widget.active ) then $
effic_widget.dir_io = analyze_widget.imspec(1).dir_io
endif
WIDGET_CONTROL, event.id, GET_UVALUE=uval
CASE uval(0) OF
"DONE": BEGIN
if (effic_widget.group GT 0) then begin
WIDGET_CONTROL, event.top, MAP=0
WIDGET_CONTROL, effic_widget.group, $
/SHOW,ICON=0,BAD=id
endif else begin
effic_widget.base = 0
WIDGET_CONTROL, event.top, /DESTROY
endelse
iconify_windows, effic_widget.windows
END
"PRINT": Print_Eff_Meas, eff_meas
"PRINT_F": Print_Eff_Meas, eff_meas,/HARDCOPY, $
DIR=effic_widget.dir_io
"PLOT": BEGIN
win = effic_widget.windows(0)
Plot_Eff_Meas, eff_meas, WINDOW=win
effic_widget.windows(0) = win
END
"PLOT_F": Plot_Eff_Meas, eff_meas, /HARDCOPY, $
DIR=effic_widget.dir_io
"EDIT": Edit_Eff_Meas, eff_meas
"NEW": BEGIN
if N_struct( eff_meas ) GT 0 then begin
if yes_no_menu( "really start a new List",/BIN,/NO ) then begin
if min( eff_meas.saved ) LE 0 then $
Save_Eff_Meas, eff_meas, $
NAME=strconcat( get_words( systime() ) + "_" )
eff_meas = 0
endif
endif
END
"SET": Set_Grat_Parms, effics
"SAVE_L": Save_Eff_Meas, eff_meas, DIR=effic_widget.dir_io
"RESTORE_L": BEGIN
dir_io = effic_widget.dir_io
Restore_Eff_M, eff_meas, DIR=dir_io
effic_widget.dir_io = dir_io
END
"READ": BEGIN
ref_mirr = Read_Reflect( "MIRROR" )
ref_grat = Read_Reflect( "GRATING" )
END
"COMPUTE": BEGIN
Calc_Effics, eff_meas, effics, REF_MIRROR=ref_mirr, $
REF_GRATING=ref_grat
if N_struct( eff_meas ) GT 0 then begin
win = effic_widget.windows(1)
Plot_Effics, effics, WINDOW=win
effic_widget.windows(1) = win
endif
END
"PLOTEFF": BEGIN
win = effic_widget.windows(1)
Plot_Effics, effics, WINDOW=win
effic_widget.windows(1) = win
END
"PLOT_PS": Plot_Effics, effics, /HARDCOPY, $
DIR=effic_widget.dir_io
"PLOTREF": BEGIN
win = effic_widget.windows(2)
Plot_Reflect, effics, WINDOW=win, REF_MIRR=ref_mirr, $
REF_GRAT=ref_grat
effic_widget.windows(2) = win
END
"PLOTR_PS": Plot_Reflect, effics, /HARD, DIR=effic_widget.dir_io, $
REF_MIRR=ref_mirr, REF_GRAT=ref_grat
"PRINT_E": Print_Effics, effics
"PRINT_EF": Print_Effics, effics,/HARDCOPY, $
DIR=effic_widget.dir_io
"SAVE_EFF": Save_Effics, effics, DIR=effic_widget.dir_io
"RESTORE_EFF": BEGIN
dir_io = effic_widget.dir_io
Restore_Effics, effics, DIR=dir_io
effic_widget.dir_io = dir_io
END
; "PWIDGET": BEGIN
; if N_struct( effics ) GT 0 then begin
; Pwidget, GROUP=event.top, effics.wavelength, $
; [[effics.absolute], [effics.groove] ]
; endif
; END
"FIT_EFF": BEGIN
Model_Effics, effics
if N_elements( win_ae ) EQ 1 then $
effic_widget.windows(3:4) = [ win_ge, win_ae ]
END
else: BEGIN
help,/st,event
message,uval(0)+" not implemented",/INFO
END
ENDCASE
if N_struct( analyze_widget ) EQ 1 then begin
if (NOT analyze_widget.active) then $
effic_widget.dir_io_save = effic_widget.dir_io
endif else effic_widget.dir_io_save = effic_widget.dir_io
END
;+
; NAME:
; Efficiency
;
; PURPOSE:
; Create a widget to control the analysis of grating efficiency data
; and then display/hardcopy the computed efficiency curves.
;
; CALLING:
; Efficiency
;
; KEYWORD INPUTS:
;
; GROUP = the ID of the widget that calls this procedure,
; if specified, death of caller results in death of this widget.
;
; PARENT = the ID of the widget which is to be the top level base of the
; new widget created by this procedure. If specified,
; this Efficiency widget is just defined but not realized.
;
; XPOS, YPOS = desired position on screen of free base (no parent) widget.
;
; EFFECTS:
; Initiates the Xmanager if it is not already running.
;
; EXTERNAL CALLS:
; pro Xmanager
; function widget_Tree_Map
; COMMON BLOCKS:
; common Efficiency, effic_widget
; PROCEDURE:
; Create and register the widgets with the Xmanager.
; Selection events are then processed by pro Effic_Event.
; HISTORY:
; Frank Varosi NASA/GSFC 1994.
;-
pro Efficiency, GROUP=group, PARENT=parent, XPOS=xpos, YPOS=ypos
common Efficiency, effic_widget
if N_struct( effic_widget ) NE 1 then begin
effic_widget ={ base:0L ,$
parent:0L ,$
group:0L ,$
dir_io:"~/opt/" ,$
dir_io_save:"" ,$
windows:replicate(-1,5) ,$
wmap: replicate( widget_Tree_Map(), 50 ) }
effic_widget.dir_io_save = effic_widget.dir_io
endif
if WIDGET_INFO( effic_widget.base, /VALID ) then begin
message,"widget exists...now showing",/INFO
WIDGET_CONTROL, effic_widget.base, /SHOW, ICON=0
return
endif
if N_elements( parent ) EQ 1 then begin
base = WIDGET_BASE( parent, /FRAME, /COLUMN, SPACE=12 )
label = WIDGET_LABEL( base, VALUE = "Efficiency Analysis" )
effic_widget.base = -base
effic_widget.parent = parent
endif else begin
base = WIDGET_BASE( TIT="Efficiency Analysis",/COLUMN, $
YPAD=16, SPACE=16 )
effic_widget.base = base
effic_widget.parent = 0
if N_elements( group ) EQ 1 then effic_widget.group = group $
else effic_widget.group = 0
endelse
basem = WIDGET_BASE( base,/COLUMN,/FRAME )
Lid = WIDGET_LABEL( basem, VAL="Efficiency Measurement List options:" )
b = WIDGET_BUTTON( basem, UVAL="EDIT", VALUE="EDIT the List" )
b = WIDGET_BUTTON( basem, UVAL="NEW", VALUE="NEW List" )
basepr = WIDGET_BASE( basem,/ROW )
b1 = WIDGET_BUTTON( basepr, UVAL="PRINT", VALUE="PRINT the List" )
b = WIDGET_BUTTON( basepr, UVAL="PRINT_F", VALUE="to a File" )
basepl = WIDGET_BASE( basem,/ROW )
b = WIDGET_BUTTON( basepl, UVAL="PLOT", VALUE="PLOT the List" )
b = WIDGET_BUTTON( basepl, UVAL="PLOT_F", VALUE="to PostScript" )
basesr = WIDGET_BASE( basem,/ROW )
b = WIDGET_BUTTON( basesr, UVAL="SAVE_L", VALUE="SAVE the List" )
b = WIDGET_BUTTON( basesr, UVAL="RESTORE_L", VALUE="RESTORE" )
b = WIDGET_BUTTON( base, UVAL="READ", VALUE="READ reflectance files" )
b = WIDGET_BUTTON( base, UVAL="SET", VALUE="SET grating parameters" )
b = WIDGET_BUTTON( base, UVAL="COMPUTE", VALUE="COMPUTE efficiencies" )
baser = WIDGET_BASE( base,/COLUMN,/FRAME )
basepr = WIDGET_BASE( baser,/ROW )
b1 = WIDGET_BUTTON( basepr, UVAL="PRINT_E", VALUE="PRINT efficiencies" )
b = WIDGET_BUTTON( basepr, UVAL="PRINT_EF", VALUE="to a File" )
basepl = WIDGET_BASE( baser,/ROW )
b = WIDGET_BUTTON( basepl, UVAL="PLOTEFF", VALUE="PLOT efficiencies" )
b = WIDGET_BUTTON( basepl, UVAL="PLOT_PS", VALUE="to PostScript" )
basepl = WIDGET_BASE( baser,/ROW )
b = WIDGET_BUTTON( basepl, UVAL="PLOTREF", VALUE="PLOT reflectances" )
b = WIDGET_BUTTON( basepl, UVAL="PLOTR_PS", VALUE="to PostScript" )
basesr = WIDGET_BASE( baser,/ROW )
b = WIDGET_BUTTON( basesr, UVAL="SAVE_EFF", VALUE="SAVE the Results" )
b = WIDGET_BUTTON( basesr, UVAL="RESTORE_EFF", VALUE="RESTORE" )
; b = WIDGET_BUTTON( base, UVAL="PWIDGET", VALUE="Plot Widget" )
b = WIDGET_BUTTON( base, UVAL="FIT_EFF", VALUE="FIT Effic. with MODEL" )
if N_elements( parent ) NE 1 then begin
b = WIDGET_BUTTON( base, VALUE="DONE", UVALUE="DONE" )
WIDGET_CONTROL, base, /REALIZE
widget_Location, base, XPOS=xpos, YPOS=ypos
WIDGET_CONTROL, b1, /INPUT_FOCUS
endif
effic_widget.wmap = widget_Tree_Map( base )
Xmanager, "effic", base, GROUP=group
END