function where_within, range, valid_range, count, bad_count=bad_count, bad_ind=bad_ind count = 0 bad_count = 0 bad_ind = -1 inrange = range ;allow range to have 2 elements along either axis or be a 1-D array of edges dimrange = size(/dim,inrange) case 1 of n_elements(dimrange) eq 1: inrange = get_edges(inrange, /edges_2) (dimrange[1] eq 2) and (dimrange[0] ne 2): inrange = transpose(inrange) else: endcase dimrange = size(/dim,inrange) if dimrange[0] ne 2 or n_elements(dimrange) gt 2 then begin message,'Range to check must be [2,n], nx2, or n array', /cont return, -1 endif if n_elements(valid_range) ne 2 then begin message,'Valid range must be 2-element array', /cont return, -1 endif nint = dimrange[1] bad_ind = where (inrange[0,*] lt valid_range[0] or $ inrange[0,*] gt valid_range[1] or $ inrange[1,*] lt valid_range[0] or $ inrange[1,*] gt valid_range[1], bad_count) if bad_count eq nint then return, -1 ret = lindgen(nint) count = nint - bad_count if bad_count eq 0 then return, ret else return, rem_elem(ret, bad_ind) en