;=============================================================================== ; Make a normalized kernel of specified FWHM on given grid with desired shape. ; Gaussian shape is default. ;=============================================================================== function make_kernel,FWHM=fwhm,GRID=grid,NFWHM=nfwhm,$ GAUSS=gauss,BOX=box,TRIANGLE=triangle ;=============================================================================== ;=============================================================================== if (not keyword_set(fwhm )) then return,0 if (not keyword_set(grid )) then return,0 if (not keyword_set(nfwhm)) then nfwhm = 4.0 ngrd = n_elements(grid) spacing = (grid(ngrd-1)-grid(0))/(ngrd-1.) nkpts = long(nfwhm*fwhm/spacing) if (nkpts mod 2 eq 0) then nkpts = nkpts + 1 kernel = 0 kernel = dindgen(nkpts)-(nkpts/2) kernel = kernel * spacing ;=============================================================================== ;=============================================================================== if (keyword_set(box)) then begin out = where(abs(kernel) gt fwhm/2.) in = where(abs(kernel) le fwhm/2.) kernel(out) = 0. kernel( in) = 1. ; make a boxcar endif else if (keyword_set(triangle)) then begin out = where(abs(kernel) gt fwhm/2.) in = where(abs(kernel) le fwhm/2.) kernel(out) = 0. kernel( in) = 1. ; make a boxcar kernel = convol(kernel,kernel(in),/CENTER) ; Convolve to get triangle endif else begin kernel = exp(-alog(2.0)/(fwhm/2.0)^2*(kernel)^2) endelse ;=============================================================================== ; Normalize the kernel, clean up, and return. ;=============================================================================== kernel = kernel/total(kernel) ; Normalize it no_err = check_math() return,kernel end ;=============================================================================== ; Test the routine ;=============================================================================== ;pro test_kernel ; grid=findgen(1000)*0.1 ; plot ,grid,make_kernel(FWHM=10.0,GRID=grid,/box ),psym=10,line=1 ; oplot,grid,make_kernel(FWHM=10.0,GRID=grid,/tri ),psym=10,line=2 ; oplot,grid,make_kernel(FWHM=10.0,GRID=grid,/gauss),psym=10,line=0 ;end