NAME:
cw_cpmgr
PURPOSE: (one line)
Interactive sky selection for faint comet photometry (from itool).
DESCRIPTION:
CATEGORY:
Compound Widgets
CALLING SEQUENCE:
id = cw_cpmgr( parent )
INPUTS:
parent : Widget id of parent.
OPTIONAL INPUT PARAMETERS:
KEYWORD PARAMETERS:
OUTPUTS:
COMMON BLOCKS:
SIDE EFFECTS:
RESTRICTIONS:
PROCEDURE:
MODIFICATION HISTORY:
Written by Doug Loucks, Lowell Observatory, January, 1994.
8/19/1994, DWL, Converted to compound widget. No common blocks.
96/01/16, MWB, Cosmetic modification to button labels plus protection
on Dismiss button if there is a pending operation.
------------------------------------------------------------------------------
Procedure cw_cpmgr_ac1
This procedure computes the sky values for each of the sets of pixels
(accepted : pidxcum, new set : pidx, and the sum of these : pidxall).
------------------------------------------------------------------------------
RO cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
RO cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
image = image[*,*,im_parms.frame]
image = image[*,*,im_parms.frame]
Check for accepted pixels.
F N_ELEMENTS( pidxcum ) GT 1 THEN BEGIN
;Compute sky average and sky sigma.
;Compute sky average and sky sigma.
robomean, timage[ pidxcum ], 3.0, 0.5, skavcum, avgdev, $
stddev, var, skew, kurt, nsky, pcum, STDMEAN=sksicum
state.skavcum = skavcum
state.sksicum = sksicum
state.sksicum = sksicum
;Compute object flux and magnitude.
basphote, ph_parms.gain, timage, im_parms.exptime, $
state.objx, state.objy, ph_parms.radius, $
state.skavcum, -state.sksicum, /NOLOG, /SILENT, FLUX=flux, $
FLERR=fluxerr, MAG=mag, ERR=magerr, XCEN=xcen, YCEN=ycen
FLERR=fluxerr, MAG=mag, ERR=magerr, XCEN=xcen, YCEN=ycen
state.pnskcum = flux
state.pnskercum = fluxerr
state.magcum = mag
state.magercum = magerr
NDIF ELSE BEGIN
state.skavcum = 0.0
state.sksicum = 0.0
state.pnskcum = 0.0
state.pnskercum = 0.0
state.magcum = 99.9999
state.magercum = 0.0
NDELSE
NDELSE
Check for new batch of pixels.
F N_ELEMENTS( pidx ) GT 1 THEN BEGIN
;Compute sky average and sky sigma.
robomean, timage[ pidx ], 3.0, 0.5, skav, avgdev, $
stddev, var, skew, kurt, nsky, pix, STDMEAN=sksi
state.skav = skav ;New set.
state.sksi = sksi ;New set.
NDIF ELSE BEGIN
state.skav = 0.0
state.sksi = 0.0
state.pnsk = 0.0
state.pnsker = 0.0
NDELSE
NDELSE
Check for combined set of pixels (pidxcum plus pidx).
F N_ELEMENTS( pidxall ) GT 1 THEN BEGIN
state.skpxall = N_ELEMENTS( pidxall )
state.skpxall = N_ELEMENTS( pidxall )
;Compute sky average and sky sigma.
robomean, timage[ pidxall ], 3.0, 0.5, skavall, avgdev, $
stddev, var, skew, kurt, nsky, pall, STDMEAN=sksiall
state.skavall = skavall
state.sksiall = sksiall
state.skpxuall = nsky
state.skpxuall = nsky
;Compute object flux and magnitude.
basphote, ph_parms.gain, timage, im_parms.exptime, $
state.objx, state.objy, ph_parms.radius, $
state.skavall, -state.sksiall, /NOLOG, /SILENT, FLUX=flux, $
FLERR=fluxerr, MAG=mag, ERR=magerr, XCEN=xcen, YCEN=ycen
state.objx = xcen
state.objy = ycen
state.pnskall = flux
state.pnskerall = fluxerr
state.magall = mag
state.magerall = magerr
state.magerall = magerr
;Plot a histogram from the combined set of pixels.
mindat = MIN( pall, MAX=maxdat )
binsiz = ( maxdat - mindat ) / 40.0
IF binsiz GT 0 THEN BEGIN
h = HISTOGRAM( float(pall), BINSIZE=binsiz, MIN=mindat, MAX=maxdat )
idx = FINDGEN( N_ELEMENTS( h ) ) * binsiz + mindat
xtrm = [0.,max(h)]
curwin = !d.window
WIDGET_CONTROL, state.drawid, GET_VALUE=dwin
WSET, dwin
PLOT, idx, h, PSYM=10, TITLE='(Clipped) HISTOGRAM', $
XTITLE='SIGNAL', YSTYLE=11, XMARGIN=[4,3], YMARGIN=[4,3], $
YRANGE=xtrm
AXIS, YAXIS=1, YSTYLE=3, YRANGE=xtrm/total(h)*100.0, YTITLE='N'
WSET, curwin
ENDIF
NDIF ELSE BEGIN
state.skpxall = 0
state.skpxuall = 0
state.skavall = 0.0
state.sksiall = 0.0
state.pnskall = 0.0
state.pnskerall = 0.0
state.magall = 99.9999
state.magerall = 0.0
curwin = !d.window
WIDGET_CONTROL, state.drawid, GET_VALUE=dwin
WSET, dwin
ERASE
WSET, curwin
NDELSE
NDELSE
ND
ND
ND
------------------------------------------------------------------------------
Procedure cw_cpmgr_disp
------------------------------------------------------------------------------
RO cw_cpmgr_disp, state, image, im_parms, ph_parms, INIT=in_init
RO cw_cpmgr_disp, state, image, im_parms, ph_parms, INIT=in_init
image = image[*,*,im_parms.frame]
image = image[*,*,im_parms.frame]
F KEYWORD_SET( in_init ) THEN BEGIN
area = 0.0
pcounts = 0.0
NDIF ELSE BEGIN
area = !pi * ph_parms.radius * ph_parms.radius
boxm, timage, state.objx, state.objy, 5, 5, xmax, ymax
pcounts = timage[ xmax, ymax ]
NDELSE
NDELSE
Compute the sky noise ratio.
igphotsky = area * state.sksiall * ph_parms.gain
hotons = state.pnskall * im_parms.exptime
arphotobj = photons + sigphotsky * sigphotsky
F varphotobj NE 0 THEN BEGIN
sknfrac = sigphotsky * sigphotsky / varphotobj
NDIF ELSE BEGIN
sknfrac = 0.0
NDELSE
NDELSE
F state.ncli LT 0 THEN ncli=0 ELSE ncli=state.ncli
F state.ncli LT 0 THEN ncli=0 ELSE ncli=state.ncli
Build the text array used for the numeric display.
ext =[ STRING( 'Num spots', ncli, ' ', 'Sky pix total', $
state.skpxall, FORMAT='(A,I5,A,A,I7)' ), $
STRING( 'Obj pos x', state.objx, ' ', ' used', $
state.skpxuall, FORMAT='(A,F9.3,A,A,I7)' ), $
STRING( ' y', state.objy, ' ', 'Sky noise ratio', $
sknfrac, FORMAT='(A,F9.3,A,A,F6.3)' ), $
'', $
STRING( 'Peak counts', pcounts, ' (', pcounts-state.skavcum, $
' above sky)', FORMAT='(A,I7,A,I5,A)' ), $
STRING( 'Object+sky ', $
(state.pnskall+state.skavall)/ph_parms.gain, ' +- ', $
(state.pnskerall+state.sksiall)/ph_parms.gain, $
' cts/s', FORMAT='(A,F10.2,A,F8.2,A)' ), $
'', $
STRING( 'Object all', state.pnskall/ph_parms.gain, ' +- ', $
state.pnskerall/ph_parms.gain, ' cts/s', $
FORMAT='(A,F9.2,A,F8.2,A)' ), $
STRING( ' w/o last', state.pnskcum/ph_parms.gain, ' +- ', $
state.pnskercum/ph_parms.gain, ' cts/s', $
FORMAT='(A,F9.2,A,F8.2,A)' ), $
'', $
STRING( 'Sky w/o last', state.skavcum, ' +- ', $
state.sksicum, ' cts', $
FORMAT='(A,F9.2,A,F8.2,A)' ), $
STRING( ' new set', state.skav, ' +- ', $
state.sksi, ' cts/pix', $
FORMAT='(A,F9.2,A,F8.2,A)' ), $
'', $
STRING( 'Mag all', state.magall, ' +- ', $
state.magerall, FORMAT='(A,F9.4,A,F7.4)' ), $
STRING( ' w/o last', state.magcum, ' +- ', $
state.magercum, FORMAT='(A,F9.4,A,F7.4)' ) ]
state.magercum, FORMAT='(A,F9.4,A,F7.4)' ) ]
IDGET_CONTROL, state.statsid, SET_VALUE=text
IDGET_CONTROL, state.statsid, SET_VALUE=text
ND
ND
ND
------------------------------------------------------------------------------
Procedure cw_cpmgr_svl
------------------------------------------------------------------------------
RO cw_cpmgr_svl, id, value
RO cw_cpmgr_svl, id, value
The 'value' is defined to be a structure: {x:0, y:0}
The 'value' is defined to be a structure: {x:0, y:0}
tash = WIDGET_INFO( id, /CHILD )
IDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY
IDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY
Open access to the pixel buffers.
IDGET_CONTROL, state.pidxptr, GET_UVALUE=pidx, /NO_COPY
IDGET_CONTROL, state.pidxcumptr, GET_UVALUE=pidxcum, /NO_COPY
IDGET_CONTROL, state.pidxallptr, GET_UVALUE=pidxall, /NO_COPY
IDGET_CONTROL, state.pidxallptr, GET_UVALUE=pidxall, /NO_COPY
Open access to the image and photometry parameters.
IDGET_CONTROL, state.imageptr, GET_UVALUE=image, /NO_COPY
IDGET_CONTROL, state.imparmsptr, GET_UVALUE=im_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, GET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, GET_UVALUE=ph_parms, /NO_COPY
rame = im_parms.frame
rame = im_parms.frame
tate.ncli = state.ncli + 1
tate.ncli = state.ncli + 1
ASE state.ncli OF
0 : BEGIN
;This should be the object.
;This should be the object.
basphote, ph_parms.gain, image[*,*,frame], im_parms.exptime, $
value.x, value.y, ph_parms.radius, 0.0, 0.0, $
/NOLOG, /SILENT, FLUX=flux, FLERR=fluxerr, MAG=mag, ERR=magerr, $
XCEN=xcen, YCEN=ycen
XCEN=xcen, YCEN=ycen
state.pnskall = flux
state.pnskerall = fluxerr
state.magall = mag
state.magerall = magerr
state.objx = xcen
state.objy = ycen
state.objy = ycen
cw_cpmgr_disp, state, image, im_parms, ph_parms
WIDGET_CONTROL, state.newid, SENSITIVE=1
WIDGET_CONTROL, state.doneid, SENSITIVE=1
END
END
1: BEGIN
;This is the first sky batch.
state.skyx = value.x
state.skyy = value.y
state.skyy = value.y
getannul, image[*,*,frame], value.x, value.y, 0, ph_parms.radius, px, pidx
getannul, image[*,*,frame], value.x, value.y, 0, ph_parms.radius, px, pidx
pidxcum = 0
pidx = pidx
pidxall = pidx
pidxall = pidx
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_disp, state, image, im_parms, ph_parms
END
END
ELSE : BEGIN
;Additional sky spots.
IF N_ELEMENTS( pidx ) GT 1 THEN BEGIN
t = STRING( state.ncli-1, state.skyx, state.skyy, $
state.skav, state.sksi, state.skavall, $
state.sksiall, FORMAT='(I5,I5,I5,1X,G10.6,G10.6,G12.7,G12.7)' )
WIDGET_CONTROL, state.dlistid, SET_VALUE=t, /APPEND
WIDGET_CONTROL, state.dlistid, SET_VALUE=t, /APPEND
pidxcum = pidxall
ENDIF
ENDIF
state.skyx = value.x
state.skyy = value.y
getannul, image[*,*,frame], value.x, value.y, 0, ph_parms.radius, px, pidx
getannul, image[*,*,frame], value.x, value.y, 0, ph_parms.radius, px, pidx
a = [ pidxcum, pidx ]
pidxall = a[ uniq( a, sort( a ) ) ]
pidx = pidx
pidx = pidx
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_disp, state, image, im_parms, ph_parms
WIDGET_CONTROL, state.dlastid, SENSITIVE=1
END
NDCASE
NDCASE
Sensitize some buttons.
IDGET_CONTROL, state.newid, SENSITIVE=1
IDGET_CONTROL, state.clearid, SENSITIVE=1
IDGET_CONTROL, state.dlastid, SENSITIVE=1
IDGET_CONTROL, state.doneid, SENSITIVE=1
IDGET_CONTROL, state.doneid, SENSITIVE=1
Close access to the pixel buffers.
IDGET_CONTROL, state.pidxptr, SET_UVALUE=pidx, /NO_COPY
IDGET_CONTROL, state.pidxcumptr, SET_UVALUE=pidxcum, /NO_COPY
IDGET_CONTROL, state.pidxallptr, SET_UVALUE=pidxall, /NO_COPY
IDGET_CONTROL, state.pidxallptr, SET_UVALUE=pidxall, /NO_COPY
Close access to the image and photometry parameters.
IDGET_CONTROL, state.imageptr, SET_UVALUE=image, /NO_COPY
IDGET_CONTROL, state.imparmsptr, SET_UVALUE=im_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, SET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, SET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY
ND
ND
ND
------------------------------------------------------------------------------
Procedure cw_cpmgr_eve
Event handler.
------------------------------------------------------------------------------
RO cw_cpmgr_eve, event
RO cw_cpmgr_eve, event
tash = WIDGET_INFO( event.handler, /CHILD )
IDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY
IDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY
Open access to the image and photometry parameters.
IDGET_CONTROL, state.imageptr, GET_UVALUE=image, /NO_COPY
IDGET_CONTROL, state.imparmsptr, GET_UVALUE=im_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, GET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, GET_UVALUE=ph_parms, /NO_COPY
Open access to the pixel buffers.
IDGET_CONTROL, state.pidxptr, GET_UVALUE=pidx, /NO_COPY
IDGET_CONTROL, state.pidxcumptr, GET_UVALUE=pidxcum, /NO_COPY
IDGET_CONTROL, state.pidxallptr, GET_UVALUE=pidxall, /NO_COPY
IDGET_CONTROL, state.pidxallptr, GET_UVALUE=pidxall, /NO_COPY
ASE event.id OF
state.dismissid : BEGIN
IF state.ncli NE -1 THEN BEGIN
t = [ $
'You have a pending photometric extraction. If you choose to', $
'proceed this pending operation will be cancelled. If you do', $
'not want to lose the pending measurement, then select cancel', $
'and finish the measurement by clicking Done/Save. Once you', $
'have done this, then click Dismiss again.' ]
con = qannounc( t, TITLE='Comet Photometry Dismiss Confirmation', $
FALSE='Cancel this request', $
TRUE='Ok, delete pending measurement', $
XSIZE=62, YSIZE=5 )
ENDIF ELSE BEGIN
con=1
ENDELSE
ENDELSE
; Proceed if okay
IF con THEN BEGIN
state.ncli = -1
state.objx = 0.0
state.objy = 0.0
pidx = 0
pidxcum = 0
pidxall = 0
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
WIDGET_CONTROL, state.newid, SENSITIVE=0
WIDGET_CONTROL, state.clearid, SENSITIVE=0
WIDGET_CONTROL, state.doneid, SENSITIVE=0
WIDGET_CONTROL, state.dlastid, SENSITIVE=0
WIDGET_CONTROL, state.dlistid, SET_VALUE=''
WIDGET_CONTROL, state.dlistid, SET_VALUE=''
;Hide the widget.
WIDGET_CONTROL, event.top, MAP=0
WIDGET_CONTROL, event.top, MAP=0
;Clear active flag.
WIDGET_CONTROL, event.top, GET_UVALUE=status, /NO_COPY
status.active = 0B
WIDGET_CONTROL, event.top, SET_UVALUE=status, /NO_COPY
ENDIF
END
END
state.newid : BEGIN
WIDGET_CONTROL, event.id, SENSITIVE=0
state.ncli = -1
state.objx = 0.0
state.objy = 0.0
state.objy = 0.0
pidx = 0
pidxcum = 0
pidxall = 0
pidxall = 0
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
WIDGET_CONTROL, state.clearid, SENSITIVE=0
WIDGET_CONTROL, state.doneid, SENSITIVE=0
WIDGET_CONTROL, state.dlastid, SENSITIVE=0
WIDGET_CONTROL, state.dlistid, SET_VALUE=''
END
END
state.clearid : BEGIN
WIDGET_CONTROL, event.id, SENSITIVE=0
state.ncli = 0
state.ncli = 0
pidx = 0
pidxcum = 0
pidxall = 0
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
basphote, ph_parms.gain, image[*,*,im_parms.frame], im_parms.exptime, $
state.objx, state.objy, ph_parms.radius, 0.0, 0.0, $
/NOLOG, /SILENT, FLUX=flux, FLERR=fluxerr, MAG=mag, ERR=magerr, $
XCEN=xcen, YCEN=ycen
XCEN=xcen, YCEN=ycen
state.pnskall = flux
state.pnskerall = fluxerr
state.magall = mag
state.magerall = magerr
state.objx = xcen
state.objy = ycen
state.objy = ycen
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
WIDGET_CONTROL, state.dlastid, SENSITIVE=0
WIDGET_CONTROL, state.dlistid, SET_VALUE=''
END
END
state.dlastid : BEGIN
WIDGET_CONTROL, event.id, SENSITIVE=0
state.ncli = state.ncli - 1
state.ncli = state.ncli - 1
pidx = 0
pidx = 0
IF state.ncli EQ 0 THEN BEGIN
pidxcum = 0
pidxall = 0
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
basphote, ph_parms.gain, image[*,*,im_parms.frame], im_parms.exptime, $
state.objx, state.objy, ph_parms.radius, 0.0, 0.0, $
/NOLOG, /SILENT, FLUX=flux, FLERR=fluxerr, MAG=mag, ERR=magerr, $
XCEN=xcen, YCEN=ycen
XCEN=xcen, YCEN=ycen
state.pnskall = flux
state.pnskerall = fluxerr
state.magall = mag
state.magerall = magerr
state.objx = xcen
state.objy = ycen
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
WIDGET_CONTROL, state.clearid, SENSITIVE=0
ENDIF ELSE BEGIN
pidxall = pidxcum
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_disp, state, image, im_parms, ph_parms
ENDELSE
END
END
state.doneid : BEGIN
;Do the photometry.
objnum = ph_parms.objnum
basphote, ph_parms.gain, image[*,*,im_parms.frame], im_parms.exptime, $
state.objx, state.objy, ph_parms.radius, state.skavall, $
-state.sksiall, ph_parms.logfile, objnum, $
AIRMASS=im_parms.airmass, /ALTLOG, $
BOXMRAD=ph_parms.boxmrad, EXACT=ph_parms.exact, $
NAME=im_parms.object, NOMEXT=ph_parms.nomext, FILTER=im_parms.filter, $
FNAME=im_parms.imfile, JD=im_parms.jd, PSCALE=ph_parms.pscale, $
ZPOINT=ph_parms.zpoint
ph_parms.objnum = objnum
ph_parms.objnum = objnum
state.ncli = -1
state.objx = 0.0
state.objy = 0.0
state.objy = 0.0
pidx = 0
pidxcum = 0
pidxall = 0
pidxall = 0
cw_cpmgr_ac1, state, pidx, pidxall, pidxcum, image, im_parms, ph_parms
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
cw_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
;De-sensitize some widgets.
WIDGET_CONTROL, state.newid, SENSITIVE=0
WIDGET_CONTROL, state.clearid, SENSITIVE=0
WIDGET_CONTROL, state.dlastid, SENSITIVE=0
WIDGET_CONTROL, event.id, SENSITIVE=0
WIDGET_CONTROL, state.dlistid, SET_VALUE=''
END
END
ELSE : BEGIN
MESSAGE, 'Unknown event:', /INFO
HELP, event, /STRUCTURE
END
NDCASE
NDCASE
Close access to the pixel buffers.
IDGET_CONTROL, state.pidxptr, SET_UVALUE=pidx, /NO_COPY
IDGET_CONTROL, state.pidxcumptr, SET_UVALUE=pidxcum, /NO_COPY
IDGET_CONTROL, state.pidxallptr, SET_UVALUE=pidxall, /NO_COPY
IDGET_CONTROL, state.pidxallptr, SET_UVALUE=pidxall, /NO_COPY
Close access to the image and photometry parameters.
IDGET_CONTROL, state.imageptr, SET_UVALUE=image, /NO_COPY
IDGET_CONTROL, state.imparmsptr, SET_UVALUE=im_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, SET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, SET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY
ND
ND
------------------------------------------------------------------------------
Function cw_cpmgr
------------------------------------------------------------------------------
UNCTION cw_cpmgr, parent, IMAGEPTR=imageptr, IMPARMSPTR=imparmsptr, $
PHPARMSPTR=phparmsptr, UVALUE=uvalue
el = STRING( 7B )
el = STRING( 7B )
F NOT KEYWORD_SET( imageptr ) THEN BEGIN
MESSAGE, 'Error. Keyword IMAGEPTR must be specified.' + bel, /INFO
RETURN, 0
NDIF
NDIF
F NOT KEYWORD_SET( imparmsptr ) THEN BEGIN
MESSAGE, 'Error. Keyword IMPARMSPTR must be specified.' + bel, /INFO
RETURN, 0
NDIF
NDIF
F NOT KEYWORD_SET( phparmsptr ) THEN BEGIN
MESSAGE, 'Error. Keyword PHPARMSPTR must be specified.' + bel, /INFO
RETURN, 0
NDIF
NDIF
Define the state control structure.
tate = { $
clearid:0L, $
dismissid:0L, $
dlastid:0L, $
dlistid:0L, $
doneid:0L, $
drawid:0L, $
dwin:0L, $
imageptr:imageptr, $
imparmsptr:imparmsptr, $
magall:99.9999, $
magcum:99.9999, $
magerall:0.0, $
magercum:0.0, $
mainbase:0L, $
newid:0L, $
ncli:-1L, $
objx:0.0, $
objy:0.0, $
phparmsptr:phparmsptr, $
pidxptr:0L, pidxallptr:0L, pidxcumptr:0L, $
pnsk:0.0, pnskcum:0.0, pnskall:0.0, $
pnsker:0.0, pnskercum:0.0, pnskerall:0.0, $
skyx:0, skyy:0, $
skpxcum:0L, skpxall:0L, $
skpxucum:0L, skpxuall:0L, $
skav:0.0, skavcum:0.0, skavall:0.0, $
sksi:0.0, sksicum:0.0, sksiall:0.0, $
statsid:0L $
}
}
Create the main base
F KEYWORD_SET( uvalue ) THEN BEGIN
mainbase = WIDGET_BASE( parent, COLUMN=1, EVENT_PRO='cw_cpmgr_eve', $
PRO_SET_VALUE='cw_cpmgr_svl', UVALUE=uvalue )
NDIF ELSE BEGIN
mainbase = WIDGET_BASE( parent, COLUMN=1, EVENT_PRO='cw_cpmgr_eve', $
PRO_SET_VALUE='cw_cpmgr_svl' )
NDELSE
NDELSE
Row 1, Buttons.
b = WIDGET_BASE( mainbase, /ROW, /FRAME )
tate.dismissid = WIDGET_BUTTON( rb, VALUE='Dismiss' )
tate.dismissid = WIDGET_BUTTON( rb, VALUE='Dismiss' )
tate.newid = WIDGET_BUTTON( rb, VALUE='Start Over' )
IDGET_CONTROL, state.newid, SENSITIVE=0
IDGET_CONTROL, state.newid, SENSITIVE=0
tate.clearid = WIDGET_BUTTON( rb, VALUE='Clear All Skys' )
IDGET_CONTROL, state.clearid, SENSITIVE=0
IDGET_CONTROL, state.clearid, SENSITIVE=0
tate.dlastid = WIDGET_BUTTON( rb, VALUE='Delete Last Sky' )
IDGET_CONTROL, state.dlastid, SENSITIVE=0
IDGET_CONTROL, state.dlastid, SENSITIVE=0
tate.doneid = WIDGET_BUTTON( rb, VALUE='Done/Save' )
IDGET_CONTROL, state.doneid, SENSITIVE=0
IDGET_CONTROL, state.doneid, SENSITIVE=0
Stats and histogram section.
b = WIDGET_BASE( mainbase, /ROW, /FRAME, UVALUE=0 )
b1 = WIDGET_BASE( rb, /COLUMN, UVALUE=0 )
b2 = WIDGET_BASE( rb, /COLUMN, UVALUE=0 )
Use these bases to store the pixel arrays.
tate.pidxptr = rb
tate.pidxallptr = cb1
tate.pidxcumptr = cb2
b = cb1
tate.statsid = WIDGET_TEXT( tb, VALUE='', XSIZE=42, YSIZE=15 )
b = cb2
tate.drawid = WIDGET_DRAW( tb, XSIZE=200, YSIZE=200 )
tate.drawid = WIDGET_DRAW( tb, XSIZE=200, YSIZE=200 )
Scrollable text widget for display of accepted data.
First, do the label for the columns.
b = WIDGET_BASE( mainbase, /ROW )
1 2 3 4 5 6
12345678901234567890123456789012345678901234567890123456789012345
isplist = ' spot x y average sigma cum avg cum sig'
1 = WIDGET_LABEL( rb, VALUE=displist )
tate.dlistid = WIDGET_TEXT( mainbase, VALUE='', /SCROLL, XSIZE=60, YSIZE=4 )
tate.dlistid = WIDGET_TEXT( mainbase, VALUE='', /SCROLL, XSIZE=60, YSIZE=4 )
Initialize the display text widget.
IDGET_CONTROL, state.imageptr, GET_UVALUE=image, /NO_COPY
IDGET_CONTROL, state.imparmsptr, GET_UVALUE=im_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, GET_UVALUE=ph_parms, /NO_COPY
w_cpmgr_disp, state, image, im_parms, ph_parms, /INIT
IDGET_CONTROL, state.imageptr, SET_UVALUE=image, /NO_COPY
IDGET_CONTROL, state.imparmsptr, SET_UVALUE=im_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, SET_UVALUE=ph_parms, /NO_COPY
IDGET_CONTROL, state.phparmsptr, SET_UVALUE=ph_parms, /NO_COPY
tash = WIDGET_INFO( mainbase, /CHILD )
IDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY
IDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY
ETURN, mainbase
ND