; /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 ;