; Function Leefilt_smei, aIn, nIn, sigIn, $ DOUBLE = double, $ EXACT = EXACT, $ nan = nan, $ median = median ON_ERROR, 2 ;Return to caller if an error occurs tnames = [SIZE(aIn, /TNAME), SIZE(nIn, /TNAME), SIZE(sigIn, /TNAME)] double = (N_ELEMENTS(double) GT 0) ? KEYWORD_SET(double) : $ MAX(tnames EQ 'DOUBLE') NP = N_params(0) IF np lt 3 THEN sigIn = 5 ;supply defaults sig = double ? DOUBLE(sigIn) : FLOAT(sigIn) IF np lt 2 THEN nIn = 5 dim = SIZE(aIn, /DIMENSIONS) n = FLOOR(nIn) IF ((n LT 1) OR (n GE MIN(dim)/2)) THEN MESSAGE, $ 'Filter width 2N+1 must be > 2 and smaller than array dimensions.' a = double ? DOUBLE(aIn) : FLOAT(aIn) pl = sig LE 0. ;true if interactive mode loop: IF pl THEN read, 'Type in Sigma (0 to quit) : ', sig IF sig EQ 0 THEN goto, endp IF keyword_set(EXACT) THEN $ f = lee_filter_exact(a, 2*n+1, Sig, DOUBLE = double, nan = nan, $ median = median) $ $ ELSE f = lee_filter_fast(a, 2*n+1, Sig, DOUBLE = double, nan = nan, $ median = median) IF pl THEN BEGIN IF (size(f))[0] eq 1 then $ PLOT, f, xtitle = 'Element of A', ytitle = 'Value of A', $ title = 'Lee Filtered A, N ='+string(N, FORMAT = '(I3)')+', Sigma = '+$ string(Sig, FORMAT = '(F5.2)') else TVSCL, f GOTO, loop ENDIF endp: RETURN, f END