;;;;GRAT_START;;;; Common grat_vars,en1,en2,en3,type,hmax,wmax,period,z,en1eff,en2eff,en3eff hc=12.399 ;;;;units of keV*Angstroms n=1e4 ;;;;number of elements in array cell=complexarr(n) ;;;;grating array orders=indgen(10000)/50. ;;;;due to period=200 impulses order=n/200 ;;;;based on period=200 impulses first=order & second=2*order & third=3*order ;;;;diffraction orders type='' & lean='' & trap='' & squar='' & convol='' read,'What three x-ray energies (keV)? ',en1,en2,en3 read,'What is maximum height of bars (angstroms)? ',hmax read,'What period between bars (angstroms)? ',period read,'What is maximum width of bars (angstroms)? ',wmax while type NE 'g' and type NE 's' do read,'Gold or Silver grating(g/s)? ',type k1=en1*2.0*!pi/hc & k2=en2*2.0*!pi/hc & k3=en3*2.0*!pi/hc print,'ENTER ANGLES TO GIVE EQUAL MAGNITUDES OF LEANING RANGE FOR GRATING BARS.' read,'What is beginning angle of lean for first bar (degrees)? ',anglemin1 read,'What is ending angle of lean for first bar (degrees)? ',anglemax1 tryagain: read,'What is beginning angle of lean for second bar (degrees)? ',anglemin2 read,'What is ending angle of lean for second bar (degrees)? ',anglemax2 if abs(anglemax2-anglemin2) NE abs(anglemax1-anglemin1) then begin print,'!!! Range not same as first bar !!!' goto,tryagain endif read,'Step by how many degrees between min and max angles? ',anglestep angles=float(indgen((abs(anglemax1-anglemin1)/anglestep)+1))*anglestep if anglemax1 GT anglemin1 then angles1=angles+anglemin1 else $ angles1=anglemin1-angles if anglemax2 GT anglemin2 then angles2=angles+anglemin2 else $ angles2=anglemin2-angles print,'Angles for first bar: ',angles1 & print,'' print,'Angles for second bar: ',angles2 dum=size(angles) numangles=dum(1) en1eff=fltarr(numangles,4) ;;;;efficiencies at the three en2eff=fltarr(numangles,4) ;;;;energies: columns=angles en3eff=fltarr(numangles,4) ;;;;and rows=orders FOR a=0,(numangles-1) DO BEGIN ;;********************************* angle1=angles1(a) & angle2=angles2(a) grat_lean_range,angle1,angle2 FOR i=1,3 DO BEGIN ;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if i eq 1 then begin & en=en1 & k=k1 & endif if i eq 2 then begin & en=en2 & k=k2 & endif if i eq 3 then begin & en=en3 & k=k3 & endif index=getdeltabeta(en,type) delta=index(0) & beta=index(1) realcell=(-k*beta*z) imcell=(k*delta*z) compcell=complex(realcell,imcell) expcell=exp(compcell) cell(0:399)=expcell fcell=fft(cell,-1) if i eq 1 then fcell1=fcell if i eq 2 then fcell2=fcell if i eq 3 then fcell3=fcell norm=(n/400)^2 ;;;;normalization of intensities because fft divides ;;;;by #elements and must divide ftransform by cell width ;if i eq 1 then !p.multi=[0,1,3] else $ ;;;;this is necessary to plot images ;!p.multi=[4-i,1,3] ;;;;in order from top to bottom ;plot,orders,(abs(fcell))^2*norm,xr=[0,6],charsize=2,$ ; xtitle='ORDER',ytitle='INTENSITY',title=en ENDFOR ;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% en1eff(a,0)=abs(fcell1(0))^2*norm ;;;;these efficiences are based en1eff(a,1)=abs(fcell1(first))^2*norm ;;;;on the orders found when the en1eff(a,2)=abs(fcell1(second))^2*norm ;;;;bars are spaced apart by 200 en1eff(a,3)=abs(fcell1(third))^2*norm ;;;;exactly as determined by the en2eff(a,0)=abs(fcell2(0))^2*norm ;;;;impulse function distribution en2eff(a,1)=abs(fcell2(first))^2*norm en2eff(a,2)=abs(fcell2(second))^2*norm en2eff(a,3)=abs(fcell2(third))^2*norm en3eff(a,0)=abs(fcell3(0))^2*norm en3eff(a,1)=abs(fcell3(first))^2*norm en3eff(a,2)=abs(fcell3(second))^2*norm en3eff(a,3)=abs(fcell3(third))^2*norm ;;print,'en1: ',en1eff(a,*) ;;print,'en2: ',en2eff(a,*) ;;print,'en3: ',en3eff(a,*) ENDFOR ;;********************************* grat_eff_plot END