; /emstar2/stewart/load_get_uvis_ef.pro 08jun01 15:35... ; ...

advertisement
; /emstar2/stewart/load_get_uvis_ef.pro
08jun01
15:35 mdt
;
line 308 revised
11jul01
16:38 mdt
;
(see
bugnote # 01
in get_uvis_ef.readme)
;
; procedures for accessing & displaying uvis data
; makes use of the dod (daps-odcid-dictionary) procedures & ascii files
;
; note: daps_tools.pro is required
;
; see get_uvis_ef.readme for more details
;
;--------------------------------------------------------------------;
pro get_uvis_ef,flag,fnr,ro,pars,fro,fro4,nro,ro1,pars1,ro2,pars2
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro
get_uvis_ef,flag,fnr,ro,pars,fro,fro4,nro,ro1,pars1,ro2,pars2'
print,' 11jun01
/emstar2/stewart/get_uvis_ef.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' reads data, & extracts setup parameters'
print,' reconstructs full detector readout from available info'
print,' INPUT(S) :'
print,'
fnr
- data file name (daps or virtual)'
print,'
(eg EUV2000_10_01_09_00_00_000 or jsb_c22_0048.e00)'
print,' OUTPUT(S) :
print,'
ro
- array of detector readouts'
print,'
pars - 11x2 file containing:'
print,'
odcid,chid,slitid,ip,cmin,cmac,xbin,rmin,rmax,ybin,tau'
print,'
ydbeg, ydend, nro (where yd is yyyy, doy, hh, mm, ss)'
print,'
(and nro is number of readouts)'
print,'
fro
- reconstruction of full detector readouts'
print,'
ie, 1024x64 arrays'
print,'
fro4 - fro reduced to 256x64'
print,'
nro
- number of readouts on file'
print,' if the data has multiple (ie, 3) windows, then:'
print,'
roN
- contains readouts of Nth window'
print,'
parsN - contains parameters for Nth window'
print,' '
return
exec:;
spro=strupcase('get_uvis_ef')
;
pflg=(flag mod 10)/1
sflg=(flag mod 100)/10
wflg=(flag mod 1000)/100
stopf=(flag mod 10000)/1000
;
; read data into ro (& ron), prepare fro, pars (& parsn)
read_aadod_chron,1,fnr,dn,vn,nv,nfs,on,su
ff=findfile(dn(0)+'*') & nv=n_elements(ff)
for i=0,nv-1 do begin
reader_feuv,ff(i),pp,dd,w0,w1,nro
prep_uvis_pars,100*wflg,fnr,nro,dd,w0,prms
if prms(7,0) le 30 and prms(8,0) ge 30 then $
; zero out row 30
if prms(0,0) ge 48 and prms(0,0) le 79 then $
for n=0,nro-1 do w1(0,(30-prms(7,0))/prms(9,0),n)=w1(*,0,n)*0
if i eq 0 then begin ro =w1 & pars =prms & odcid=prms(0,0) & end
if i eq 1 then begin ro1=w1 & pars1=prms & end
if i eq 2 then begin ro2=w1 & pars2=prms & end
if i eq 0 then fro=fltarr(1024,64,nro)
for n=0,nro-1 do begin
enlarg,0,float(w1(*,*,n)),prms(6,0),prms(9,0),w1nx
fro(prms(4,0),prms(7,0),n)=w1nx
end
end
; for 3 windows, put center window in ro, pars, etc
if nv ne 3 then goto,skipv
sortv=sort([pars [7,0],pars1(7,0),pars2(7,0)])
if sortv(0) eq 0 then begin r_lo=ro & p_lo=pars & end
if sortv(0) eq 1 then begin r_lo=ro1 & p_lo=pars1 & end
if sortv(0) eq 2 then begin r_lo=ro2 & p_lo=pars2 & end
if sortv(1) eq 0 then begin r_md=ro & p_md=pars & end
if sortv(1) eq 1 then begin r_md=ro1 & p_md=pars1 & end
if sortv(1) eq 2 then begin r_md=ro2 & p_md=pars2 & end
if sortv(2) eq 0 then begin r_hi=ro & p_hi=pars & end
if sortv(2) eq 1 then begin r_hi=ro1 & p_hi=pars1 & end
if sortv(2) eq 2 then begin r_hi=ro2 & p_hi=pars2 & end
ro =r_md & pars =p_md
ro1=r_lo & pars1=p_lo
ro2=r_hi & pars2=p_hi
skipv:;
;
; prepare fro4
if nro gt 1 then shrink,0,total(fro,3),4,1,fro4
if nro eq 1 then shrink,0,fro,4,1,fro4
if nv gt 0 then begin nr =pars (8,0)-pars (7,0)+1 $
& w =pars (7,0)+findgen(nr ) & nw =float(n_elements(w )) & end
if nv gt 1 then begin nr1=pars1(8,0)-pars1(7,0)+1 $
& w1=pars1(7,0)+findgen(nr1) & nw1=float(n_elements(w1)) & end
if nv gt 2 then begin nr2=pars2(8,0)-pars2(7,0)+1 $
& w2=pars2(7,0)+findgen(nr2) & nw2=float(n_elements(w2)) & end
;
if sflg ge 1 then begin
x=findgen(256)*4+1.5 & y=findgen(64)+0.5
!p.multi=[0,0,2,0,0]
titles,1,'DETECTOR COLUMN','CTS / COL / SEC','UVIS EUV : TORUS'
sp =total(fro4(*,w ),2) & spb=[0]
if nv eq 3 then spb=total(fro4(*,[w1,w2]),2)/2
ymax=1.2*(max(sp )>max(spb))/pars(10,0)
zxxyy,1,0,1024,0,ymax,xxyy
if nv gt 0 then plot,x,total(fro4(*,w ),2)/pars(10,0),ps=10
if nv gt 1 then oplot,x,total(fro4(*,w1),2)/pars(10,0)*nr/nr1,ps=10
if nv gt 2 then oplot,x,total(fro4(*,w2),2)/pars(10,0)*nr/nr2,ps=10
!p.multi=[2,2,2,0,0]
titles,1,'DETECTOR ROW','CTS / ROW / SEC','UVIS EUV : TORUS'
pr=total(fro4(*,w ),1) & prb=[0]
if nv eq 3 then prb=total(fro4(*,[w1,w2]),1)/2
ymax=1.2*(max(pr )>max(prb))/pars(10,0)
zxxyy,1,0,64,0,ymax,xxyy
if nv gt 0 then begin
yy=[min(y(w ))-1,y(w ),max(y(w ))+1]
zz=[0,total(fro4(*,w ),1)/pars(10,0),0]
plot,yy,zz,ps=10 & end
if nv gt 1 then begin
yy=[min(y(w1))-1,y(w1),max(y(w1))+1]
zz=[0,total(fro4(*,w1),1)/pars(10,0),0]
oplot,yy,zz,ps=10 & end
if nv gt 2 then begin
yy=[min(y(w2))-1,y(w2),max(y(w2))+1]
zz=[0,total(fro4(*,w2),1)/pars(10,0),0]
oplot,yy,zz,ps=10 & end
tstr='drawn by
'+spro+'
'+strmid(!stime,0,17)
zxy,1,xxyy,[.0,-.6,.8],tstr
!mtitle=''
plot,[0],[0],xstyle=5,ystyle=5,nodata=1
disp=fltarr(258,66)+max(fro4)
disp(1,1)=fro4 & disp(1,61)=fltarr(4,4)+max(fro4)
tvscl,disp,320+45,40
cbar=fltarr(258,8)+max(disp)
for i=1,6 do cbar(1,i)=findgen(256)*max(disp)/255.
tvscl,cbar,365,40+69
tvscl,alog10(disp>1),320+45,40+80
zxy,1,xxyy,[.10,1.04,.8],strupcase(on(0))
zxy,1,xxyy,[.10,0.94,.8],strupcase(dn(0))
zxy,1,xxyy,[.10,0.84,.8],strupcase(vn(0))
zxy,1,xxyy,[-.10,.16,.6,1],'lin'
zxy,1,xxyy,[-.10,.56,.6,1],'log'
zxy,1,xxyy,[.5,-.1,.6,.5],'(col=0, row=63 corner is highlighted)'
!p.multi=0 & titles,0 & zxxyy,0
end
;
out:;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro reader_feuv,fnr,pp,dd,w0,w1,nro
;
sze=size(fnr)
if sze(1) eq 7 then goto,exec
print,' '
print,' pro reader_feuv,fnr,pp,dd,w0,w1,nro'
print,' 15mar01
/emstar2/stewart/reader_feuv.pro'
print,' '
if sze(1) eq 0 then return
print,' consults dod_chron.txt before calling feuv_reader'
print,' INPUT(S) :'
print,'
fnr - may be jsb_c2x_0ooo.xnn or XUV200Y_mm_dd_hh_mm_ss_000'
print,' OUTPUT(S) :
print,'
pp - processing info structure'
print,'
dd - description structure'
print,'
w0 - window/bin structure'
print,'
w1 - data array'
print,'
nro - # of readouts in w1'
print,' '
return
exec:;
spro=strupcase('reader_feuv')
;
; this section takes care of 1-window files with daps names
if strpos(fnr,'UV') ne -1 and strpos(fnr,'_000') ne -1 then begin
ff=findfile(fnr)
if ff(0) ne '' then begin
feuv_reader,fnr,pp,dd,w0,w1
sze=size(w1)
nro=1 & if sze(0) eq 3 then nro=sze(3)
goto,out
end
end
;
; this section deals with 1- or 3-window files with virtual names
spos=strpos(fnr,'_000_')
fng=fnr & if spos ne -1 then fng=strmid(fnr,0,spos+4)
read_aadod_chron,0,fng,dn,vn,nv,nf,on,su
if nf gt 0 then goto,jump
if nf eq 0 then begin
ff1=findfile(fnr)
if ff1(0) eq '' then nf1=0 else nf1=n_elements(ff1)
ff3=findfile(fnr+'_*')
if ff3(0) eq '' then nf3=0 else nf3=n_elements(ff3)
if nf1 eq 0 and nf3 eq 0 then begin
print,fnr,'
does not exist' & return & end
nf=1
if nf1 eq 1 then nv=1 & if nf3 eq 3 then nv=3
dn=fnr
end
;
jump:;
nro=0
nv=nv(0) & dn=dn(0)
ffd=findfile(dn)
if ffd(0) ne '' then begin $
feuv_reader,dn,pp,dd,w0,w1
sze=size(w1)
nro=1 & if sze(0) eq 3 then nro=sze(3)
goto,out
end
vn=vn(0)
;
out:;
return
end
;
;---------------------------------------------------------------------;
pro prep_uvis_pars,flag,fnr,nro,dd,w0,pars
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro prep_uvis_pars,flag,fnr,nro,dd,w0,pars'
print,' 15mar01
/emstar2/stewart/prep_uvis_pars.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' INPUT(S) :'
print,'
fnr - data file name
print,'
nro - number of readouts in data file'
print,'
dd
- description structure delivered by feuv_reader'
print,'
w0
- window structure delivered by feuv_reader'
print,' OUTPUT(S) :
print,'
pars - parameter array; written to file if wflg >=1'
print,' '
return
exec:;
spro=strupcase('prep_uvis_pars')
;
pflg=(flag
sflg=(flag
wflg=(flag
stopf=(flag
mod
mod
mod
mod
10)/1
100)/10
1000)/100
10000)/1000
;
; extract observation parameters & store in pars
cas_date,0,dd,sd,ydbeg
cas_date,0,dd,sd,ydend,jd,cd,yd,nro
chs=['euv','fuv'] & ch=dd.channel & chid=where(chs eq ch)
odcid=dd.odc_id
slitid=dd.slit_position
ip=dd.integration
rmin=w0.w_spaul & rmax=w0.w_spalr & ybin=w0.w_spabin
cmin=w0.w_specul & cmax=w0.w_speclr & xbin=w0.w_specbin
tau=float(ip)*float(nro)
pars=[odcid,chid,slitid,ip,cmin,cmax,xbin,rmin,rmax,ybin,tau]
pars=[[pars],[ydbeg,ydend,nro]]
if wflg ge 1 then begin
sp=strpos(fnr,'.')
fnw=strmid(fnr,0,sp)+'_'+strmid(fnr,sp+1,10)+'_pars.dat'
close,1 & openw,1,fnw,4*11
af=assoc(1,fltarr(11))
af(0)=pars(*,0) & af(1)=pars(*,1)
close,1
print,fnw+'
written
'+strmid(!stime,0,17)
end
;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro assign_sub_aadod,flag,fn,subaadod
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro assign_sub_aadod,flag,fn,subaadod'
print,' 02may01
/emstar2/stewart/assign_sub_aadod.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' INPUT(S) :'
print,'
fn
- daps or ieb data filename'
print,' OUTPUT(S) :
print,'
subaadod - sub-aadod file containing fn (eg aadod_chron_b.txt)'
print,' '
return
exec:;
spro=strupcase('assign_sub_aadod')
;
pflg=(flag
sflg=(flag
wflg=(flag
stopf=(flag
mod
mod
mod
mod
10)/1
100)/10
1000)/100
10000)/1000
;
dates=[
'1999_01_07','1999_01_18','1999_06_24','1999_09_15']
dates=[dates,'2000_06_01','2000_10_01_08_30','2000_10_01_09_00']
dates=[dates,'2000_11_01','2000_12_01','2001_01_01','2001_02_01']
dates=[dates,'2001_03_01','2001_04_01','2010_01_01']
letters='z.y.x.abcdefw'
;
read_file,0,'assign_aadod_chron_out.txt',sarr,nls
larr=sarr(where((strmid(sarr,0,1) ne ';') and (sarr ne '')))
aodc=fix(strmid(larr,0,4))
ltrs=strmid(larr,6,100)
;
if strpos(fn,'UV') ne -1 then type='daps'
if strpos(fn,'.') ne -1 then type='ieb'
;
if type eq 'daps' then begin
date=strmid(fn,3,23)
w=where(dates le date)
letter=strmid(letters,max(w),1)
end
;
if type eq 'ieb' then begin
sp=strpos(fn,'.')
odc=fix(strmid(fn,sp-4,4)) & odcl=where(aodc eq odc)
ord=strmid(fn,sp+2,2)
letter=strmid(ltrs(odcl),ord,1)
end
subaadod='aadod_chron_'+letter+'.txt'
;
if pflg ge 1 then print,fn+' :
'+subaadod
;
if stopf ge 1 then stop
return
end
;
;---------------------------------------------------------------------;
pro read_aadod_chron,flag,fn,dname,vname,nv,nfs,oname,su
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro read_aadod_chron,flag,fn,dname,vname,nv,nfs,oname,su'
print,' 02may01
/emstar2/stewart/read_aadod_chron.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' INPUT(S) :'
print,'
fn
- full data file specifier'
print,'
eg EUV2000_10_01_09_00_00_000, jsb_c22_0048.e00'
print,' OUTPUT(S) :
print,'
dname - contains daps filename(s) matching input fn'
print,'
vname - contains virtual filename(s) matching input fn'
print,'
nv
- # of versions of daps file(s) (ie # of windows)'
print,'
nfs
- # of sets of daps files'
print,'
oname - name(s) of observn request(s) for these data'
print,'
su
- uvis setup(s) for these observn request(s)'
print,' '
return
exec:;
spro=strupcase('read_aadod_chron')
;
pflg=(flag
sflg=(flag
wflg=(flag
stopf=(flag
mod
mod
mod
mod
10)/1
100)/10
1000)/100
10000)/1000
;
; read sub-aadod file containing fn
assign_sub_aadod,0,fn,sub_fn & sub_fdod=sub_fn(0)
if strmid(sub_fdod,11,1) eq '.' then begin
print,fn,'
not assigned to any sub-aadod' & return & end
read_file,0,sub_fdod,sarr
bp=[ 0, 2,30,49,74]
np=[ 1,26,17,23, 5]
;
; determine search string type
type='bad'
if strpos(fn,'UV') ne -1 then type='daps'
if strpos(fn,'.') ne -1 then type='ieb'
if type eq 'bad' then begin print,'bad fn: ',fn & return & end
;
; identify channel & search string
if type eq 'daps' then begin
tarr='X'+strmid(sarr,bp(1)+1,np(1)-1)
fch=strmid(fn,1,1) & fm=strmid(fn,3,100)
if strmid(fn,1,2) eq 'UV' then begin
fch=strmid(fn,0,1) & fm='X'+strmid(fn,1,100) & end
end
if type eq 'ieb' then begin
tarr=strmid(sarr,bp(2),13)+'x'+strmid(sarr,bp(2)+14,np(2)-14)
fch=strmid(fn,1,1) & fm=strmid(fn,3,100)
sp=strpos(fn,'.') & if sp ne -1 then begin
fch=strmid(fn,sp+1,1)
fm=strmid(fn,0,sp+1)+'x'+strmid(fn,sp+2,100)
end
end
;
; find filenames matching search string & channel
w=where(strpos(tarr,fm) ne -1)
if w(0) eq -1 then begin
nv=0 & nf=0
dname='' & vname='' & oname='' & su=''
print,fn,'
not found in
',sub_fdod
goto,out
end
nw=n_elements(w)
nv
=fix(strmid(sarr(w),bp(0),np(0)))
ednam='E'+strmid(sarr(w),bp(1)+1,np(1)-1)
fdnam='F'+strmid(sarr(w),bp(1)+1,np(1)-1)
evnam=strmid(sarr(w),bp(2),13)+'e'+strmid(sarr(w),bp(2)+14,np(2)-14)
fvnam=strmid(sarr(w),bp(2),13)+'f'+strmid(sarr(w),bp(2)+14,np(2)-14)
oname=strtrim(strmid(sarr(w),bp(3),np(3)),2)
su
=strtrim(strmid(sarr(w),bp(4),np(4)),2)
if strlowcase(fch) eq 'e' then begin dname=ednam & vname=evnam & end
if strlowcase(fch) eq 'f' then begin dname=fdnam & vname=fvnam & end
if strlowcase(fch) eq 'x' then begin
nv=[nv,nv] & su
=[su,su]
dname=[ednam,fdnam] & vname=[evnam,fvnam] & oname=[oname,oname]
end
nfs=n_elements(dname)
;
; print results
if pflg ge 1 then begin
hdrs=['nv','daps name','virtual name','observation name','setup']
fmth='$(a2,a27,a19,a24,a7)'
fmt='$(i2,a27,a19,a24,a7)'
print,fmth,hdrs
for i=0,nfs-1 do print,fmt,nv(i),dname(i),vname(i),oname(i),su(i)
print,'number of files:',nfs
end
vname=strtrim(vname,2)
;
out:;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro read_dod_chron,flag,fdod,fn,dname,vname,nv,nfs,oname,su
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro read_dod_chron,flag,fdod,fn,dname,vname,nv,nfs,oname,su'
print,' 03apr01
/emstar2/stewart/read_dod_chron.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' INPUT(S) :'
print,'
fdod - dod file name (eg adod_chron.txt)'
print,'
NOTE : or fdod may be strarr containing records of dod file'
print,'
fn
- full or partial data file specifier'
print,'
full: EUV2000_10_01_09_00_00_000, jsb_c22_0048.e00'
print,'
partial:'
print,'
1st char must be D, i, O, or S '
print,'
indicating daps, ieb, observn request, or setup'
print,'
2nd char must be E,F,X,e,f, or x, indctg channel'
print,'
3rd character must be a blank'
print,'
rest of string will be used in a string search'
print,'
eg:
DX 2000_10_0
or
ie 0048'
print,' OUTPUT(S) :
print,'
fdod - strarr containing records of dod file'
print,'
dname - contains daps filename(s) matching input fn'
print,'
vname - contains virtual filename(s) matching input fn'
print,'
nv
- # of versions of daps file(s) (ie # of windows)'
print,'
nfs
- # of sets of daps files'
print,'
oname - name(s) of observn request(s) for these data'
print,'
su
- uvis setup(s) for these observn request(s)'
print,' '
return
exec:;
spro=strupcase('read_dod_chron')
;
pflg=(flag
sflg=(flag
wflg=(flag
stopf=(flag
mod
mod
mod
mod
10)/1
100)/10
1000)/100
10000)/1000
;
; read dod file & reassign fdod
sarr=fdod
sze=size(fdod)
if total(sze eq [0,7,1]) eq 3. then begin
if fdod eq '' then fdod='adod_chron.txt'
read_file,0,fdod,sarr
end
bp=[ 0, 2,30,49,74]
np=[ 1,26,17,23, 5]
fdod=sarr
;
; determine search string type
fm=strmid(fn,3,100)
type='bad'
ch=strmid(fn,1,1)
if strmid(fn,0,1) eq 'D' then type='daps'
if strmid(fn,0,1) eq 'i' then type='ieb'
if strmid(fn,0,1) eq 'O' then type='obs'
if strmid(fn,0,1) eq 'S' then type='su'
if strmid(fn,2,1) ne ' ' then begin
if strpos(fn,'UV') ne -1 then type='daps'
if strpos(fn,'.') ne -1 then type='ieb'
end
if type eq 'bad' then begin print,'bad fn: ',fn & return & end
;
; identify channel & search string
if type eq 'daps' then begin
tarr='X'+strmid(sarr,bp(1)+1,np(1)-1)
fch=strmid(fn,1,1) & fm=strmid(fn,3,100)
if strmid(fn,1,2) eq 'UV' then begin
fch=strmid(fn,0,1) & fm='X'+strmid(fn,1,100) & end
end
if type eq 'ieb' then begin
tarr=strmid(sarr,bp(2),13)+'x'+strmid(sarr,bp(2)+14,np(2)-14)
fch=strmid(fn,1,1) & fm=strmid(fn,3,100)
sp=strpos(fn,'.') & if sp ne -1 then begin
fch=strmid(fn,sp+1,1)
fm=strmid(fn,0,sp+1)+'x'+strmid(fn,sp+2,100)
end
end
if type eq 'obs' then begin
tarr=strmid(sarr,bp(3),np(3))
fch='X' & fm=strmid(fn,3,100)
end
if type eq 'su' then begin
tarr=strmid(sarr,bp(4),np(4))
fch='X' & fm=strmid(fn,3,100)
end
;
; find filenames matching search string & channel
w=where(strpos(tarr,fm) ne -1)
if w(0) eq -1 then begin
nv=0 & nf=0
dname='' & vname='' & oname='' & su=''
print,fn,'
not found in dod_chron'
goto,out
end
nw=n_elements(w)
nv
=fix(strmid(sarr(w),bp(0),np(0)))
ednam='E'+strmid(sarr(w),bp(1)+1,np(1)-1)
fdnam='F'+strmid(sarr(w),bp(1)+1,np(1)-1)
evnam=strmid(sarr(w),bp(2),13)+'e'+strmid(sarr(w),bp(2)+14,np(2)-14)
fvnam=strmid(sarr(w),bp(2),13)+'f'+strmid(sarr(w),bp(2)+14,np(2)-14)
oname=strtrim(strmid(sarr(w),bp(3),np(3)),2)
su
=strtrim(strmid(sarr(w),bp(4),np(4)),2)
if strlowcase(fch) eq 'e' then begin dname=ednam & vname=evnam & end
if strlowcase(fch) eq 'f' then begin dname=fdnam & vname=fvnam & end
if strlowcase(fch) eq 'x' then begin
nv=[nv,nv] & su
=[su,su]
dname=[ednam,fdnam] & vname=[evnam,fvnam] & oname=[oname,oname]
end
nfs=n_elements(dname)
;
; print results
if pflg ge 1 then begin
hdrs=['nv','daps name','virtual name','observation name','setup']
fmth='$(a2,a27,a19,a24,a7)'
fmt='$(i2,a27,a19,a24,a7)'
print,fmth,hdrs
for i=0,nfs-1 do print,fmt,nv(i),dname(i),vname(i),oname(i),su(i)
print,'number of files:',nfs
end
vname=strtrim(vname,2)
;
out:;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro read_file,flag,acfn,sarr,nls
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro read_file,flag,acfn,sarr,nls'
print,' 29aug00
diska:[stewart.cas]read_file.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' INPUT(S):'
print,'
acfn - directory & name of file to be read'
print,' OUTPUT(S):'
print,'
sarr - string array containing lines of file'
print,'
nls - number of lines in file'
print,' '
return
exec:;
spro=strupcase('read_file')
;
pflg=(flag
sflg=(flag
wflg=(flag
stopf=(flag
mod
mod
mod
mod
10)/1
100)/10
1000)/100
10000)/1000
;
if acfn eq '' then read,'enter file name: ',acfn
close,1 & openr,1,acfn
sarr='' & s=''
while not eof(1) do begin readf,1,s & sarr=[sarr,s] & end
close,1
sarr=sarr(1:*) & nls=fix(n_elements(sarr))
if pflg ge 1 then print,acfn+' : lines in file =',nls
;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro enlarg,flag,arr,xfac,yfac,brr
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro enlarg,flag,arr,xfac,yfac,brr'
print,' 26feb01
/emstar2/stewart/enlarg.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' enlarges array arr, conserving total counts'
print,' INPUT(S) :'
print,'
arr - array to be enlarged'
print,'
xfac - # columns increased by this factor'
print,'
yfac - # rows increased by this factor'
print,' OUTPUT(S) :
print,'
brr - enlarged array'
print,' '
return
exec:;
spro=strupcase('enlarg')
;
pflg=(flag mod 10)/1
sflg=(flag mod 100)/10
tflg=(flag mod 1000)/100
stopf=(flag mod 10000)/1000
;
sze=size(arr)
if sze(0) ne 1 and sze(0) ne 2 then begin
print,'arr must be 1- or 2-d' & return & end
nn=sze(sze(0)+2)
nx=sze(1) & if sze(0) eq 1 then ny=1 else ny=sze(2)
fx=fix(xfac) & fy=fix(yfac)
if pflg ge 1 then begin
fmt='$(a12,2i6,a12,2i4)'
print,fmt,'arr size',nx,ny,'enlg facs',fx,fy
end
;
if tflg eq 0 then begin
a1=reform(arr,nn,1)
ra=rotate(a1,4)
cra=ra & for i=1,fx-1 do cra=[cra,ra]
rcra=reform(cra,fx*nx,ny)
crcra=rcra & for i=1,fy-1 do crcra=[crcra,rcra]
brr=reform(crcra,fx*nx,fy*ny)
end
if tflg eq 1 then begin
brr=rebin(arr.fx*nx,fy*ny)
end
brr=brr/fx/fy
;
if sflg ge 1 then tv,brr
;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro shrink,flag,arr,xfac,yfac,brr
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro shrink,flag,arr,xfac,yfac,brr'
print,' 04nov99
/emstar2/stewart/shrink.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' shrinks array by integer factors'
print,' array total is preserved, values increase by xfac*yfac'
print,' INPUT(S) :'
print,' OUTPUT(S) :
print,' '
return
exec:;
spro='ppp'
;
pflg=(flag mod 10)/1
sflg=(flag mod 100)/10
wflg=(flag mod 1000)/100
stopf=(flag mod 10000)/1000
;
sze=size(arr) & nx=sze(1) & ny=sze(2)
mx=fix(nx/xfac) & my=fix(ny/yfac)
wx=xfac*indgen(mx) & wy=yfac*indgen(my)
brr=fltarr(mx,my)
crr=fltarr(mx,ny)
for j=0,xfac-1 do crr=crr+arr(wx+j,*)
for i=0,yfac-1 do brr=brr+crr(*,wy+i)
; crr=arr(wx,*) & for j=1,xfac-1 do crr=crr+arr(wx+j,*)
; brr=crr(*,wy) & for i=0,yfac-1 do brr=brr+crr(*,wy+i)
;
if sflg ge 1 then tvscl,brr
if pflg ge 1 then print,'total arr, brr =',total(arr),total(brr)
;
if stopf ge 1 then stop
return
end
;
;--------------------------------------------------------------------;
pro cas_date,flag,feuv_dd,sdate,ydhms,jdate,cdate,yydoy,nro
;
if n_elements(flag) eq 1 then if flag ge 0 then goto,exec
print,' '
print,' pro cas_date,flag,feuv_dd,sdate,ydhms,jdate,cdate,yydoy,nro'
print,' 23jan01
/emstar2/stewart/cas_date.pro'
print,' '
if n_elements(flag) eq 0 then return
print,' INPUT(S) :'
print,'
feuv_dd - description structure returned by feuv_reader'
print,'
nro
- nro absent: date is date of end of 1st readout'
print,'
nro present: date is date of end of last readout'
print,' OUTPUT(S) :
print,'
sdate - eg 2000275/18:13:35 (string)'
print,'
ydhms - eg [2000,275,18,13,35] (intarr(5))'
print,'
jdate - julian date (double)'
print,'
cdate - eg 2000275_181335 (string)'
print,'
yydoy - eg 275.759 (float)'
print,' '
return
exec:;
spro=strupcase('cas_date')
;
pflg=(flag mod 10)/1
sflg=(flag mod 100)/10
wflg=(flag mod 1000)/100
stopf=(flag mod 10000)/1000
;
yy=fix(feuv_dd.year_start)
doy=fix(feuv_dd.doy_start)
hh=fix(feuv_dd.hour_start)
mm=fix(feuv_dd.min_start)
ss=fix(feuv_dd.sec_start)
; ms=fix(1000*(feuv_dd.sec_start mod 1.)+.5)
;
if n_elements(nro) ne 0 then begin
durn=(nro-1)*feuv_dd.integration
ddoy=fix(durn/8.64e4)
dhh=fix((durn-ddoy*8.64e4)/3.6e3)
dmm=fix((durn-ddoy*8.64e4-dhh*3.6e3)/6e1)
dss=fix((durn-ddoy*8.64e4-dhh*3.6e3-dmm*6e1)/1e0)
ss=ss+dss & if ss ge 60 then begin
mm=mm+1 & ss=ss mod 60 & end
mm=mm+dmm & if mm ge 60 then begin
hh=hh+1 & mm=mm mod 60 & end
hh=hh+dhh & if hh ge 24 then begin
doy=doy+1 & hh=hh mod 24 & end
doy=doy+ddoy
yrln=365+((yy mod 4) eq 0)
if doy ge yrln then begin
yy=yy+1 & doy=(doy mod yrln)+1 & end
end
;
ydhms=[yy,doy,hh,mm,ss]
yydoy=1000.*(yy mod 100)+doy+hh/24.+mm/1440.+ss/86400.
sdate=strmid(fix(yy),4,4)+'-'+strmid(fix(1000+doy),5,3) $
+'/'+strmid(fix(100+hh),6,2)+':'+strmid(fix(100+mm),6,2) $
+':'+strmid(fix(100+ss+.5),6,2)
cdate=strmid(fix(yy),4,4)+strmid(fix(1000+doy),5,3) $
+'_'+strmid(fix(100+hh),6,2)+strmid(fix(100+mm),6,2) $
+strmid(fix(100+ss+.5),6,2)
doy_jd,0,(yydoy mod 1.0e5),jdate
;
if pflg ge 1 then begin
fmt='$(a18,a16,f14.4,f12.4)'
print,fmt,sdate,cdate,jdate,yydoy
end
;
if stopf ge 1 then stop
return
end
;
;---------------------------------------------------------------------
;
PRO DATEDOY,FLAG,DATE,DOY
;
;***** 31MAY94 *****
;
IF FLAG EQ -1 THEN BEGIN
PRINT,' '
PRINT,'
PRO DATEDOY,FLAG,DATE,DOY'
PRINT,' '
PRINT,'
TAKES (STRING) DATE AND RETURNS (FLOAT) DAY OF YEAR'
PRINT,'
PRINTS RESULT IF FLAG = 1'
PRINT,' '
IF FLAG EQ -1 THEN RETURN
END
;
PFLG=(FLAG MOD 10)/1
STOPF=(FLAG MOD 10000)/1000
;
MONTHS='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'
DAYS=[0,31,59,90,120,151,181,212,243,273,304,334]
;
DATE0=DATE(0)
UDATE=STRUPCASE(DATE0)
SPOS=STRPOS(UDATE,'/')
IF SPOS NE -1 THEN BEGIN
SLEN=STRLEN(UDATE)
MONTH=FIX(STRMID(UDATE,0,SPOS))
MONTH=STRMID(MONTHS,3*(MONTH-1),3)
XDATE=STRMID(UDATE,SPOS+1,SLEN-(SPOS+1))
SLEN=STRLEN(XDATE)
SPOS=STRPOS(XDATE,'/')
DAY=FIX(STRMID(XDATE,0,SPOS))
XDATE=STRMID(XDATE,SPOS+1,SLEN-(SPOS+1))
YEAR=FIX(XDATE)
END
IF SPOS EQ -1 THEN BEGIN
DAY=FIX(STRMID(UDATE,0,2))
MONTH=STRMID(UDATE,2,3)
YEAR=FIX(STRMID(UDATE,5,2))
END
;
LEAP=0
IF (YEAR MOD 4) EQ 0 THEN LEAP=1
IF (YEAR MOD 100) EQ 0 THEN LEAP=0
IF (YEAR MOD 400) EQ 0 THEN LEAP=1
DAYS(2)=DAYS(2:11)+LEAP
;
MPOS=STRPOS(MONTHS,MONTH)
DOY=DAY+DAYS(MPOS/3)
DOY=YEAR*1000.+DOY
;
IF FLAG EQ 1 THEN PRINT,'
',DATE,'
',DOY
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO DOYDATE,FLAG,DOY,DATE
;
;***** 02MAY94 *****
;
IF FLAG EQ -1 THEN BEGIN
PRINT,' '
PRINT,'
PRO DOYDATE,FLAG,DOY,DATE'
PRINT,' '
PRINT,'
TAKES (FLOATING) DOY AND RETURNS (STRING) DATE'
PRINT,'
PRINTS RESULT IF FLAG = 1'
PRINT,' '
IF FLAG EQ -1 THEN RETURN
END
;
PFLG=(FLAG MOD 10)/1
STOPF=(FLAG MOD 10000)/1000
;
MONS='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'
DAYS=[0,31,59,90,120,151,181,212,243,273,304,334]
;
DOY0=DOY(0)
YEAR=FIX(DOY0/1000.)
DOX=FIX((DOY0+.5) MOD 1000.)
;
LEAP=0
IF (YEAR MOD 4) EQ 0 THEN LEAP=1
IF (YEAR MOD 100) EQ 0 THEN LEAP=0
IF (YEAR MOD 400) EQ 0 THEN LEAP=1
DAYS(2)=DAYS(2:11)+LEAP
;
FOR I=0,11 DO BEGIN
IF DOX GE DAYS(I) THEN BEGIN
MON=STRMID(MONS,3*I,3) & DAY=DOX-DAYS(I)
END
END
;
SDAY=STRING(DAY)
DAY=STRMID(100+SDAY,6,2)
YEAR=STRMID(100+YEAR,6,2)
;
DATE=DAY+MON+YEAR
;
IF PFLG EQ 1 THEN PRINT,DOY,'
',DATE
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO DOY_JD,FLAG,YYDOY,JDATE
;
;***** 04MAY94 *****
;
IF FLAG EQ -1 THEN BEGIN
PRINT,' '
PRINT,' PRO DOY_JD,FLAG,YYDOY,JDATE'
PRINT,' '
PRINT,' CONVERTS GIVEN YYDOY TO JULIAN DATE'
PRINT,' '
RETURN
END
;
PFLG=(FLAG MOD 10)/1
STOPF=(FLAG MOD 10000)/1000
;
JD_40_01_JAN_NOON=DOUBLE(2429630.0)
;
YYDOY0=YYDOY(0)
Y=FIX(YYDOY0/1000)
YY=Y-100*(Y GE 40)
Y=2000+YY
DOY=YYDOY0 MOD 1000
;
YYARR=1940+INDGEN(100)
DAYS=FLTARR(100)+365.
WW=WHERE(((YYARR MOD 4) EQ 0))
; WW=WHERE(((YYARR MOD 4) EQ 0) AND (YYARR NE 00))
DAYS(WW)=366.
TDAYS=FLTARR(100) & FOR I=1,99 DO TDAYS(I)=TDAYS(I-1)+DAYS(I-1)
JDARR=JD_40_01_JAN_NOON+(TDAYS-1.5)
;
W=WHERE(Y EQ YYARR)
JDATE=JDARR(W)+DOY
;
DOYDATE,0,YYDOY0-(YYDOY0 MOD 1),DATE
FMT='$(A10,I10,F10.3,F16.4)'
IF PFLG EQ 1 THEN PRINT,FMT,DATE,Y,DOY,JDATE
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO JD_DOY,FLAG,JDATE,YYDOY
;
;***** 22AUG95 *****
;
IF FLAG EQ -1 THEN BEGIN
PRINT,' '
PRINT,' PRO JD_DOY,FLAG,JDATE,YYDOY'
PRINT,' '
PRINT,' CONVERTS GIVEN JULIAN DATE TO YYDOY'
PRINT,' '
RETURN
END
;
PFLG=(FLAG MOD 10)/1
STOPF=(FLAG MOD 10000)/1000
;
JD_40_01_JAN_NOON=DOUBLE(2429630.0)
YYARR=1940+INDGEN(100)
DAYS=FLTARR(100)+365.
WW=WHERE(((YYARR MOD 4) EQ 0))
; WW=WHERE(((YYARR MOD 4) EQ 0) AND (YYARR NE 00))
DAYS(WW)=366.
TDAYS=FLTARR(100) & FOR I=1,99 DO TDAYS(I)=TDAYS(I-1)+DAYS(I-1)
JDARR=JD_40_01_JAN_NOON+(TDAYS-1.5)
;
JDATE0=JDATE(0)
DEL_YY=TOTAL(JDATE0 GE (JDARR+1.5))-1
Y=(40+DEL_YY) MOD 100
; Y=40+DEL_YY
DOY=JDATE0-JDARR(DEL_YY)
YYDOY=1000.*Y+DOY
;
DOYDATE,0,YYDOY-(YYDOY MOD 1),DATE
FMT='$(A10,I10,F10.3,F16.4)'
IF PFLG EQ 1 THEN PRINT,FMT,DATE,Y,DOY,JDATE0
;
IF STOPF EQ 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO ZXXYY,FLAG,XMIN,XMAX,YMIN,YMAX,XXYY
;
IF FLAG EQ -1 THEN BEGIN
PRINT,' '
PRINT,'
PRO ZXXYY,FLAG,XMIN,XMAX,YMIN,YMAX,XXYY'
PRINT,' '
PRINT,'
FLAG=0 : RESETS ALL LIMITS TO ZERO'
PRINT,'
FLAG=1 : RESETS TO INPUT VALUES'
PRINT,' '
END
IF FLAG EQ -1 THEN RETURN
;
IF FLAG EQ 0 THEN BEGIN
!X.STYLE=0 & !Y.STYLE=0
!XMIN=0 & !XMAX=0
!YMIN=0 & !YMAX=0
END
IF FLAG EQ 1 THEN BEGIN
IF TOTAL([XMIN,XMAX] EQ [0,0]) NE 2 THEN !X.STYLE=1
IF TOTAL([YMIN,YMAX] EQ [0,0]) NE 2 THEN !Y.STYLE=1
!XMIN=XMIN & !XMAX=XMAX
!YMIN=YMIN & !YMAX=YMAX
XXYY=[XMIN,XMAX,YMIN,YMAX]
END
;
RETURN
END
;
;--------------------------------------------------------------------;
PRO TITLES,FLAG,XT,YT,MT
;
;***** 06MAR85 *****
;
IF FLAG EQ -1 THEN BEGIN
PRINT,' '
PRINT,'
PRO TITLES,FLAG,XT,YT,MT'
PRINT,' '
PRINT,'
IF FLAG = 0 : !XTITLE, !YTITLE, !MTITLE ARE CLEARED
PRINT,'
1 : TITLES SET TO XT, YT, MT RESPECTIVELY'
PRINT,' '
END
IF FLAG EQ -1 THEN RETURN
;
IF FLAG EQ 0 THEN BEGIN
!XTITLE=''
!YTITLE=''
!MTITLE=''
END
;
IF FLAG GT 0 THEN BEGIN
!XTITLE=XT
!YTITLE=YT
!MTITLE=MT
END
;
RETURN
END
;
;--------------------------------------------------------------------;
PRO ZXY,FLAG,XXYY,GEN,TXT
;
IF N_ELEMENTS(FLAG) EQ 1 THEN IF FLAG GE 0 THEN GOTO,EXEC
PRINT,' '
PRINT,' PRO ZXY,FLAG,XXYY,GEN,TXT'
PRINT,' 06jan99
a:[s]plots.pro'
PRINT,' '
IF N_ELEMENTS(FLAG) EQ 0 THEN RETURN
PRINT,' ADDS TEXT TO EXISTING PLOT'
PRINT,' INPUTS :'
PRINT,'
XXYY - [XMIN,XMAX,YMIN,YMAX]'
PRINT,'
GEN - [X,Y,CHARS,ALI,ORI] (X,Y => POSN IN XXYY BOX)'
PRINT,'
TXT - TEXT TO BE ADDED'
PRINT,' '
RETURN
EXEC:;
SPRO='ZXY'
;
PFLG=(FLAG MOD 10)/1
SFLG=(FLAG MOD 100)/10
WFLG=(FLAG MOD 1000)/100
STOPF=(FLAG MOD 10000)/1000
;
NG=N_ELEMENTS(GEN)
IF NG LT 2 THEN BEGIN PRINT,'ZXY: MORE GEN NEEDED' & RETURN & END
X=XXYY(0)+(XXYY(1)-XXYY(0))*GEN(0)
Y=XXYY(2)+(XXYY(3)-XXYY(2))*GEN(1)
IF NG LT 3 THEN CSZ=1.0 ELSE CSZ=GEN(2)
IF NG LT 4 THEN AL =0.0 ELSE AL =GEN(3)
IF NG LT 5 THEN DEG=0
ELSE DEG=GEN(4)
XYOUTS,X,Y,TXT,CHARS=CSZ,ALI=AL,ORI=DEG
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO ZXY_IO,FLAG,XXYY,GEN,TXT
;
IF N_ELEMENTS(FLAG) EQ 1 THEN IF FLAG GE 0 THEN GOTO,EXEC
PRINT,' '
PRINT,' PRO ZXY_IO,FLAG,XXYY,GEN,TXT'
PRINT,' 06jan99
a:[s]plots.pro'
PRINT,' '
IF N_ELEMENTS(FLAG) EQ 0 THEN RETURN
PRINT,' ADDS TEXT TO EXISTING PLOT_IO'
PRINT,' INPUTS :'
PRINT,'
XXYY - [XMIN,XMAX,YMIN,YMAX]'
PRINT,'
GEN - [X,Y,CHARS,ALI,ORI] (X,Y => POSN IN XXYY BOX)'
PRINT,'
TXT - TEXT TO BE ADDED'
PRINT,' '
RETURN
EXEC:;
SPRO='ZXY_IO'
;
PFLG=(FLAG MOD 10)/1
SFLG=(FLAG MOD 100)/10
WFLG=(FLAG MOD 1000)/100
STOPF=(FLAG MOD 10000)/1000
;
NG=N_ELEMENTS(GEN)
IF NG LT 2 THEN BEGIN PRINT,'ZXY_IO: MORE GEN NEEDED' & RETURN & END
X=XXYY(0)+(XXYY(1)-XXYY(0))*GEN(0)
Y=XXYY(2)*(XXYY(3)/XXYY(2))^gEN(1)
IF NG LT 3 THEN CSZ=1.0 ELSE CSZ=GEN(2)
IF NG LT 4 THEN AL =0.0 ELSE AL =GEN(3)
IF NG LT 5 THEN DEG=0
ELSE DEG=GEN(4)
XYOUTS,X,Y,TXT,CHARS=CSZ,ALI=AL,ORI=DEG
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO ZXY_OI,FLAG,XXYY,GEN,TXT
;
IF N_ELEMENTS(FLAG) EQ 1 THEN IF FLAG GE 0 THEN GOTO,EXEC
PRINT,' '
PRINT,' PRO ZXY_OI,FLAG,XXYY,GEN,TXT'
PRINT,' 06jan99
a:[s]plots.pro'
PRINT,' '
IF N_ELEMENTS(FLAG) EQ 0 THEN RETURN
PRINT,' ADDS TEXT TO EXISTING PLOT_OI'
PRINT,' INPUTS :'
PRINT,'
XXYY - [XMIN,XMAX,YMIN,YMAX]'
PRINT,'
GEN - [X,Y,CHARS,ALI,ORI] (X,Y => GENN IN XXYY BOX)'
PRINT,'
TXT - TEXT TO BE ADDED'
PRINT,' '
RETURN
EXEC:;
SPRO='ZXY_OI'
;
PFLG=(FLAG
SFLG=(FLAG
WFLG=(FLAG
STOPF=(FLAG
MOD
MOD
MOD
MOD
10)/1
100)/10
1000)/100
10000)/1000
;
NG=N_ELEMENTS(GEN)
IF NG LT 2 THEN BEGIN PRINT,'ZXY_OI: MORE GEN NEEDED' & RETURN & END
X=XXYY(0)*(XXYY(1)/XXYY(0))^GEN(0)
Y=XXYY(2)+(XXYY(3)-XXYY(2))*GEN(1)
IF NG LT 3 THEN CSZ=1.0 ELSE CSZ=GEN(2)
IF NG LT 4 THEN AL =0.0 ELSE AL =GEN(3)
IF NG LT 5 THEN DEG=0
ELSE DEG=GEN(4)
XYOUTS,X,Y,TXT,CHARS=CSZ,ALI=AL,ORI=DEG
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
;--------------------------------------------------------------------;
PRO ZXY_OO,FLAG,XXYY,GEN,TXT
;
IF N_ELEMENTS(FLAG) EQ 1 THEN IF FLAG GE 0 THEN GOTO,EXEC
PRINT,' '
PRINT,' PRO ZXY_OO,FLAG,XXYY,GEN,TXT'
PRINT,' 06jan99
a:[s]plots.pro'
PRINT,' '
IF N_ELEMENTS(FLAG) EQ 0 THEN RETURN
PRINT,' ADDS TEXT TO EXISTING PLOT_OO'
PRINT,' INPUTS :'
PRINT,'
XXYY - [XMIN,XMAX,YMIN,YMAX]'
PRINT,'
GEN - [X,Y,CHARS,ALI,ORI] (X,Y => GENN IN XXYY BOX)'
PRINT,'
TXT - TEXT TO BE ADDED'
PRINT,' '
RETURN
EXEC:;
SPRO='ZXY_OO'
;
PFLG=(FLAG
SFLG=(FLAG
WFLG=(FLAG
STOPF=(FLAG
MOD
MOD
MOD
MOD
10)/1
100)/10
1000)/100
10000)/1000
;
NG=N_ELEMENTS(GEN)
IF NG LT 2 THEN BEGIN PRINT,'ZXY_OO: MORE GEN NEEDED' & RETURN & END
X=XXYY(0)*(XXYY(1)/XXYY(0))^GEN(0)
Y=XXYY(2)*(XXYY(3)/XXYY(2))^GEN(1)
IF NG LT 3 THEN CSZ=1.0 ELSE CSZ=GEN(2)
IF NG LT 4 THEN AL =0.0 ELSE AL =GEN(3)
IF NG LT 5 THEN DEG=0
ELSE DEG=GEN(4)
XYOUTS,X,Y,TXT,CHARS=CSZ,ALI=AL,ORI=DEG
;
IF STOPF GE 1 THEN STOP
RETURN
END
;
Download