function average_hist,a,x,stdev=std,log=log, $
range=range,binsize=binsize,nbins=nbins,xbins=xbins,$
binval=bins, minimum=minimum,shift=shft,nan=rnan,$
histogram=h,reverse=ri
if keyword_set(x) then begin
if n_elements(x) ne n_elements(a) then message,'Inputs must have same number of elements'
bins = histbins(x,xbins,log=log,range=range,nbins=nbins,binsize=binsize,/retbins,shift=shft)
endif
if keyword_set(bins) then begin
if n_elements(bins) ne n_elements(a) then message,'BINS must be same size as input array'
if not keyword_set(nbins) then nbins = max(bins)+1
h = histogram(bins,min=0,max=nbins-1,reverse=ri)
if n_elements(h) ne nbins then message,'NBINS does not match h[]'
endif
nbins = n_elements(h)
nan = fill_nan(a[0])
minimum = replicate(nan,nbins)
avg = make_array(value=nan,dimen=size(h,/dimen))
std = avg
whn0 = where(h ne 0,count)
for j=0l,count-1 do begin
i = whn0[j]
ind = ri[ ri[i]: ri[i+1]-1 ]
if n_elements(ind) ne h[i] then dprint ,'Histogram error'
avg[i] = average(a[ind],stdev=s,nan=rnan)
if arg_present(minimum) && size(/type,a) lt 7 then minimum[i] = min(a[ind])
std[i] = s
endfor
return,avg
end