;+ ; NAME: ; WWB ; ; PURPOSE: ; This procedure sets up runs the event loop for ; the Wavelet Workbench functions. ; ; CATEGORY: ; Wavelets. ; ; CALLING SEQUENCE: ; ; WWB ; ; INPUTS: ; ; The user must specify what path the wavelets directory routines ; are located at. A query is made in the IDL window when the user ; calls the wwb procedure. ; ; OUTPUTS: ; This procedure runs the wavelet data input as well as the actions ; performed on the data. ; ; ; COMMON BLOCKS: ; CWAVE: The block for passing the Wavelet Type (string: 'Haar' etc.) ; CPAR: The block for passing the Wavelet Parameter for the ; wavelet (integer) ; TEXT_ANNOUNCE: The block for passing the widget that present ; messages as well as other important wavelet parameters such ; as the data array (sig), the data array length(len), a string ; describing the data (st) and the current chosen quadrature mirror ; filter (QMF). ; ; ; MODIFICATION HISTORY: ; Written by: Amara Graps, August/September 1995. ;- ;**************************************************************** PRO PDWAVE_EVENT, Event ;This procedure sets the wavelet string variable: WaveType based ;on the pull-down menu item chosen. COMMON CWAVE, $ oWaveType COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal CASE Event.Value OF 'Wavelet Type.Haar': BEGIN ;PRINT, 'Event for Wavelet Type.Haar' WaveType = 'Haar' END 'Wavelet Type.Daubechies': BEGIN ;PRINT, 'Event for Wavelet Type.Daubechies' WaveType = 'Daubechies' END 'Wavelet Type.Coiflet': BEGIN ;PRINT, 'Event for Wavelet Type.Coiflet' WaveType = 'Coiflet' END 'Wavelet Type.Symmlet': BEGIN ;PRINT, 'Event for Wavelet Type.Symmlet' WaveType = 'Symmlet' END ENDCASE END ;of procedure PDWAVE_EVENT ;**************************************************************** pro MAINWCHOICE_EVENT, event ;This procedure calls the appropriate procedures for the final ;wavelet parameter chosen. Once the OK or Cancel button is pressed ;for the wavelets, a call to select which wavelet parameters is ;made ('OK') or else the wavelet is discarded ('Cancel'). COMMON CWAVE, $ oWaveType COMMON CPAR, $ oParVal COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal type = TAG_NAMES(event, /structure_name) WIDGET_CONTROL,event.id,get_uvalue=ev CASE 1 OF ( type EQ 'WIDGET_BUTTON' ) AND ( ev EQ 'OK' ): BEGIN ;keep new value of WaveType ;PRINT, WaveType WIDGET_CONTROL, event.top, /destroy ;Now get the Parameter Value PARCHOICE, WaveType END ( type EQ 'WIDGET_BUTTON' ) and ( ev EQ 'Cancel' ): BEGIN ;restore old value of WaveType and ParVal WaveType = oWaveType ParVal = oParVal ;PRINT, WaveType WIDGET_CONTROL, event.top, /destroy END ELSE: BEGIN CASE ev OF 'PDWAVE': pdwave_event, event ELSE: PRINT, 'Menu item not identified!' ENDCASE ;ev END ;ELSE ENDCASE ;CASE 1.. Checking buttons and menu items END ;procedure mainwchoice_event ;**************************************************************** PRO WAVECHOICE, GROUP=Group ;This procedure creates a widget with wavelet choices in a ;pull-down menu. COMMON CWAVE, $ oWaveType COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0 junk = { CW_PDMENU_S, flags:0, name:'' } ;--------------------------------------------------- ;Create widget for choosing which wavelet. ;--------------------------------------------------- MAINWCHOICE = WIDGET_BASE(GROUP_LEADER=Group, $ ROW=1, $ XPAD=10, $ MAP=1, $ TITLE='Wavelet Choice', $ UVALUE='MAINCHOICE') LABEL2 = WIDGET_LABEL( MAINWCHOICE, $ UVALUE='LABEL2', $ VALUE='Choose Wavelet:', $ YSIZE=16) WaveMenu = [ $ { CW_PDMENU_S, 3, 'Wavelet Type' }, $ ; 0 { CW_PDMENU_S, 0, 'Haar' }, $ ; 1 { CW_PDMENU_S, 0, 'Daubechies' }, $ ; 2 { CW_PDMENU_S, 0, 'Coiflet' }, $ ; 3 { CW_PDMENU_S, 2, 'Symmlet' } $ ; 4 ] PDWAVE = CW_PDMENU( MAINWCHOICE, WaveMenu, /RETURN_FULL_NAME, $ UVALUE='PDWAVE') CANBUTTON= WIDGET_BUTTON( MAINWCHOICE, $ UVALUE='Cancel', $ VALUE='Cancel', $ XSIZE=45) OKBUTTON = WIDGET_BUTTON( MAINWCHOICE, $ FRAME=20, $ UVALUE='OK', $ VALUE='OK', $ XOFFSET=10, $ XSIZE=50, $ YOFFSET=10, $ YSIZE=25) WIDGET_CONTROL, MAINWCHOICE, /REALIZE XMANAGER, 'MAINWCHOICE', MAINWCHOICE ;Store Original Value oWaveType = WaveType END ;**************************************************************** PRO PDPAR_EVENT, Event ;This procedure sets the parameter variable: ParVal based on the ;pull-down menu item chosen. COMMON CPAR, $ oParVal COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal CASE Event.Value OF 'Parameter Value.1': BEGIN ;PRINT, 'Parameter Value.1' ParVal = 1 END 'Parameter Value.2': BEGIN ;PRINT, 'Parameter Value.2' ParVal = 2 END 'Parameter Value.3': BEGIN ;PRINT, 'Parameter Value.3' ParVal = 3 END 'Parameter Value.4': BEGIN ;PRINT, 'Parameter Value.4' ParVal = 4 END 'Parameter Value.6': BEGIN ;PRINT, 'Parameter Value.6' ParVal = 6 END 'Parameter Value.8': BEGIN ;PRINT, 'Parameter Value.8' ParVal = 8 END ENDCASE END ;of procedure PDPAR_EVENT ;**************************************************************** pro MAINPCHOICE_EVENT, event ;This procedure calls the appropriate procedures for the final ;wavelet parameter chosen. Once the OK or Cancel button is pressed ;the wavelets AND wavelet parameters are either kept ('OK') or ;discarded ('Cancel'). COMMON CPAR, $ oParVal COMMON CWAVE, $ oWaveType COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal type = TAG_NAMES(event, /structure_name) WIDGET_CONTROL,event.id,get_uvalue=ev CASE 1 OF ( type EQ 'WIDGET_BUTTON' ) and ( ev EQ 'OK' ): BEGIN ;keep new value of ParVal ;PRINT, ParVal WDOFILT, WaveType, ParVal, QMF WDOWAVE, WaveType,ParVal WIDGET_CONTROL, event.top, /destroy END ( type EQ 'WIDGET_BUTTON' ) and ( ev EQ 'Cancel' ): BEGIN ;restore old value of ParVal and WaveType ParVal = oParVal WaveType = oWaveType ;PRINT, ParVal WIDGET_CONTROL, event.top, /destroy END ELSE: BEGIN CASE ev OF 'PDPAR': pdpar_event, event ELSE: PRINT, 'Menu item not identified!' ENDCASE ;ev END ;ELSE ENDCASE ;CASE 1.. Checking buttons and menu items END ;procedure mainpchoice_event ;**************************************************************** PRO PARCHOICE, WaveletType, GROUP=Group ;This procedure creates a widget with parameter choices in a ;pull-down menu based on the wavelet chosen (passed in as ;WaveletType). COMMON CPAR, $ oParVal COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0 junk = { CW_PDMENU_S, flags:0, name:'' } ;--------------------------------------------------- ;Create widget for choosing which parameter value for ;for the wavelet chosen. ;--------------------------------------------------- MAINPCHOICE = WIDGET_BASE(GROUP_LEADER=Group, $ ROW=1, $ XPAD=10, $ MAP=1, $ TITLE='Parameter Value Choice', $ UVALUE='MAINCHOICE') LABEL2 = WIDGET_LABEL( MAINPCHOICE, $ UVALUE='LABEL2', $ VALUE='Choose Parameter Value:', $ YSIZE=16) ;Set up ParMenu based on value of WaveletType CASE WaveletType OF 'Haar': BEGIN ParMenu = [ $ { CW_PDMENU_S, 3, 'Parameter Value' }, $ ; 0 { CW_PDMENU_S, 2, '1' } $ ; 1 ] END 'Daubechies': BEGIN ParMenu = [ $ { CW_PDMENU_S, 3, 'Parameter Value' }, $ ; 0 { CW_PDMENU_S, 0, '4' }, $ ; 1 { CW_PDMENU_S, 2, '6' } $ ; 2 ] END 'Coiflet': BEGIN ParMenu = [ $ { CW_PDMENU_S, 3, 'Parameter Value' }, $ ; 0 { CW_PDMENU_S, 0, '2' }, $ ; 1 { CW_PDMENU_S, 2, '3' } $ ; 2 ] END 'Symmlet': BEGIN ParMenu = [ $ { CW_PDMENU_S, 3, 'Parameter Value' }, $ ; 0 { CW_PDMENU_S, 0, '6' }, $ ; 1 { CW_PDMENU_S, 2, '8' } $ ; 2 ] END ENDCASE ;WaveletType PDPAR = CW_PDMENU( MAINPCHOICE, ParMenu, /RETURN_FULL_NAME, $ UVALUE='PDPAR') CANBUTTON= WIDGET_BUTTON( MAINPCHOICE, $ UVALUE='Cancel', $ VALUE='Cancel', $ XSIZE=45) OKBUTTON = WIDGET_BUTTON( MAINPCHOICE, $ FRAME=20, $ UVALUE='OK', $ VALUE='OK', $ XOFFSET=10, $ XSIZE=50, $ YOFFSET=10, $ YSIZE=25) WIDGET_CONTROL, MAINPCHOICE, /REALIZE XMANAGER, 'MAINPCHOICE', MAINPCHOICE ;Store Original Value oParVal = ParVal END ;**************************************************************** PRO PDMENUSL_EVENT, Event ;This procedure sets the variable: "len" to be the data/signal size ;chosen. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON SIGLEN, olen CASE Event.Value OF 'Data/Signal Size.64': BEGIN ;PRINT, 'Event for Data/Signal Size.64' len = 64 END 'Data/Signal Size.128': BEGIN ;PRINT, 'Event for Data/Signal Size.128' len = 128 END 'Data/Signal Size.256': BEGIN ;PRINT, 'Event for Data/Signal Size.256' len = 256 END 'Data/Signal Size.512': BEGIN ;PRINT, 'Event for Data/Signal Size.512' len = 512 END 'Data/Signal Size.1024': BEGIN ;PRINT, 'Event for Data/Signal Size.1024' len = 1024 END 'Data/Signal Size.2048': BEGIN ;PRINT, 'Event for Data/Signal Size.2048' len = 2048 END ENDCASE END ;of procedure PDMENUSL_EVENT ;**************************************************************** PRO MAINSL_EVENT, Event ;This procedure takes the appropriate action for either pressing ;one of the buttons or selecting a menu item. If a menu item ;is selected, the menu event procedure is called. Otherwise, once ;the OK or Cancel button is pressed the Data/Signal Size parameters ;are either kept ('OK') or discarded ('Cancel'). COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON SIGLEN, olen type = TAG_NAMES(event, /structure_name) WIDGET_CONTROL,event.id,get_uvalue=ev CASE 1 OF ( type EQ 'WIDGET_BUTTON' ) AND ( ev EQ 'OK' ): BEGIN ;keep new value of len ;PRINT, len WDOSGLEN WIDGET_CONTROL, event.top, /destroy END ( type EQ 'WIDGET_BUTTON' ) AND ( ev EQ 'Cancel' ): BEGIN ;restore old value of len len = olen ;PRINT, len WIDGET_CONTROL, event.top, /destroy END ELSE: BEGIN CASE ev OF 'PDMENUSL': PDMENUSL_Event, event ELSE: PRINT, 'Menu item not identified!' ENDCASE ;ev END ;ELSE ENDCASE ;CASE 1.. Checking buttons and menu items END ;MAINSL_EVENT ;**************************************************************** PRO SIG_LEN, GROUP=Group ;This procedure creates a widget with parameter choices in a ;pull-down menu for choosing the length of the generated signal. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON SIGLEN, olen IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0 junk = { CW_PDMENU_S, flags:0, name:'' } MAINSL = WIDGET_BASE(GROUP_LEADER=Group, $ ROW=1, $ MAP=1, $ TITLE='Data/Signal Size', $ UVALUE='MAINSL') MenuDesc770 = [ $ { CW_PDMENU_S, 3, 'Data/Signal Size' }, $ ; 0 { CW_PDMENU_S, 0, '64' }, $ ; 1 { CW_PDMENU_S, 0, '128' }, $ ; 2 { CW_PDMENU_S, 0, '256' }, $ ; 3 { CW_PDMENU_S, 0, '512' }, $ ; 4 { CW_PDMENU_S, 0, '1024' }, $ ; 5 { CW_PDMENU_S, 2, '2048' } $ ; 6 ] PDMENUSL = CW_PDMENU( MAINSL, MenuDesc770, /RETURN_FULL_NAME, $ UVALUE='PDMENUSL') BASE12 = WIDGET_BASE(MAINSL, $ COLUMN=1, $ MAP=1, $ UVALUE='BASE12') BUTTONOK = WIDGET_BUTTON( BASE12, $ FRAME=10, $ UVALUE='OK', $ VALUE='OK') BUTTONCAN= WIDGET_BUTTON( BASE12, $ UVALUE='Cancel', $ VALUE='Cancel') WIDGET_CONTROL, MAINSL, /REALIZE XMANAGER, 'MAINSL', MAINSL ;Store Original Value olen = len END ;**************************************************************** PRO MAINNT_EVENT, Event ;This procedure sets the variable: "noise_type" to be the noise type ;chosen. ; The choices are: ; noise_type= 1 ===> Normal ; 2 ===> Uniform ; 3 ===> Poisson COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON NTYPE, onoise_type WIDGET_CONTROL,Event.Id,GET_UVALUE=Ev CASE Ev OF 'Normal': BEGIN ;Print, 'Event for Normal' noise_type = 1 END 'Uniform': BEGIN ;Print, 'Event for Uniform' noise_type = 2 END 'Poisson': BEGIN ;Print, 'Event for Poisson' noise_type = 3 END 'OK': BEGIN ;Keep the chosen value ;Print, 'Event for OK' ;PRINT, noise_type WIDGET_CONTROL, event.top, /destroy END 'Cancel': BEGIN ;Keep the original value ;Print, 'Event for Cancel' noise_type = onoise_type ;PRINT, noise_type WIDGET_CONTROL, event.top, /destroy END ENDCASE END ;of procedure MAINNT_Event ;**************************************************************** PRO NOTYPE, GROUP=Group ;This procedure creates a widget with button parameter choices ;for choosing the type of noise to add to the generated signal ;or data_set with the Add_Noise menu option. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON NTYPE, onoise_type IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0 MAINNT = WIDGET_BASE(GROUP_LEADER=Group, $ COLUMN=3, $ MAP=1, $ TITLE='Noise Type', $ UVALUE='MAINNT') LABEL11 = WIDGET_LABEL( MAINNT, $ UVALUE='Add Noise', $ VALUE='Add Noise', $ YOFFSET=100) BASE5 = WIDGET_BASE(MAINNT, $ COLUMN=1, $ MAP=1, $ UVALUE='BASE5') BUTTON6 = WIDGET_BUTTON( BASE5, $ UVALUE='Normal', $ VALUE='Normal') BUTTON7 = WIDGET_BUTTON( BASE5, $ UVALUE='Uniform', $ VALUE='Uniform') BUTTON8 = WIDGET_BUTTON( BASE5, $ UVALUE='Poisson', $ VALUE='Poisson') BASE12 = WIDGET_BASE(MAINNT, $ COLUMN=1, $ MAP=1, $ UVALUE='BASE12') BUTTONOK = WIDGET_BUTTON( BASE12, $ FRAME=10, $ UVALUE='OK', $ VALUE='OK') BUTTONCan = WIDGET_BUTTON( BASE12, $ UVALUE='Cancel', $ VALUE='Cancel') WIDGET_CONTROL, MAINNT, /REALIZE XMANAGER, 'MAINNT', MAINNT ;Store Original Value onoise_type = noise_type END ;of procedure NoType ;**************************************************************** PRO MAINNL_EVENT, Event ;This procedure sets the variable: "noise_lev" to be the value ;typed in in the edit box. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON NLEV, onoise_lev WIDGET_CONTROL,Event.Id,GET_UVALUE=Ev CASE Ev OF 'NOISEFIELD': BEGIN ;Print, 'Event for Noise Level:' WIDGET_CONTROL,Event.Id,GET_VALUE=nl noise_lev = nl END 'OK': BEGIN ;Print, 'Event for OK' ;PRINT, noise_lev WIDGET_CONTROL, event.top, /destroy END 'Cancel': BEGIN ;Print, 'Event for Cancel' noise_lev = onoise_lev ;PRINT, noise_lev WIDGET_CONTROL, event.top, /destroy END ENDCASE END ;of procedure MAINNL_Event ;**************************************************************** PRO NOLEV, GROUP=Group ;This procedure creates a widget with an edit box for the user ;to type in the noise amplitude to add to the generated signal ;or data_set with the Add_Noise menu option. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON NLEV, onoise_lev IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0 MAINNL = WIDGET_BASE(GROUP_LEADER=Group, $ COLUMN=2, $ MAP=1, $ TITLE='Noise Level', $ UVALUE='MAINNL') NoiseVal = [ string(noise_lev) ] NFIELD = CW_FIELD( MAINNL,VALUE=NoiseVal, $ ROW=1, $ FLOAT=1, $ ALL_EVENTS=1, $ TITLE='Noise Level:', $ UVALUE='NOISEFIELD') BASE7 = WIDGET_BASE(MAINNL, $ ROW=2, $ MAP=1, $ UVALUE='BASE7') BUTTON8 = WIDGET_BUTTON( BASE7, $ FRAME=10, $ UVALUE='OK', $ VALUE='OK') BUTTON9 = WIDGET_BUTTON( BASE7, $ UVALUE='Cancel', $ VALUE='Cancel') WIDGET_CONTROL, MAINNL, /REALIZE XMANAGER, 'MAINNL', MAINNL ;Store Original Value onoise_lev = noise_lev END ;of procedure NOLEV ;**************************************************************** PRO PDMENUTH_Event, Event ;This procedure sets the variable: "shrinkage_type" to be the ;denoising method chosen. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal CASE Event.Value OF 'DeNoising Thresh.VisuThresh': BEGIN ;PRINT, 'Event for DeNoising Thresh.VisuThresh' shrinkage_type = 1 END 'DeNoising Thresh.MultiHybrid': BEGIN ;PRINT, 'Event for DeNoising Thresh.MultiHybrid' shrinkage_type = 2 END 'DeNoising Thresh.MultiMAD': BEGIN ;PRINT, 'Event for DeNoising Thresh.MultiMAD' shrinkage_type = 3 END 'DeNoising Thresh.MinMaxThresh': BEGIN ;PRINT, 'Event for DeNoising Thresh.MinMaxThresh' shrinkage_type = 4 END 'DeNoising Thresh.WPDeNoise': BEGIN ;PRINT, 'Event for DeNoising Thresh.WPDeNoise' shrinkage_type = 5 END ENDCASE END ;of procedure PDMENUTH_Event ;**************************************************************** PRO MAINTH_EVENT, Event ;This procedure takes the appropriate action for either pressing ;one of the buttons or selecting a menu item. If a menu item ;is selected, the menu event procedure is called. Otherwise, once ;the OK or Cancel button is pressed the shrinkage type parameters ;are either kept ('OK') or discarded ('Cancel'). COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON SHRINK, oshrinkage type = TAG_NAMES(event, /structure_name) WIDGET_CONTROL,event.id,get_uvalue=ev CASE 1 OF ( type EQ 'WIDGET_BUTTON' ) AND ( ev EQ 'OK' ): BEGIN ;keep new value of len ;PRINT, shrinkage_type WIDGET_CONTROL, event.top, /destroy END ( type EQ 'WIDGET_BUTTON' ) AND ( ev EQ 'Cancel' ): BEGIN ;restore old value of len shrinkage_type = oshrinkage ;PRINT, shrinkage_type WIDGET_CONTROL, event.top, /destroy END ELSE: BEGIN CASE ev OF 'PDMENUTH': PDMENUTH_Event, event ELSE: PRINT, 'Menu item not identified!' ENDCASE ;ev END ;ELSE ENDCASE ;CASE 1.. Checking buttons and menu items END ;MAINTH_Event ;**************************************************************** PRO THRESHOLD, GROUP=Group ;This procedure creates a widget with parameter choices in a ;pull-down menu for choosing the threshold type for the DeNoising ;procedure. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON SHRINK, oshrinkage IF N_ELEMENTS(Group) EQ 0 THEN GROUP=0 junk = { CW_PDMENU_S, flags:0, name:'' } MAINTH = WIDGET_BASE(GROUP_LEADER=Group, $ ROW=1, $ MAP=1, $ TITLE='DeNoising Threshold', $ UVALUE='MAINTH') MenuDesc77 = [ $ { CW_PDMENU_S, 3, 'DeNoising Thresh' }, $ ; 0 { CW_PDMENU_S, 0, 'VisuThresh' }, $ ; 1 { CW_PDMENU_S, 0, 'MultiHybrid' }, $ ; 2 { CW_PDMENU_S, 0, 'MultiMAD' }, $ ; 3 { CW_PDMENU_S, 0, 'MinMaxThresh' }, $ ; 4 { CW_PDMENU_S, 2, 'WPDeNoise' } $ ; 5 ] PDMENUTH = CW_PDMENU( MAINTH, MenuDesc77, /RETURN_FULL_NAME, $ UVALUE='PDMENUTH') BASE12 = WIDGET_BASE(MAINTH, $ COLUMN=1, $ MAP=1, $ UVALUE='BASE12') BUTTONOK = WIDGET_BUTTON( BASE12, $ FRAME=10, $ UVALUE='OK', $ VALUE='OK') BUTTONCAN= WIDGET_BUTTON( BASE12, $ UVALUE='Cancel', $ VALUE='Cancel') WIDGET_CONTROL, MAINTH, /REALIZE XMANAGER, 'MAINTH', MAINTH ;Store Original Value oshrinkage = shrinkage_type END ;of procedure THRESHOLD ;**************************************************************** PRO DATAMENU_EVENT, Event ;This procedure performs the appropriate actions and calls the ;appropriate procedures for the parameters selected from any of the ;three "Data Input" menus (Read 1D Data, Generate 1D Signals, ;and Read 2D Data). COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON Wave_color, $ max_color, max_image, $ white, yellow, lavender, aqua, pink, green, red, orange, blue, $ lt_gray, med_green, brown, olive, purple, dk_gray, black COMMON USERDATA, nf1, nf2, mfile1d, mfile2d, muser_ev1d, muser_ev2d CASE Event.Value OF 'Read 1D Data.Caruso': BEGIN ;PRINT, 'Event for Read 1D Data.Caruso' st = 'caruso' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading caruso.asc', /HOURGLASS WREADDAT, 1, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END 'Read 1D Data.Sunspots': BEGIN ;PRINT, 'Event for Read 1D Data.Sunspots' st = 'sunspots' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading sunspot.asc', /HOURGLASS WREADDAT, 1, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END 'Read 1D Data.Seismic': BEGIN ;PRINT, 'Event for Read 1D Data.Seismic' st = 'seismic' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading seismic.asc', /HOURGLASS WREADDAT, 1, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END 'Read 1D Data.ESCA': BEGIN ;PRINT, 'Event for Read 1D Data.ESCA' st = 'esca' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading esca.asc', /HOURGLASS WREADDAT, 1, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END 'Read 1D Data.Ring': BEGIN ;PRINT, 'Event for Read 1D Data.Ring' st = 'ringsse' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading ringsse.asc', /HOURGLASS WREADDAT, 1, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END 'Read 1D Data.NMR': BEGIN ;PRINT, 'Event for Read 1D Data.NMR' st = 'nmr' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading nmr.asc', /HOURGLASS WREADDAT, 1, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END 'Generate 1D Signals.HeaviSine': BEGIN ;PRINT, 'Event for Generate 1D Signals.HeaviSine' st = 'HeaviSine' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.Bumps': BEGIN ;PRINT, 'Event for Generate 1D Signals.Bumps' st = 'Bumps' sig = WMKSGNAL( st,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.Blocks': BEGIN ;PRINT, 'Event for Generate 1D Signals.Blocks' st = 'Blocks' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.Doppler': BEGIN ;PRINT, 'Event for Generate 1D Signals.Doppler' st = 'Doppler' sig = WMKSGNAL(st, len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.Ramp': BEGIN ;PRINT, 'Event for Generate 1D Signals.Ramp' st = 'Ramp' sig = WMKSGNAL(st, len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.Cusp': BEGIN ;PRINT, 'Event for Generate 1D Signals.Cusp' st = 'Cusp' sig = WMKSGNAL(st, len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.Sing': BEGIN ;PRINT, 'Event for Generate 1D Signals.Sing' st = 'Sing' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.HiSine': BEGIN ;PRINT, 'Event for Generate 1D Signals.HiSine' st = 'HiSine' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.LoSine': BEGIN ;PRINT, 'Event for Generate 1D Signals.LoSine' st = 'LoSine' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.LinChirp': BEGIN ;PRINT, 'Event for Generate 1D Signals.LinChirp' st = 'LinChirp' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.TwoChirp': BEGIN ;PRINT, 'Event for Generate 1D Signals.TwoChirp' st = 'TwoChirp' sig = WMKSGNAL( st,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.QuadChirp': BEGIN ;PRINT, 'Event for Generate 1D Signals.QuadChirp' st = 'QuadChirp' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Generate 1D Signals.MishMash': BEGIN ;PRINT, 'Event for Generate 1D Signals.MishMash' st = 'MishMash' sig = WMKSGNAL(st ,len) WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=st WPLOTIT, st, 1, sig END 'Read 2D Data.Daubech': BEGIN ;PRINT, 'Event for Read 2D Data.Daubech' st = 'Daubech' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading daubech.raw', /HOURGLASS WREADIMG, 1, st, len, wd, sig WPLOTIT, st, 0, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' END 'Read 2D Data.Fingerpr': BEGIN ;PRINT, 'Event for Read 2D Data.Fingerpr' st = 'Fingerpr' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading fingerpr.raw', /HOURGLASS WREADIMG, 1, st, len, wd, sig WPLOTIT, st, 0, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' END 'Read 2D Data.Lincoln': BEGIN ;PRINT, 'Event for Read 2D Data.Lincoln' st = 'Lincoln' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading lincoln.raw', /HOURGLASS WREADIMG, 1, st, len, wd, sig WPLOTIT, st, 0, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' END 'Read 2D Data.MRIScan': BEGIN ;PRINT, 'Event for Read 2D Data.MRIScan' st = 'MRIScan' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Reading mriscan.raw', /HOURGLASS WREADIMG, 1, st, len, wd, sig WPLOTIT, st, 0, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' END ;Check the User-Defined Items ELSE: BEGIN indx1d=WSWHERE(Event.Value EQ muser_ev1d) indx2d=WSWHERE(Event.Value EQ muser_ev2d) CASE 1 of indx1d NE -1: BEGIN ;PRINT, 'Event for '+muser_ev1d(indx1d) st = mfile1d(indx1d).name txtmsg = 'Reading '+strtrim(st,2)+'.asc' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=txtmsg, /HOURGLASS WREADDAT, 2, st, len, wd, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' pt = 'Data Set: '+st WPLOTIT, pt, 1, sig END indx2d NE -1: BEGIN ;PRINT, 'Event for '+muser_ev2d(indx2d) st = mfile2d(indx2d).name txtmsg = 'Reading '+strtrim(st,2)+'.raw' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE=txtmsg, /HOURGLASS WREADIMG, 2, st, len, wd, sig WPLOTIT, st, 0, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='File read completed.' END ELSE: ;No match ENDCASE END ;else ENDCASE ;Event.Value END ;of procedure DATAMENU_Event ;**************************************************************** PRO ACTIONMENU_Event, Event ;This procedure calls the appropriate procedure for the parameters ;selected from any of the three "Actions" menus (Scale, Time-Scale, ;and Compress). COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON Wave_color, $ max_color, max_image, $ white, yellow, lavender, aqua, pink, green, red, orange, blue, $ lt_gray, med_green, brown, olive, purple, dk_gray, black ;Check that sig is a defined array, otherwise this procedure ;will crash. sz = N_ELEMENTS(sig) CASE sz OF 0: undef = 'True' ELSE: undef = 'False' ENDCASE CASE undef OF 'False': BEGIN ;We have a valid data array defined so perform action ;print, Event.Value CASE Event.Value OF 'Scale Actions.Scalegram': BEGIN ;PRINT, 'Event for Scale Actions.Scalegram' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Calculating Scalegram.', /HOURGLASS ;Truncate sig array appropriately and get QMF WINTWAVE, sig, WaveType, ParVal, QMF, LD ;Call scalegram WDOSCEG WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Scale Actions.DWT': BEGIN ;PRINT, 'Event for Scale Actions.DWT' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Calculating Discrete Wavelet Transform.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDODWT, sig, QMF, LD, st, 3, wc WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Time-Scale Actions.Scalogram': BEGIN ;PRINT, 'Event for Time-Scale Actions.Scalogram' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Calculating Scalogram.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDOSCOG WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Time-Scale Actions.Multi-Resolution Analysis': BEGIN ;PRINT, 'Event for Time-Scale Actions.Multi-Resolution Analysis' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Performing Multi-Resolution Analysis.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDOMRA WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Time-Scale Actions.Wavelet Packet Analysis': BEGIN ;PRINT, 'Event for Time-Scale Actions.Wavelet Packet Analysis' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Performing Wavelet Packet Analysis.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDOWPA WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Compress Actions.Wavelet Transform Compression': BEGIN ;PRINT, 'Event for Compress Actions.Wavelet Transform Compression' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Calculating Wavelet Transform Compression.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDOWTC WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Compress Actions.Wavelet Packet Compression': BEGIN ;PRINT, 'Event for Compress Actions.Wavelet Packet Compression' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Calculating Wavelet Packet Compression.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDOWPC WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'DeNoise': BEGIN ;PRINT, 'Event for DeNoising' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Calculating DeNoising.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD WDOSHRNK WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END ENDCASE END ;False ELSE: BEGIN ;undef = 'True' Give error message. WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Must have data selected!' END ENDCASE ;undef END ;of procedure ACTIONMENU_EVENT ;**************************************************************** PRO SETMENU_EVENT, Event ;This procedure calls the appropriate procedure for the parameters ;selected from the "Settings" menu. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal CASE Event.Value OF 'Settings.Wavelet': BEGIN ;PRINT, 'Event for Settings.Wavelet' WAVECHOICE END 'Settings.DeNoising Threshold': BEGIN ;PRINT, 'Event for Settings.DeNoising Threshold' THRESHOLD END 'Settings.Noise Type': BEGIN ;PRINT, 'Event for Settings.Noise Type' NOTYPE END 'Settings.Noise Level': BEGIN ;PRINT, 'Event for Settings.Noise Level' NOLEV END 'Settings.Data/Signal Size': BEGIN ;PRINT, 'Event for Settings.Data/Signal Size' SIG_LEN END ENDCASE END ;**************************************************************** PRO MISCMENU_EVENT, Event ;This procedure calls the appropriate procedures for the events ;selected from the "Misc" menu. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal ;Check that sig is a defined array, otherwise this procedure ;will crash. sz = N_ELEMENTS(sig) CASE sz OF 0: undef = 'True' ELSE: undef = 'False' ENDCASE CASE undef OF 'False': BEGIN ;We have a valid data array defined so perform action ;print, Event.Value CASE Event.Value OF 'Misc.Add Noise': BEGIN ;PRINT, 'Event for Misc.Add Noise' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Adding Noise.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD ncol = WGETSIZE(sig, nrow) WADNOISE, sig, nrow, ncol, noise_type, noise_lev, tt If tt EQ 'S' then WPLOTIT, st, 1, sig ELSE WPLOTIT, st, 10, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Misc.Normalize': BEGIN ;PRINT, 'Event for Misc.Normalize' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Normalizing Data.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD sig = WNNOISE(sig,QMF, tt) If tt EQ 'S' then WPLOTIT, st, 1, sig ELSE WPLOTIT, st, 10, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END 'Misc.DeTrend': BEGIN ;PRINT, 'Event for Misc.DeTrend' WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='DeTrending Data.', /HOURGLASS WINTWAVE, sig, WaveType, ParVal, QMF, LD sig = WDETREND(sig, tt) If tt EQ 'S' then WPLOTIT, st, 1, sig ELSE WPLOTIT, st, 10, sig WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Done.' END ENDCASE END ;False ELSE: BEGIN ;undef = 'True' Give error message. WIDGET_CONTROL, TEXT_ANNOUNCE, SET_VALUE='Must have data defined!' END ENDCASE ;undef END ;of Procedure MISCMENU_EVENT ;**************************************************************** PRO MAIN_EVENT, event ;This procedure calls the correct event procedure based on ;which menu item or buttons were selected. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal type = TAG_NAMES(event, /structure_name) WIDGET_CONTROL,event.id,get_uvalue=ev IF ( type EQ 'WIDGET_BUTTON' ) AND ( ev EQ 'Done' ) THEN BEGIN WIDGET_CONTROL, event.top, /destroy ENDIF ELSE BEGIN CASE ev OF ; event for pdmenu3 'DATAMENU': DATAMENU_EVENT, event 'SETMENU': SETMENU_EVENT, event 'ACTIONMENU': ACTIONMENU_EVENT, event 'MISCMENU': MISCMENU_EVENT, event ELSE: print, 'Undefined Menu!' ENDCASE ;case ev END ;endelse END ;procedure MAIN_EVENT ;**************************************************************** PRO wwb, GROUP=Group ;This procedure sets up the widgets, begins defining global variables, ;and is the main procedure for which the Wavelet Workbench is called. COMMON WWB_COMMON, $ TEXT_ANNOUNCE, wd, sig, len, st, noise_type, noise_lev, $ QMF, LD, shrinkage_type, WaveType, ParVal COMMON USERDATA, nf1, nf2, mfile1d, mfile2d, muser_ev1d, muser_ev2d IF N_ELEMENTS(group) eq 0 then group=0 ;-------------------------------------------------------------- ;Get working directory from user (for finding data directories) ;-------------------------------------------------------------- ;--------------- ;To Change the WWB Default Directory using the WWBDIR Widget ;(i.e. not assuming that there is an IDLPATH set) then: ;--------------- ; 0. set IDL search path and/or "working folder" to be ; the location of the WWB directory ; 1. set the default_str directory to a valid path ; (e.g. default_str = 'Mac Hard Disk:WWB:') ; 2. uncomment the wd = default_str ; 3. uncomment the WWBDIR call ; 4. COMMENT OUT the lines between the ";>>" and the ";>>" ;Miscellaneous Mac directories ;default_str = 'Wild Woman:Wavelet Workbench:WWB:' ;default_str = 'Schršdinger''s Cat:WWB:' default_str = 'Mac Hard Disk:WWB:' ;Note: VMS would look something like: ;default_str = '$DISK3:[AGRAPS.WWB]' ;wd = default_str ;WWBDIR ;--------------- ;Automatically get the path of WWB from the first directory in the ;search path! ;--------------- ;Comment out the lines between the ";>>" and ";>>" and follow the ;instructions, above, if you wish to have more control over setting ;the path! ;>> ;Get a string of the first directory in the search path current = '' ; CD, current = current CASE current OF '': BEGIN ;No path set! wd = default_str WWBDIR END ELSE: wd = current ENDCASE ;>> ;Diagnostics ;PRINT, ' ' ;PRINT, 'Path for Wavelet Workbench is: ' ;PRINT, wd ;PRINT, ' ' ;-------------------------------------------------------------- ;Get the file identifiers of the User-Defined 1D and 2D files ;-------------------------------------------------------------- WGETUSER, wd, user1d, user2d, nf1, nf2 ;------------------------------------------------------------ ;Now create a structure for the 1D and 2D Data menus based on ;what's in the 1D and 2D user-defined directories ;------------------------------------------------------------ fstruct = { CW_PDMENU_S, flags:0, name:'' } ;Do 1D user-defined data mfile1d = REPLICATE({CW_PDMENU_S}, nf1) ;array of CW_PDMENU_S structure muser_ev1d = STRARR(nf1) ;user-event strings FOR i = 0, nf1-1 DO BEGIN IF i EQ nf1-1 THEN fstruct.flags = 2 ELSE fstruct.flags = 0 fstruct.name = user1d(i) mfile1d(i) = fstruct muser_ev1d(i) = 'Read 1D Data.' + strtrim(user1d(i), 2) END ;Do 2D user-defined data mfile2d = REPLICATE({CW_PDMENU_S}, nf2) ;array of CW_PDMENU_S structure muser_ev2d = strarr(nf2) ;user-event strings FOR i = 0, nf2-1 DO BEGIN IF i EQ nf2-1 THEN fstruct.flags = 2 ELSE fstruct.flags = 0 fstruct.name = user2d(i) mfile2d(i) = fstruct muser_ev2d(i) = 'Read 2D Data.' + strtrim(user2d(i), 2) END ;----------------------------------------------------- ;SET UP WIDGETS ;----------------------------------------------------- MAIN = WIDGET_BASE(GROUP_LEADER=Group, $ ROW=3, $ MAP=1, $ TITLE='Wavelet Workbench', $ UVALUE='MAIN') ;----------------------------------------------------- ;Set up widgets for text message window and Done button ;----------------------------------------------------- BASE24 = WIDGET_BASE(MAIN, $ ROW=1, $ MAP=1, $ UVALUE='BASE24') TextVal490 = [ $ 'Welcome to the Wavelet Workbench!' ] TEXT_ANNOUNCE = WIDGET_TEXT( BASE24,VALUE=TextVal490, $ ALL_EVENTS=1, $ UVALUE='TEXT22', $ XSIZE=50, $ YSIZE=1) BUTTON23 = WIDGET_BUTTON( BASE24, $ UVALUE='Done', $ VALUE='Done') ;----------------------------------------------------- ;Set up menu widgets for data inputs/signal generation ;and parameter settings (wavelet choice etc.) ;----------------------------------------------------- BASE2 = WIDGET_BASE(MAIN, $ ROW=1, $ MAP=1, $ UVALUE='BASE2') MenuDesc399 = [ $ { CW_PDMENU_S, 1, 'Read 1D Data' }, $ { CW_PDMENU_S, 0, 'Caruso' }, $ { CW_PDMENU_S, 0, 'Sunspots' }, $ { CW_PDMENU_S, 0, 'Seismic' }, $ { CW_PDMENU_S, 0, 'ESCA' }, $ { CW_PDMENU_S, 0, 'Ring' }, $ { CW_PDMENU_S, 0, 'NMR' }, $ mfile1d,$ { CW_PDMENU_S, 1, 'Generate 1D Signals' }, $ { CW_PDMENU_S, 0, 'HeaviSine' }, $ { CW_PDMENU_S, 0, 'Bumps' }, $ { CW_PDMENU_S, 0, 'Blocks' }, $ { CW_PDMENU_S, 0, 'Doppler' }, $ { CW_PDMENU_S, 0, 'Ramp' }, $ { CW_PDMENU_S, 0, 'Cusp' }, $ { CW_PDMENU_S, 0, 'Sing' }, $ { CW_PDMENU_S, 0, 'HiSine' }, $ { CW_PDMENU_S, 0, 'LoSine' }, $ { CW_PDMENU_S, 0, 'LinChirp' }, $ { CW_PDMENU_S, 0, 'TwoChirp' }, $ { CW_PDMENU_S, 0, 'QuadChirp' }, $ { CW_PDMENU_S, 2, 'MishMash' }, $ { CW_PDMENU_S, 3, 'Read 2D Data' }, $ { CW_PDMENU_S, 0, 'Daubech' }, $ { CW_PDMENU_S, 0, 'Fingerpr' }, $ { CW_PDMENU_S, 0, 'Lincoln' }, $ { CW_PDMENU_S, 0, 'MRIScan' }, $ mfile2d] DATAMENU = CW_PDMENU( BASE2, MenuDesc399, /RETURN_FULL_NAME, $ UVALUE='DATAMENU') MenuDesc208 = [ $ { CW_PDMENU_S, 3, 'Settings' }, $ ; 0 { CW_PDMENU_S, 0, 'Wavelet' }, $ ; 1 { CW_PDMENU_S, 0, 'DeNoising Threshold' }, $ ; 2 { CW_PDMENU_S, 0, 'Noise Type' }, $ ; 3 { CW_PDMENU_S, 0, 'Noise Level' }, $ ; 4 { CW_PDMENU_S, 2, 'Data/Signal Size' } $ ; 5 ] SETMENU = CW_PDMENU( BASE2, MenuDesc208, /RETURN_FULL_NAME, $ UVALUE='SETMENU') ;----------------------------------------------------- ;Set up menu widgets for "Actions" (Wavelet Transforms etc.) ;----------------------------------------------------- BASE27 = WIDGET_BASE(MAIN, $ ROW=1, $ MAP=1, $ UVALUE='BASE27') MenuDesc113 = [ $ { CW_PDMENU_S, 1, 'Scale Actions' }, $ ; 0 { CW_PDMENU_S, 0, 'Scalegram' }, $ ; 1 { CW_PDMENU_S, 2, 'DWT' }, $ ; 2 { CW_PDMENU_S, 1, 'Time-Scale Actions' }, $ ; 3 { CW_PDMENU_S, 0, 'Scalogram' }, $ ; 4 { CW_PDMENU_S, 0, 'Multi-Resolution Analysis' }, $ ; 5 { CW_PDMENU_S, 2, 'Wavelet Packet Analysis' }, $ ; 6 { CW_PDMENU_S, 1, 'Compress Actions' }, $ ; 7 { CW_PDMENU_S, 0, 'Wavelet Transform Compression' }, $ ; 8 { CW_PDMENU_S, 2, 'Wavelet Packet Compression' }, $ ; 9 { CW_PDMENU_S, 2, 'DeNoise' } $ ; 10 ] ACTIONMENU = CW_PDMENU( BASE27, MenuDesc113, /RETURN_FULL_NAME, $ UVALUE='ACTIONMENU') BASE37 = WIDGET_BASE(MAIN, $ ROW=1, $ MAP=1, $ UVALUE='BASE37') MenuDesc120 = [ $ { CW_PDMENU_S, 3, 'Misc' }, $ ; 0 { CW_PDMENU_S, 0, 'Add Noise' }, $ ; 1 { CW_PDMENU_S, 0, 'Normalize' }, $ ; 2 { CW_PDMENU_S, 2, 'DeTrend' } $ ; 3 ] MISCMENU= CW_PDMENU( BASE37, MenuDesc120, /RETURN_FULL_NAME, $ UVALUE='MISCMENU') ;----------------------------------------------------- ;Global variable defaults ;----------------------------------------------------- ;Global Defaults WaveType = 'Haar' ParVal = 1 len = 1024 noise_type = 1 noise_lev = .1 shrinkage_type = 1 WIDGET_CONTROL, main, /realize XMANAGER, 'MAIN', main END ;of main procedure WWB ;****************************************************************