;+ ; NAME: ; qSkyImage ; PURPOSE: ; Widget: qSkyImage ; CATEGORY: ; Widgets ; CALLING SEQUENCE: ; qImage, filter, image=image, group=group, img_offset=img_offset, wid_base=wid_base ; INPUTS: ; filter scalar; type: string; default: *.* ; file name filter for file selection ; If the filter does not contain a wildcard (i.e. is the ; name of a single file) then an attempt is made to load ; the image from the file. ; OPTIONAL INPUT PARAMETERS: ; group=group scalar; type: long integer ; group leader passed to XMANAGER ; image=image array[n,m]; type: any ; image array to be displayed. If specified this image ; is displayed, overriding the filter specification. ; wid_base=wid_base ; scalar; type: long integer ; if this is the widget ID of a valid widget, then ; qImage assumes that it is an existing instance of ; itself and will use it to display the image ; Otherwise qImage will create a new instance. ; OUTPUTS: ; (to widget) ; CALLS: ; TimeSystem ; qImage_Send, qImage_Pick, qImage_TrackPeak, qImage_Gain, qImage_cw, filepath ; qImage_FileInfo, qImage_Clean, qImage_Save, qImage_Magnify ; PROCEDURE: ; The state structure is as follows: ; ; state = {STATE_QSKYIMAGE, $ ; wid_base : 0L, $ ; wid_done : 0L, $ ; wid_calc : 0L, $ ; wid_matrix : 0L, $ Button widget to select data file with 3D matrices ; User value: pointer array for all loaded data cubes ; wid_filter : 0L, $ ; wid_info : 0L, $ ; wid_resol : 0L, $ ; ; wid_list : 0L, $ Droplist widget: descriptors for all loaded data cubes ; User value: copy of all descriptors (apparently there ; is no easy way to get this directly from the value) ; wid_histo : 0L, $ Button widget to make histogram for current data cube ; wid_tlabel : 0L, $ Label widget ; User value: state.wid_uttime or state.wid_rotation ; wid_clabel : 0L, $ Label widget ; User value: state.wid_ecliptic or state.wid_heliographic ; wid_tmatrix : 0L, $ CW_FIELD widget: start time of 3D matrix ; User value: format for display of Carrington variable ; State information ; ; wid_tdisplay : 0L, $ CW_FIELD widget: display time ; wid_loc : lonarr(3), $ ; wid_dir : lonarr(2), $ ; wid_fov : 0L, $ ; wid_tilt : 0L, $ ; ; wid_uttime : 0L, $ ; wid_rotation : 0L, $ ; ; wid_heliographic: 0L, $ ; wid_ecliptic : 0L $ ; } ; MODIFICATION HISTORY: ; MAY-2000, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ;- pro qSkyImage_Event, event ; event.top should be ID of the qImage top level widget ; qImage_cw should make sure to set the proper ID before passing an event on. ; Get the state structure from the top level widget widget_control, event.top, get_uvalue=state, /no_copy case event.id of ; ID of widget that generated the message ; Intercepts WIDGET_KILL_REQUEST from top level widget event.top : qSkyImage_Kill, state, event state.wid_done : qSkyImage_Kill, state, event state.wid_matrix : qSkyImage_Pick, state state.wid_filter : qSkyImage_Pick, state, event state.wid_info : qSkyImage_FileInfo, state state.wid_calc : qSkyImage_Calculate, state, /getcube state.wid_output : ; No action needed (yet) state.wid_show : qSkyImage_Calculate, state state.wid_uttime : qSkyImage_ChangeTimes, state, event state.wid_rotation : qSkyImage_ChangeTimes, state, event state.wid_ecliptic : qSkyImage_ChangeCoordinates, state, event state.wid_heliographic: qSkyImage_ChangeCoordinates, state, event state.wid_mapping[0]: qSkyImage_ChangeMapping, state, event state.wid_mapping[1]: qSkyImage_ChangeMapping, state, event state.wid_mapping[2]: qSkyImage_ChangeMapping, state, event state.wid_list : qSkyImage_List, state, event state.wid_mhisto : qSkyImage_Histogram, state state.wid_vhisto : qSkyImage_Histogram, state, /fovcube else: begin print, 'qSkyImage: unexpected event' print, tag_names(event, /structure_name) print, event end endcase ; Put the state structure back where it belongs ; (the widget may have been destroyed already, so we check for event.top for validity.) if widget_info(event.top,/valid_id) then $ widget_control, event.top, set_uvalue=state, /no_copy return & end pro qSkyImage, filter, matrix=matrix, group=group on_error, 2 if n_elements(filter) eq 0 then filter = filepath(root=getenv('DAT'),'t3d*.*') ; State[0] time of image in days since 2000 Jan 1.5 (njd). ; if equal to !values.f_nan it is set to the start of the ; rotation specified in the rotation keyword ; State[1:3] position of viewer (longitude, latitude, heliocentric distance) ; By default, ecliptic coordinates are assumed. ; Set /heliographic keyword to input heliographic coordinates. ; The heliocentric distance is in AU. ; State[4:5] viewing direction corresponding to center of image ; (longitude, latitude) in the same coordinate system as used for ; the viewer location, but with the viewer in the origin. ; State[6] Angular width of rectangular field of view ; State[7] ??? Tilt angle of field of view. Zero tilt means that the horizontal ; direction in the image is parallel to the ecliptic or solar ; equator (depending on the setting of keyword /heliographic) ; Tilt angle increases counterclockwise. state = {STATE_QSKYIMAGE, $ wid_base : 0L, $ wid_done : 0L, $ wid_matrix : 0L, $ wid_filter : 0L, $ wid_info : 0L, $ wid_calc : 0L, $ wid_output : 0L, $ wid_show : 0L, $ wid_list : 0L, $ wid_mhisto : 0L, $ wid_vhisto : 0L, $ wid_tlabel : 0L, $ wid_clabel : 0L, $ wid_tmatrix : 0L, $ wid_rmatrix : lonarr(2), $ wid_earth : lonarr(3), $ ; State information wid_tdisplay : 0L, $ wid_loc : lonarr(3), $ wid_dir : lonarr(2), $ wid_fov : 0L, $ wid_tilt : 0L, $ wid_uttime : 0L, $ wid_rotation : 0L, $ wid_heliographic: 0L, $ wid_ecliptic : 0L, $ wid_value : lonarr(4), $ wid_color : lonarr(4), $ wid_opacity : lonarr(4), $ wid_power : 0L, $ wid_grid : lonarr(3), $ wid_size : lonarr(2), $ wid_mapping : lonarr(3) $ } ch_time = 21 ch_rad = 5 ch_float= 8 xs_lab = 80 xs_time = 60 xs_rad = 40 xs_loc = 80 xs_fov = 60 xs_dat = 20 xs_val = 40 tt = TimeSystem() tmatrix = TimeString(tt, /ymd) tdisplay = TimeString(tt, /ymd) earth = NewcombSun(tt, /deg, /heliocentric) loc = earth dir = [AngleRange(earth[0]+180, /deg),-earth[1]] wid_base = widget_base(title='qSkyImage', /column, /tlb_kill_request_events) dummy = widget_base(wid_base, /row) state.wid_done = widget_button(dummy, value=filepath(root=getenv('SSW_SMEI_UCSD'),subdir='image','done.ico'), /bitmap) state.wid_matrix = widget_button(dummy, value='Get Matrix') state.wid_filter = cw_field(dummy, value=filter, /string, $ title='Filter', xsize=40, /return_ev) state.wid_info = widget_button(dummy, value=filepath(root=getenv('SSW_SMEI_UCSD'),subdir='image','info.ico'), /bitmap) state.wid_calc = widget_button(dummy, value='Calc View') state.wid_show = widget_button(dummy, value='Show View') list = ['Display','Tiff (8-bit)','Tiff (24 bit)','Bitmap (8-bit)','Bitmap (24-bit)'] state.wid_output = widget_droplist(dummy, value=list, uvalue=list) dummy = widget_base(wid_base, /row) dummy1 = widget_base(dummy, /column) state.wid_tlabel = widget_label(dummy1, xsize=xs_lab, value='Time') state.wid_tmatrix = cw_field(dummy1, value=tmatrix , /string, title='Start Matrix', /row, xsize=ch_time, lxsize=xs_time) state.wid_tdisplay = cw_field(dummy1, value=tdisplay, /string, title='Display Time', /row, xsize=ch_time, lxsize=xs_time) dummy2 = widget_base(dummy1, /row) dummy3 = widget_label(dummy2, xsize=xs_time, value=' ') dummy3 = widget_base (dummy2, /row, /exclusive, frame=1) state.wid_uttime = widget_button(dummy3, value='UT' , uvalue=0B) state.wid_rotation = widget_button(dummy3, value='Rotation', uvalue=0B) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value='3D Matrix') state.wid_rmatrix[0] = cw_field(dummy1, value=0., /floating, title='Inner R', /row, xsize=ch_float, lxsize=xs_rad) state.wid_rmatrix[1] = cw_field(dummy1, value=1., /floating, title='Outer R', /row, xsize=ch_float, lxsize=xs_rad) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value='Field of view') state.wid_fov = cw_field(dummy1, value=90., /floating, xsize=ch_float, lxsize=xs_fov, title='Width (deg)', /row) state.wid_tilt = cw_field(dummy1, value= 0., /floating, xsize=ch_float, lxsize=xs_fov, title='Tilt (deg)', /row) dummy2 = widget_base(dummy1, /row) dummy3 = widget_base (dummy2, /row, /exclusive, frame=1) state.wid_ecliptic = widget_button(dummy3, value='Ecliptic' , uvalue=0B) state.wid_heliographic = widget_button(dummy3, value='Helio', uvalue=0B) dummy1 = widget_base(dummy, /column) state.wid_clabel = widget_label(dummy1, xsize=xs_lab, value=' Location') state.wid_loc[0]= cw_field(dummy1, value=loc[0], /floating, lxsize=xs_loc, xsize=ch_float, title='Longitude (deg)', /row) state.wid_loc[1]= cw_field(dummy1, value=loc[1], /floating, lxsize=xs_loc, xsize=ch_float, title='Latitude (deg)', /row) state.wid_loc[2]= cw_field(dummy1, value=loc[2], /floating, lxsize=xs_loc, xsize=ch_float, title='Distance (AU)' , /row) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Direction') state.wid_dir[0]= cw_field(dummy1, value=dir[0], /floating, xsize=ch_float, title=' ', /row) state.wid_dir[1]= cw_field(dummy1, value=dir[1], /floating, xsize=ch_float, title=' ', /row) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Earth') state.wid_earth[0]= cw_field(dummy1, value=earth[0], /floating, xsize=ch_float, title=' ', /row) state.wid_earth[1]= cw_field(dummy1, value=earth[1], /floating, xsize=ch_float, title=' ', /row) state.wid_earth[2]= cw_field(dummy1, value=earth[2], /floating, xsize=ch_float, title=' ', /row) dummy = widget_base(wid_base, /row) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Min') state.wid_value [0] = cw_field(dummy1, value=0., /floating, title='Value' , lxsize=xs_val, xsize=ch_float) state.wid_opacity[0] = cw_field(dummy1, value=0., /floating, title='Opacity', lxsize=xs_val, xsize=ch_float) state.wid_color [0] = cw_field(dummy1, value=125 , /integer , title='Color' , lxsize=xs_val, xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Low') state.wid_value [1] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_opacity[1] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_color [1] = cw_field(dummy1, value=125, /integer , title=' ', xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' High') state.wid_value [2] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_opacity[2] = cw_field(dummy1, value=0.5, /floating, title=' ', xsize=ch_float) state.wid_color [2] = cw_field(dummy1, value=225, /integer , title=' ', xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Max') state.wid_value [3] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_opacity[3] = cw_field(dummy1, value=0.5, /floating, title=' ', xsize=ch_float) state.wid_color [3] = cw_field(dummy1, value=225 , /integer, title=' ', xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' FOV grid') state.wid_grid[0] = cw_field(dummy1, value=31, /integer, xsize=5, title='X:', lxsize=xs_dat) state.wid_grid[1] = cw_field(dummy1, value=31, /integer, xsize=5, title='Y:', lxsize=xs_dat) state.wid_grid[2] = cw_field(dummy1, value=31, /integer, xsize=5, title='Z:', lxsize=xs_dat) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Window') state.wid_size[0] = cw_field(dummy1, value=400, /integer, xsize=5, title=' ') state.wid_size[1] = cw_field(dummy1, value=400, /integer, xsize=5, title=' ') dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value='Mapping') dummy2 = widget_base (dummy1, /exclusive, frame=1, /column) state.wid_mapping[0] = widget_button(dummy2, value='Distance', uvalue=0B) state.wid_mapping[1] = widget_button(dummy2, value='Elongation', uvalue=0B) state.wid_mapping[2] = widget_button(dummy2, value='Area', uvalue=0B) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' ') state.wid_list = widget_droplist(dummy1, value='no data ', title='3D sets', /dynamic_resize, sensitive=0) state.wid_mhisto= widget_button (dummy1, value='Matrix Histogram', sensitive=0) state.wid_vhisto= widget_button (dummy1, value='View Histogram ', sensitive=0) widget_control, state.wid_tlabel , set_uvalue=state.wid_uttime widget_control, state.wid_uttime , /set_button, set_uvalue=1B widget_control, state.wid_clabel , set_uvalue=state.wid_ecliptic widget_control, state.wid_ecliptic, /set_button, set_uvalue=1B widget_control, state.wid_mapping[1], /set_button, set_uvalue=1B widget_control, state.wid_tmatrix , set_uvalue='(F10.5)' widget_control, wid_base, set_uvalue=state, /no_copy widget_control, wid_base, /realize xmanager, 'qSkyImage', wid_base, event_handler='qSkyImage_Event', group=Group, /no_block return & end