function boxave, array, xsize, ysize On_error,2 compile_opt idl2 if N_params() EQ 0 then $ message,'Syntax - out = BOXAVE( array, xsize, [ysize ])',/NoName s = size(array) if ( s[0] NE 1 ) && ( s[0] NE 2 ) then $ message,'Input array (first parameter) must be 1 or 2 dimensional' if N_elements(xsize) EQ 0 then read,'BOXAVE: Enter box size: ',xsize if N_elements(ysize) EQ 0 then ysize = xsize s = size(array) ninx = s[1] noutx = ninx/xsize type = s[ s[0] + 1] integer = (type LT 4) || (type GE 12) if s[0] EQ 1 then begin ; 1 dimension? if integer then begin if xsize LT 2 then return, array counter = lindgen(noutx)*xsize output = array[counter] for i=1,xsize-1 do output = output + array[counter + i] if type GE 14 then nboxsq = double(xsize) else nboxsq = float(xsize) endif else return, rebin( array, noutx) ;Use REBIN if not integer endif else begin ; 2 dimensions niny = s[2] nouty = niny/ysize if integer then begin ;Byte, Integer, or Long if type GE 14 then begin nboxsq = double( xsize*ysize ) output = dblarr( noutx, nouty) ;Create output array endif else begin nboxsq = float( xsize*ysize ) output = fltarr( noutx, nouty) ;Create output array endelse counter = lindgen( noutx*nouty ) counter = xsize*(counter mod noutx) + $ (ysize*ninx)*long((counter/noutx)) for i = 0L,xsize-1 do $ for j = 0L,ysize-1 do $ output = output + array[counter + (i + j*ninx)] endif else $ return, rebin( array, noutx, nouty) ;Use REBIN if not integer endelse case type of 12: return, uint(round( output/nboxsq )) ;Unsigned Integer 13: return, ulong( round(output/nboxsq)) ;Unsigned Long 14: return, round(output/nboxsq, /L64) ;64bit integer 15: return, ulong64(round(output/nboxsq,/L64)) ;Unsigned 64bit 2: return, fix( round( output/ nboxsq )) ;Integer 3: return, round( output / nboxsq ) ;Long 1: return, byte( round( output/nboxsq) ) ;Byte endcase end