Pro rad_stats2,file ; 24Sep02 by C. See ; The program counts the energetic particle hits in the images of "Log". ; It does this by creating a synthetic 'uneffected' image set from the first ; three dark frames, and comparing that to the rest of the dark images in the ; log. Variations greater than 5 dn are considered a hit. printflag=0 if n_params() eq 0 then file = "~/rad_stats.txt" ;list of Logs to check filt=0 ;hardwire filter off ;___________________________________ ; Count Logs in File... Readlogs: close,3 openw,3,"~/rad_stats.out" printf,3,'This is the Cosmic Ray Hit data for the Logs listed in: ',file printf,3,'Today is: ',systime(0),string(10b) Print,'These are the logs in the file: ',file Printf,3,'These are the logs in the file: ',file printf,3,' Log # Log Name' n=0 line='' close,1 openr,1,file while not eof(1) do begin n=n+1 ;logs counter readf,1,line print,n,' ',line printf,3,n,' ',line endwhile close,1 ans='' Read,"Do you Want to Contniue? (y or n): ",ans if ans ne 'y' then goto,readlogs ;___________________________________ ; Initialization... nlogs=n distdata=fltarr(12,nlogs) ;hits>5,10,15,20,25,30,35,40,45,50,100,j/filecount x nlogs temp=fltarr(nlogs) ;chip temp at the beginning of the test. maxhit=intarr(nlogs) ;amplitude of the largest hit. testdate=strarr(nlogs) ;date of test, text testjuli=lonarr(nlogs) ;date of test, juliday imagefilesused=intarr(nlogs) ;number of dark, compressed image files in log logname=strarr(nlogs) ;the names of the logs mridev=fltarr(nlogs) ;standard deviation of mri hits slidev=fltarr(nlogs) ;standard deviation of sli hits hridev=fltarr(nlogs) ;standard deviation of hri hits mriave=fltarr(nlogs) ;average size of mri hits sliave=fltarr(nlogs) ;average size of sli hits hriave=fltarr(nlogs) ;average size of hri hits overalldev=fltarr(nlogs) ;vector sum of mri, sli & hri deviations overallave=fltarr(nlogs) ;average of the averages maxexp=intarr(nlogs) ;maximum exposure time maxexp=intarr(nlogs) ;maximum exposure time ;setup window for first MRIs (print first mri to verify dust cover is on) hight=fix(nlogs/3)+1 !p.multi=[0,3,hight] window,3,xsize=700,ysize=900 ;___________________________________ ; Loop on Logs in File... close,1 openr,1,file for logcount=0,nlogs-1 do begin readf,1,line Log=line logname(logcount)=log cd,Log+'/DB/Image' spawn,'lsf',files,/noshell & siz=size(files) & nfiles=siz(1) ;for lots of files if nfiles lt 100 then goto,nextlog MRIref: p30=intarr(30,176,256) mri=fltarr(176,256) threeIs=intarr(3,176,256) n3=0 ;counts the 3 30s n30=0 ;count of 30 files count=0 ;number of 30 sets, total n=0 ;counts number of MRI files readmri: d_read,files(n),h,p if d_value(h,102) ne '0000' then goto,nextmri if d_value(h,96) ne 21 then goto,nextmri if d_value(h,96) ne 21 then goto,nextmri s=size(p) if s(2) ne 256 then goto,nextmri ;short MRI, or uncompressed for i=0,255 do p(*,i)=p(*,i)-min(p(*,i)) ;remove average & row slope p30(n30,*,*)=p n30=n30+1 if n30 eq 30 then begin a=intarr(45056) for i=0l,45055l do a(i)=median(p30(0:29,i)) threeIs(n3,*,*)=median(p30(0:29,*,*)) if n3 eq 2 then begin mri=(count*mri+median(threeIs(0:2,*,*)))/(count+1) count=count+1 n3=0 endif n30=0 ;count of 30 files endif nextmri: n=n+1 if n ge nfiles then goto,SLIref goto,readmri SLIref: stop ;___________________________________ ; read in the first 3 dark images... j=0 ;file index counter mrifile=intarr(3) slifile=intarr(3) hrifile=intarr(3) for i=0,2 do begin ;the first 3 dark images mricount='' slicount='' hricount='' while not (mricount eq 'done' and slicount eq 'done' and hricount eq 'done') do begin if lamps(files(j)) eq '0000' then begin if mtype(files(j)) eq 21 and mricount eq '' then begin & mrifile(i)=j & mricount='done' & endif if mtype(files(j)) eq 22 and slicount eq '' then begin & slifile(i)=j & slicount='done' & endif if mtype(files(j)) eq 23 and hricount eq '' then begin & hrifile(i)=j & hricount='done' & endif endif j=j+1 endwhile endfor ;___ MRI: ;____________________________________ ;Read in reference images... d_read,files(mrifile(0)),h,p & mri1=p & temp0=d_value(h,22) d_read,files(mrifile(1)),h,p & mri2=p d_read,files(mrifile(2)),h,p & mri3=p ;remove average per row... for i=0,255 do mri1(*,i)=mri1(*,i)-min(mri1(*,i)) for i=0,255 do mri2(*,i)=mri2(*,i)-min(mri2(*,i)) for i=0,255 do mri3(*,i)=mri3(*,i)-min(mri3(*,i)) index=where(abs(mri1-mri2) gt 1) if index(0) eq -1 then goto,diffmri13 s=size(index) for i=0l,s(1)-1 do mri1(index(i))=median([mri1(index(i)),mri2(index(i)),mri3(index(i))]) for i=0l,s(1)-1 do mri2(index(i))=median([mri1(index(i)),mri2(index(i)),mri3(index(i))]) diffmri13: index=where(abs(mri1-mri3) gt 1) if index(0) eq -1 then goto,diffmri23 s=size(index) for i=0l,s(1)-1 do mri1(index(i))=median([mri1(index(i)),mri2(index(i)),mri3(index(i))]) for i=0l,s(1)-1 do mri3(index(i))=median([mri1(index(i)),mri2(index(i)),mri3(index(i))]) diffmri23: index=where(abs(mri2-mri3) gt 1) if index(0) eq -1 then goto,averagemri s=size(index) for i=0l,s(1)-1 do mri2(index(i))=median([mri1(index(i)),mri2(index(i)),mri3(index(i))]) for i=0l,s(1)-1 do mri3(index(i))=median([mri1(index(i)),mri2(index(i)),mri3(index(i))]) averagemri: mri=(mri1+mri2+mri3)/3 ;;show3,mri ;;surface,mri,xrange=[0,180],yrange=[0,256],zrange=[-10,150],title=log,charsize=2 ;___ SLI: ;____________________________________ ;Read in reference images... d_read,files(slifile(0)),h,p & sli1=p d_read,files(slifile(1)),h,p & sli2=p d_read,files(slifile(2)),h,p & sli3=p ;remove average per row... for i=0,255 do sli1(*,i)=sli1(*,i)-min(sli1(*,i)) for i=0,255 do sli2(*,i)=sli2(*,i)-min(sli2(*,i)) for i=0,255 do sli3(*,i)=sli3(*,i)-min(sli3(*,i)) index=where(abs(sli1-sli2) gt 1) if index(0) eq -1 then goto,diffsli13 s=size(index) for i=0,s(1)-1 do sli1(index(i))=median([sli1(index(i)),sli2(index(i)),sli3(index(i))]) for i=0,s(1)-1 do sli2(index(i))=median([sli1(index(i)),sli2(index(i)),sli3(index(i))]) diffsli13: index=where(abs(sli1-sli3) gt 1) if index(0) eq -1 then goto,diffsli23 s=size(index) for i=0,s(1)-1 do sli1(index(i))=median([sli1(index(i)),sli2(index(i)),sli3(index(i))]) for i=0,s(1)-1 do sli3(index(i))=median([sli1(index(i)),sli2(index(i)),sli3(index(i))]) diffsli23: index=where(abs(sli2-sli3) gt 1) if index(0) eq -1 then goto,averagesli s=size(index) for i=0,s(1)-1 do sli2(index(i))=median([sli1(index(i)),sli2(index(i)),sli3(index(i))]) for i=0,s(1)-1 do sli3(index(i))=median([sli1(index(i)),sli2(index(i)),sli3(index(i))]) averagesli: sli=(sli1+sli2+sli3)/3 ;___ HRI: ;____________________________________ ;Read in reference images... d_read,files(hrifile(0)),h,p & hri1=p d_read,files(hrifile(1)),h,p & hri2=p d_read,files(hrifile(2)),h,p & hri3=p ;remove average per row... for i=0,255 do hri1(*,i)=hri1(*,i)-min(hri1(*,i)) for i=0,255 do hri2(*,i)=hri2(*,i)-min(hri2(*,i)) for i=0,255 do hri3(*,i)=hri3(*,i)-min(hri3(*,i)) index=where(abs(hri1-hri2) gt 1) if index(0) eq -1 then goto,diffhri13 s=size(index) for i=0,s(1)-1 do hri1(index(i))=median([hri1(index(i)),hri2(index(i)),hri3(index(i))]) for i=0,s(1)-1 do hri2(index(i))=median([hri1(index(i)),hri2(index(i)),hri3(index(i))]) diffhri13: index=where(abs(hri1-hri3) gt 1) if index(0) eq -1 then goto,diffhri23 s=size(index) for i=0,s(1)-1 do hri1(index(i))=median([hri1(index(i)),hri2(index(i)),hri3(index(i))]) for i=0,s(1)-1 do hri3(index(i))=median([hri1(index(i)),hri2(index(i)),hri3(index(i))]) diffhri23: index=where(abs(hri2-hri3) gt 1) if index(0) eq -1 then goto,averagehri s=size(index) for i=0,s(1)-1 do hri2(index(i))=median([hri1(index(i)),hri2(index(i)),hri3(index(i))]) for i=0,s(1)-1 do hri3(index(i))=median([hri1(index(i)),hri2(index(i)),hri3(index(i))]) averagehri: hri=(hri1+hri2+hri3)/3 print,"Processing Log: ",log,string(7b) ;______________________________________________ ;average all image files. kmri=1 & ksli=1 & khri=1 ;counters for files processed for k=1,nfiles do begin if lamps(files(k-1)) ne '0000' then goto,nextfile4 d_read,files(k-1),h,p s=size(p) if s(2) ne 256 then goto,nextfile4 ;short MRI, or uncompressed for i=0,255 do p(*,i)=p(*,i)-min(p(*,i)) ;remove average & row slope if d_value(h,96) eq 21 then begin ;mri mri=(kmri*mri+p)/(kmri+1) kmri=kmri+1 endif if d_value(h,96) eq 22 then begin ;sli sli=(ksli*sli+p)/(ksli+1) ksli=ksli+1 endif if d_value(h,96) eq 23 then begin ;hri hri=(khri*hri+p)/(khri+1) khri=khri+1 endif nextfile4: endfor ;______________________________________________ ;average all image files, cutout pixels which are greater than 10 dN from mean. kmri=1 & ksli=1 & khri=1 ;counters for files processed for k=1,nfiles do begin if lamps(files(k-1)) ne '0000' then goto,nextfile2 d_read,files(k-1),h,p s=size(p) if s(2) ne 256 then goto,nextfile2 ;short MRI, or uncompressed for i=0,255 do p(*,i)=p(*,i)-min(p(*,i)) ;remove average & row slope if d_value(h,96) eq 21 then begin ;mri index=where(abs(p-mri) lt 10) if index(0) eq -1 then goto,nextfile2 mri(index)=(kmri*mri(index)+p(index))/(kmri+1) kmri=kmri+1 endif if d_value(h,96) eq 22 then begin ;sli index=where(abs(p-sli) lt 10) if index(0) eq -1 then goto,nextfile2 sli(index)=(ksli*sli(index)+p(index))/(ksli+1) ksli=ksli+1 endif if d_value(h,96) eq 23 then begin ;hri index=where(abs(p-hri) lt 10) if index(0) eq -1 then goto,nextfile hri(index)=(khri*hri(index)+p(index))/(khri+1) khri=khri+1 endif nextfile2: endfor ;show3,mri surface,hri,xrange=[0,160],yrange=[0,256],zrange=[-10,150],title=log,charsize=2 ;______________________________________________ ;calculate mean and standard deviation kmri=1 & ksli=1 & khri=1 ;counters for files processed for k=1,nfiles do begin if lamps(files(k-1)) ne '0000' then goto,nextfile3 d_read,files(k-1),h,p s=size(p) if s(2) ne 256 then goto,nextfile3 ;short MRI, or uncompressed for i=0,255 do p(*,i)=p(*,i)-min(p(*,i)) ;remove average & row slope if d_value(h,96) eq 21 then begin ;mri newdev=stdev(abs(p-mri),ave) mridev(logcount)=sqrt(mridev(logcount)^2+newdev^2) mriave(logcount)=(kmri*mriave(logcount)+ave)/(kmri+1) kmri=kmri+1 endif if d_value(h,96) eq 22 then begin ;sli newdev=stdev(abs(p-sli),ave) slidev(logcount)=sqrt(slidev(logcount)^2+newdev^2) sliave(logcount)=(ksli*sliave(logcount)+ave)/(ksli+1) ksli=ksli+1 endif if d_value(h,96) eq 23 then begin ;hri newdev=stdev(abs(p-mri),ave) hridev(logcount)=sqrt(hridev(logcount)^2+newdev^2) hriave(logcount)=(khri*hriave(logcount)+ave)/(khri+1) khri=khri+1 endif nextfile3: endfor overalldev(logcount)=sqrt(mridev(logcount)^2+slidev(logcount)^2+hridev(logcount)^2) overallave(logcount)=(mriave(logcount)+sliave(logcount)+hriave(logcount))/3 ;______________________________________________ ; create array of cosmic ray hit effects... array=intarr(13000000) j=0 ;counts the number of hits > 5 dn filecount=0 ;counter for image files actually used (processed vs skipped) for n=0,nfiles-1 do begin if lamps(files(n)) ne '0000' then goto,nextfile d_read,files(n),h,p s=size(p) if s(2) ne 256 then goto,nextfile ;short MRI, or uncompressed for i=0,255 do p(*,i)=p(*,i)-min(p(*,i)) ;remove average & row slope filecount=filecount+1 ;count of actual files used if d_value(h,96) eq 21 then begin ;mri ;;if max(abs(p-mri)) gt 500 then show3,p-mri index=where(abs(p-mri) gt 5) if index(0) eq -1 then goto,nextfile s=size(index) array(j:j+s(1)-1)=abs(p(index)-mri(index)) j=j+s(1) endif if d_value(h,96) eq 22 then begin ;sli ;;if max(abs(p-sli)) gt 500 then show3,p-sli index=where(abs(p-sli) gt 5) if index(0) eq -1 then goto,nextfile s=size(index) array(j:j+s(1)-1)=abs(p(index)-sli(index)) j=j+s(1) endif if d_value(h,96) eq 23 then begin ;hri ;;if max(abs(p-hri)) gt 500 then show3,p-hri index=where(abs(p-hri) gt 5) if index(0) eq -1 then goto,nextfile s=size(index) array(j:j+s(1)-1)=abs(p(index)-hri(index)) j=j+s(1) endif nextfile: endfor ;______________________________________________ ;Save Data... ;;Print,Log ;;Print,'The total number of hits greater than 5 dn was: ',sstr(j) ;;print,'The initial chip temperature is: ',temp0,string(10b) s=size(array) nhits=float(j)/filecount print,'The number of hits greater that 5 dn is: ',nhits,' per image' index=where(array ge 10) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage10=float(s(1))/filecount ;;print,'The number of hits greater that 10 dn is: ',perimage10,' per image' index=where(array ge 15) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage15=float(s(1))/filecount ;;print,'The number of hits greater that 15 dn is: ',perimage15,' per image' index=where(array ge 20) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage20=float(s(1))/filecount ;;print,'The number of hits greater that 20 dn is: ',perimage20,' per image' index=where(array ge 25) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage25=float(s(1))/filecount ;;print,'The number of hits greater that 25 dn is: ',perimage25,' per image' index=where(array ge 30) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage30=float(s(1))/filecount ;;print,'The number of hits greater that 30 dn is: ',perimage30,' per image' index=where(array ge 35) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage35=float(s(1))/filecount ;;print,'The number of hits greater that 35 dn is: ',perimage35,' per image' index=where(array ge 40) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage40=float(s(1))/filecount ;;print,'The number of hits greater that 40 dn is: ',perimage40,' per image' index=where(array ge 45) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage45=float(s(1))/filecount ;;print,'The number of hits greater that 45 dn is: ',perimage45,' per image' index=where(array ge 50) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage50=float(s(1))/filecount ;;print,'The number of hits greater that 50 dn is: ',perimage50,' per image' index=where(array ge 100) s=size(index) if index(0) eq -1 then s(*)=0 ;i.e. no pixels over the limit perimage100=float(s(1))/filecount ;;print,'The number of hits greater that 100 dn is: ',perimage100,' per image' distdata(*,logcount)=$ [float(j)/filecount,perimage10,perimage15,perimage20,perimage25,perimage30,perimage35,perimage40,perimage45,perimage50,perimage100,0] temp(logcount)=temp0 maxhit(logcount)=max(array) testdate(logcount)=logamerdate(log) ;date of test, mo/day/yr testjuli(logcount)=logjuli(log) ;date of test, juliday imagefilesused(logcount)=filecount close,2 openw,2,Log+"/rad_hits.out" Printf,2,Log print,'The initial chip temperature is: ',temp0 printf,2,'The initial chip temperature is: ',temp0 Printf,2,'The total number of hits greater than 5 dn was: ',sstr(j) Printf,2,'The total number of images used was: ',sstr(filecount) Printf,2,'The maximum hit (in dN) was: ',sstr(max(array)),string(10b) printf,2,'The number of hits greater that 5 dn is: ',nhits,' per image' printf,2,'The number of hits greater that 10 dn is: ',perimage10,' per image' printf,2,'The number of hits greater that 20 dn is: ',perimage20,' per image' printf,2,'The number of hits greater that 25 dn is: ',perimage25,' per image' printf,2,'The number of hits greater that 35 dn is: ',perimage35,' per image' printf,2,'The number of hits greater that 50 dn is: ',perimage50,' per image' printf,2,'The number of hits greater that 100 dn is: ',perimage100,' per image' close,2 nextlog: endfor ;end of loop on logcount ;____________________________ ;Write History Data to File... Printf,3,string(10b),'The following table presents the average number of cosmic ray Printf,3,'hits per image with amplitudes greater than the threshold indicated.',string(10b) label=['5','10','15','20','25','30','35','40','45','50','100','ymax'] printf,3,format='("Log # = ",$)' for i=1,nlogs do printf,3,i,format='(i9,$)' printf,3,'' printf,3,format='("Date = ",$)' for i=0,nlogs-1 do printf,3,testdate(i),format='(a9,$)' printf,3,'' printf,3,format='("Ymax = ",$)' for i=0,nlogs-1 do printf,3,maxhit(i),format='(i9,$)' printf,3,'' printf,3,format='("# files = ",$)' for i=0,nlogs-1 do printf,3,imagefilesused(i),format='(i9,$)' printf,3,'' printf,3,format='("ChipTemp =",$)' for i=0,nlogs-1 do printf,3,temp(i),format='((F9.1,$))' printf,3,'' printf,3,format='("Stdev (dn)",$)' for i=0,nlogs-1 do printf,3,overalldev(i),format='((F9.2,$))' printf,3,'' printf,3,format='("Hit Ave =",$)' for i=0,nlogs-1 do printf,3,overallave(i),format='((F9.2,$))' printf,3,'' printf,3,'' printf,3,format='("Threshold Number of Hits > Threshold (on the average, per image")' for i=0,11 do begin printf,3,label(i),format='(a4," dN ",$)' for j=0,nlogs-1 do printf,3,distdata(i,j),format='((f9.2,$))' printf,3,'' endfor printf,3,string(10b),"Ymax is the amplitude of the largest cosmic ray hit in all of the Images" close,3 ;______________ ;Make plots.. plot: ;______________ ;Plot Distribution... If printflag eq 0 then window,0,xsize=600,ysize=900 !p.multi=[0,1,1] ;first log... symbol=[1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7] ;plot sym type linesty=[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3] ;plot line type x=[5,10,15,20,25,30,35,40,45,50,100,maxhit(0)] y=distdata(*,0) plot,x,y,psym=symbol(0),xrange=[0,110],yrange=[0,25],Title='Distribution of Rad Hits',$ xtitle='X = Hit Amplitude (dN)',ytitle='Total Number of Hits > X, per Image' x2=findgen(100) y2=spline(x,y,x2,5) oplot,x2,y2,linestyle=linesty(0) ;subsaquent logs... for m=1,nlogs-1 do begin x=[5,10,15,20,25,30,35,40,45,50,100,maxhit(m)] y=distdata(*,m) oplot,x,y,psym=-symbol(m),linestyle=linesty(m) x2=findgen(100) y2=spline(x,y,x2,5) ;; oplot,x2,y2,linestyle=linesty(m) endfor ; Legend... for i=0,nlogs-1 do begin ystep=0.03 ;fraction of range between entries (i.e. 3%) xstep=0.0 ;fraction of range between entries (i.e. 0%) yoffset=0.5 ;fraction of range to first entry (i.e. 50%) xoffset=0.5 ;fraction of range to first entry (i.e. 50%) space=0.1 ;fraction of range between dot and text (i.e. 10%) length=0.03 ;Length of line, fraction of range (i.e. 0% long) xrange=!x.crange(1)-!x.crange(0) yrange=!y.crange(1)-!y.crange(0) ypos=(!y.crange(0)+yoffset*yrange)+(ystep*yrange*i) xpos=(!x.crange(0)+xoffset*xrange)+(xstep*xrange*i) xspace=space*xrange xlength=length*xrange oplot,[xpos,xpos+xlength],[ypos,ypos],psym=-symbol(i),linestyle=linesty(i) xyouts,xpos+xlength+xspace,ypos,logname(i) endfor if printflag eq 0 then read,'Hit return to continue... ',ans ;______________ ;plot hit history... If printflag eq 0 then window,1 !p.multi=[0,1,1] ;plotted on separate graphs... startdate=testjuli(0) enddate=testjuli(nlogs-1) n_years=6 startdate2=startdate-(n_years*365-(enddate-startdate))/2 enddate2=startdate2+365*n_years ;;enddate2=startdate+(fix((enddate-startdate)/365)+1)*365 dummy=LABEL_DATE(DATE_FORMAT='%D%M%Y') ;date=findgen(enddate+1-startdate)*n+startdate ;n=# of days between datapoints for i=0,11 do begin ;; plot,testjuli,distdata(i,*),xrange=[startdate2,enddate2],xtickformat='LABEL_DATE',xstyle=1,$ plot,testjuli,distdata(i,*),xrange=[startdate2,enddate2],xtickformat='LABEL_DATE',xstyle=1,$ title='History of Cosmic Ray hits greater than '+label(i)+' dN',$ xtitle='Date of Test', ytitle='# of Hits per Image > '+label(i)+' dN',$ yrange=[0,0],/ylog,xticks=n_years if printflag eq 0 then read,'Hit return to continue... ',ans endfor ;plot all on one graph... plot,testjuli,distdata(0,*),xrange=[startdate2,enddate2],xtickformat='LABEL_DATE',xstyle=1,$ title='History of Cosmic Ray hits',xticks=n_years,/ylog,yrange=[0.1,max(distdata)],$ xtitle='Date of Test', ytitle='# of Hits per Image ',psym=symbol(0) for i=0,11 do oplot,testjuli,distdata(i,*),linestyle=linesty(i),psym=-symbol(i) ; Legend... for i=0,11 do begin yoffset=0.7 ;fraction of range to first entry (i.e. 70%) xoffset=0.5 ;fraction of range to first entry (i.e. 50%) length=0.03 ;Length of line, fraction of range (i.e. 3% long) space=0.05 ;fraction of range between dot and text (i.e. 5%) ystep=0.02 ;fraction of range between entries (i.e. 2%) xrange=!x.crange(1)-!x.crange(0) yrange=!y.crange(1)-!y.crange(0) ypos=10^((!y.crange(0)+yoffset*yrange)+(ystep*yrange*i)) xpos=(!x.crange(0)+xoffset*xrange)+(xstep*xrange*i) xspace=space*xrange xlength=length*xrange oplot,[xpos,xpos+xlength],[ypos,ypos],psym=-symbol(i),linestyle=linesty(i) xyouts,xpos+xlength+xspace,ypos,label(i)+' dN' endfor ;______________ ;Plot Temperature vs time... If printflag eq 0 then window,2 plot,testjuli,temp,xrange=[startdate2,enddate2],xtickformat='LABEL_DATE',xstyle=1,$ title='History of Test Temperatures',xticks=n_years,yrange=[.9*min(temp),1.1*max(temp)],$ xtitle='Date of Test', ytitle='Temperature (K) ',psym=-symbol(0) ;______________ ;Plot Standard Deviation vs time... If printflag eq 0 then window,4 combined=[mridev,slidev,hridev] plot,testjuli,mridev,xrange=[startdate2,enddate2],xtickformat='LABEL_DATE',xstyle=1,$ title='History of Cosmic Ray Hit Standard Deviation',xticks=n_years,yrange=[0,1.1*max(combined)],$ xtitle='Date of Test', ytitle='Hit Standard Deviation (dN) ',psym=-7 oplot,testjuli,slidev,psym=-1 oplot,testjuli,hridev,psym=-2 xyouts,0.5,0.92,"MRI = X, SLI = +, HRI = *",/norm,alignment=.5,charsize=1.5 ;______________ ;Plot Averages vs time... If printflag eq 0 then window,5 combined=[mriave,sliave,hriave] plot,testjuli,mriave,xrange=[startdate2,enddate2],xtickformat='LABEL_DATE',xstyle=1,$ title='History of Average of Hits',xticks=n_years,yrange=[0,1.1*max(combined)],$ xtitle='Date of Test', ytitle='Hit Average (dN)',psym=-7 oplot,testjuli,sliave,psym=-1 oplot,testjuli,hriave,psym=-2 xyouts,0.5,0.92,"MRI = X, SLI = +, HRI = *",/norm,alignment=.5,charsize=1.5 ans='' If printflag eq 0 then read,'Hit return to continue...',ans ;____________________________________ ;Print Plots?... ans='' If printflag eq 0 then read,'Would you like to print the plots? (y or n): ',ans if ans eq "y" then begin pwin,3 printflag=1 set_plot,'ps' device,filename = '~/idl.ps',/palatino,/portrait,xsize=7.5,ysize=10, $ xoffset=.25,yoffset=.5,/inches device,filename = '~/idl.ps',font_size=12,/inches,scale_factor=1. command='lp -ofp14 -olm5 -olandscape ~/rad_stats.out' spawn,command goto,plot endif if printflag EQ 1 then begin device,/close_file spawn,'lp ~/idl.ps' set_plot,'x' ;returns to X windows environment endif ;____________________________________ ;Done... ;stop !p.multi=[0,1,1] stop close,/all Print,'Done!' end ;;;____________________________________ ;;;make synthetic zero ms images... ;;zeromri=intarr(176,256) ;;zerosli=intarr(128,256) ;;zerohri=intarr(160,256) ;;column=zero_ms_max*findgen(256)/256 ;memory zone darkcurrent for 0 ms exposure ;;for i=0,175 do zeromri(i,0:255)=column ;;for i=0,127 do zerosli(i,0:255)=column ;;for i=0,159 do zerohri(i,0:255)=column