function toint,x
 z=stregex(x,'[0-9]+',/ext)
 i=fix(z)>1<100
 return,i(0)
end

function mysmooth,data,nn
 if nn lt 2 then return,data
 dd=reform(data)
 m=n_elements(dd)/nn-1
 ff=fltarr(m)
 for i=0L,m(0)-1 do ff(i)=total(dd((i*nn):((i+1)*nn-1)))
 return,ff/float(nn)
end

function flagsmooth,data,nn
 dd=reform(data)
 if nn lt 2 then return,dd
 m=n_elements(dd)/nn-1
 ff=fltarr(m)
 for i=0L,m(0)-1 do ff(i)=dd[i*nn]
 return,ff
end

pro drawRawData,datapas,gview
i=gview.n
tit=gview.title+' : '+string(gview.n)+string(gview.freq[i/2])+"GHz"
 z=reform(datapas[*].data[i])
 w=mysmooth(z,gview.smooth)
 plot,w,/yno,titl=tit
 z=reform(datapas[*].data[i+1])
 w=mysmooth(z,gview.smooth)
 oplot,w,col=150
end

pro drawFlagData,datapas,gview
 plot,flagsmooth(datapas[*].attMask1,gview.smooth),/yno,yrange=[-0.5,1.5],ystyle=1
 if gview.kode[0] eq 1 then oplot,flagsmooth(datapas[*].modAuto,gview.smooth),col=255L
 if gview.kode[1] eq 1 then oplot,flagsmooth(datapas[*].modManual,gview.smooth), col=256L*255
 if gview.kode[2] eq 1 then oplot,flagsmooth(datapas[*].ngOn,gview.smooth), col=256L*256L*255
 if gview.kode[3] eq 1 then oplot,flagsmooth(datapas[*].ngLeft,gview.smooth), col=255+256L*255
 if gview.kode[4] eq 1 then oplot,flagsmooth(datapas[*].ngRight,gview.smooth), col=255+256L*256L*255
end




pro readarm,fname
common arm_view,gview,scbase,datapas
if n_params(0) lt 1 then begin
 print,'Usage: readarm,fname,data,zview'
 gview.nn=0
 gview.n_ch=0
 return
end
openr, lun, fname, /GET_LUN
mrd_hread, lun, hdr
st=fstat(lun)
nn=(st.size-st.cur_ptr)/984
fields=sxpar(hdr,'TTYPE*')
pp=['1','1','1L','1L','0b','0b','0b','0b','0b','0b','0b','0b','1L','lonarr(240)']
data=MRD_STRUCT(fields,pp,nn)
readu,lun,data
close, lun
help,data,nn
datapas=data
gview.n_ch=nn
gview.kode=0
gview.title=fxpar(hdr,'OBJECT')+' '+fxpar(hdr,'DATE-OBS')+' '+fxpar(hdr,'TIME-OBS')
gview.nn=238
gview.n=0
gview.smooth=1
end

pro armview_event,ev
common arm_view,gview,scbase,datapas
!y.style=2
widget_control,scbase.sedit,get_value=skf
skf=toint(skf)
gview.smooth=skf
widget_control,scbase.sedit,set_value=string(skf,format='(i4)')
WIDGET_CONTROL,ev.id,GET_UVALUE = wuv

CASE wuv OF
"draw" : begin
	if gview.nn lt 1 then return
	if ev.press eq 1 then begin
	 dx=!d.x_size/2>300
	 polyfill,[0,dx,dx,0],[0,0,20,20],/dev,col=!p.background
	 xy=convert_coord(ev.x,ev.y,/to_data,/dev)
	 str='x='+string(xy(0))+' y='+string(xy(1))
	 xyouts,1,2,str,/dev,font=0
	 scbase.dx=xy(0)
	 return
	end else if ev.release eq 1 then begin
	 xy=convert_coord(ev.x,ev.y,/to_data,/dev)
	 dx=abs(scbase.dx-xy(0))
	 zz=(!x.crange(1)-!x.crange(0))/8.0
	 if scbase.dx lt xy(0) then begin
	  x0=scbase.dx
	  x1=xy(0)
	  end else begin
  	  x1=scbase.dx
	  x0=xy(0)
	  end
	 if dx gt zz then !x.range=[x0,x1] else return
	end else return
	end
"QUIT"	: begin
	WIDGET_CONTROL,ev.top,/DESTROY
	return
	end

"File"	: begin
	file=dialog_pickfile(/read,filter=['*.raw'])
	if file eq '' then return
	gview.file=file
	readarm,file
	widget_control,scbase.label,set_value=gview.file
	!x.range=0
	end

