	pro d_pol_event, ev

common d_pol, I, V, P, ID, data


	if ev.ID eq ID.Draw then begin
wset, ID.Win
widget_control, ID.Label, set_val=	$
	string(ev.x, ev.y, I(ev.x, ev.y), V(ev.x, ev.y), P(ev.x, ev.y), format= $
	"(i3, ', ', i3, ', ', 'I: ', g9.3, ' V: ', g10.3, ' V/I: ', g10.3)")

return
	endif

widget_control, ev.id, get_uval=uv, /hour

	CASE uv OF

'Done':	begin
widget_control, ev.top, /destr
	end

'Colors': xloadct

'Stokes I':	begin
wset, ID.Win
tvscl, I
	end

'Stokes V':	begin
wset, ID.Win
tvscl, V
	end

'Degree of polarization':	begin
if (size(P))(0) ne 2 then return
wset, ID.Win
tvscl, P
	end

'db':	begin
widget_control, ID.db, get_val=tmp
data.db=-float(tmp(0))
widget_control, ID.db, set_val=string(-data.db, format='(f4.1)')
	end


'threshold':	begin
widget_control, ID.threshold, get_val=tmp
data.threshold=float(tmp(0))
widget_control, ID.threshold, set_val=string(data.threshold, format='(g9.3)')
		end


'Level':	begin
widget_control, ID.Level, get_val=tmp
data.Level=float(tmp(0))
widget_control, ID.Level, set_val=string(data.Level, format='(g9.3)')
		end

'Filter':	begin
widget_control, ID.Filter, get_val=tmp
data.Filter=fix(tmp(0))
widget_control, ID.Filter, set_val=string(data.Filter, format='(i1)')

		end

'Width':	begin
widget_control, ID.Width, get_val=tmp
data.Width=fix(tmp(0))
widget_control, ID.Width, set_val=string(data.Width, format='(i1)')
		end

'EXECUTE':	begin
wset, ID.Win

p=deg_pol(i, v, threshold=data.threshold, range=data.db, filter=data.filter, $
width=data.width, min=data.level)

tvscl, p
		end

	ELSE:

	ENDCASE

empty

	end

	function d_pol, Stokes_I, Stokes_V

common d_pol, I, V, P, ID, data

ID={draw:0L, Win:0L, Label:0L, db:0L, Level:0L, width:0L, Threshold:0L, Filter:0L}

data={threshold:400, db:(-23.), level:0.005, filter:0, width:3}

Sz=size(Stokes_I)

if Sz(0) ne 2 then message, 'Arrays must have 2 dimensions'

if not equiv(Sz, size(Stokes_V)) then message, 'Incompatible arrays'

I=Stokes_I
V=Stokes_V

mainbase=widget_base(tit='Degree of polarization', /colu)

menubase=widget_base(mainbase, /row)

rl_base=widget_base(mainbase, /row)

leftbase=widget_base(rl_base, /colu)

inputbase=widget_base(rl_base, /colu)

button=widget_button(menubase, val='Done', uval='Done')
button=widget_button(menubase, val='Colors', uval='Colors')
button=widget_button(menubase, val='Array', /menu)
	button1=widget_button(button, val='Stokes I', uval='Stokes I')
	button1=widget_button(button, val='Stokes V', uval='Stokes V')
	button1=widget_button(button, val='Degree of polarization', uval='Degree of polarization')

ID.Draw=widget_draw(leftbase, xs=Sz(1), ys=Sz(2), /motion)

ID.label=widget_label(leftbase, /fra, val=' ')

button=widget_button(inputbase, val='EXECUTE', uval='EXECUTE')

label=widget_label(inputbase, val='dB:')
ID.db=widget_text(inputbase, val=string(-data.db, format='(f4.1)'), uval='db', /edit, /fra)

label=widget_label(inputbase, val='Thres.:')
ID.threshold=widget_text(inputbase, val=string(data.threshold, format='(g9.3)'), $
	uval='threshold', /edit, /fra)

label=widget_label(inputbase, val='Level:')
ID.Level=widget_text(inputbase, val=string(data.Level, format='(g9.3)'), $
	uval='Level', /edit, /fra)

label=widget_label(inputbase, val='Filter:')
ID.Filter=widget_text(inputbase, val=string(data.Filter, format='(i1)'), $
	uval='Filter', /edit, /fra)

label=widget_label(inputbase, val='Width:')
ID.Width=widget_text(inputbase, val=string(data.Width, format='(i1)'), $
	uval='Width', /edit, /fra)


widget_control, mainbase, /real, /hour

widget_control, ID.Draw, get_val=tmp

ID.Win=tmp

wset, ID.Win

p=deg_pol(i, v, threshold=data.threshold, range=data.db, filter=data.filter, $
width=data.width, min=data.level)

tvscl, p

empty

xmanager, 'd_pol', mainbase, /modal

return, p

	end