"modAuto":	gview.kode[0]=(gview.kode[0]+1) mod 2
"modManual":	gview.kode[1]=(gview.kode[1]+1) mod 2
"ngOn":	gview.kode[2]=(gview.kode[2]+1) mod 2
"ngLeft":	gview.kode[3]=(gview.kode[3]+1) mod 2
"ngRight":	gview.kode[4]=(gview.kode[4]+1) mod 2

"Begin" :	gview.n=0
"Prev"	:	gview.n=gview.n-2 >0
"Next"	:	gview.n=gview.n+2 < (gview.nn)
"End"	:	gview.n=gview.nn >0
"Full"  :	!x.range=0

else: return
endcase
if gview.nn lt 1 then return
 widget_control, scbase.draw, get_val=tmp
 wset,tmp
 drawRawData,datapas,gview
 aa=!x.range
 widget_control, scbase.fdraw, get_val=tmp
 wset,tmp
 !x.range=aa
 drawFlagData,datapas,gview

end


pro armview
freqs=fltarr(120)
freqs[0:35]=[758.8,801.8,846,891.5,938.3,986.4,1035.9,1086.9,1139.4,1193.4,1249,1306.2,1365,1425.5,1487.8,1551.9,1617.9,1685.9,1755.9,1827.9,1901.9,1978,2056.3,2136.8,2219.6,2304.8,2392.5,2482.8,2570,2670,2770,2890,3000,3180,3370,3570]
freqs[36:76]=[3750,4000,4200,4400,4500,4700,4900,5100,5300,5500,5700,6000,6150,6300,6650,6800,6950,7100,7300,7600,7750,7900,8100,8250,8400,8700,8900,9050,9200,9350,9500,9700,10000,10150,10300,10500,10600,10800,10900,11300,11400]
freqs[77:111]=[11600,11700,11900,12200,12400,12500,12700,12900,13050,13350,13500,13700,14000,14150,14300,14500,14600,15000,15300,15450,15600,15750,15900,16100,16250,16400,16500,16900,17050,17200,17350,17500,17700,17800,18200]
freqs=freqs/1000.0
common arm_view,gview,scbase,datapas
datapas={ a:1, b:1,c:1L,d:1L,e:0b,f:0b,g:0b,h:0b,i:0b,j:0b,k:0b,l:0b,m:1L,data:lonarr(240)}
gview={ n_ch:4L,nn:0L,n:0L,kode:intarr(5),smooth:1, file:'', title:'',freq:freqs}
scbase={ main:0L,draw:0L,fdraw:0L,label:0L,nlabel:0L,sedit:0L,dx:1e3}

scbase.main= widget_base(title='ARM RAW DATA view',GROUP_LEADER=0L, /column)
menubase=widget_base(scbase.main, /row)
button=widget_button(menubase, val="QUIT", uval="QUIT")
button=widget_button(menubase, val="Load RAW File", uval="File")
scbase.sedit=widget_label(menubase,val='  Smooth number')
scbase.sedit=widget_text(menubase,/edit,val='10',xsize=4)
button=widget_button(menubase, val='<<',uval='Begin')
button=widget_button(menubase, val='<Prev',uval='Prev')
button=widget_button(menubase, val="Full Scan", uval="Full")
button=widget_button(menubase, val='Next>',uval='Next')
button=widget_button(menubase, val='>>',uval='End')
scbase.draw=widget_draw(scbase.main,xs=1000,ys=500,ret=2,uval='draw',/button_ev,color_model=1)
menubase=widget_base(scbase.main, /row)
;ii=widget_base(menubase,/row,/exclusive,/frame)
ii=widget_base(menubase,/row,/nonexclusive,/frame)
;scbase.nlabel=widget_button(ii,val='All Flags',uval='allFlags')
button=widget_button(ii,val='modAuto',uval='modAuto')
button=widget_button(ii,val='modManual',uval='modManual')
button=widget_button(ii,val='ngOn',uval='ngOn')
button=widget_button(ii,val='ngLeft',uval='ngLeft')
button=widget_button(ii,val='ngRight',uval='ngRight')
scbase.fdraw=widget_draw(scbase.main,xs=1000,ys=150,uval='fdraw',color_model=1)
scbase.label=widget_label(scbase.main,val='',/dynamic_re)
WIDGET_CONTROL, scbase.main, /realize
xmanager,'armview', scbase.main,GROUP_LEADER=0, /no_block
print,'ARM RAW Data Viewer is runing'
gview.n=0
scbase.dx=0
gview.smooth=10
!x.range=0
!x.style=1
end


