pro ave_pro_maker, opt,z,data,nz,nmin,dmin,dmax,nsmooth, data_av,data_sd,data_sdm,num_good,freq,data_md ;---------------------------------------------------------------------------------------------- ; Purpose: routine computes an average profile from the input data. ; ; Input: ; opt........0 = input data are fltarr(altitude,event), 1 = data are fltarr(event,altitude) ; z..........altitude scale (vector) ; data.......data to use in making average profile ; nz.........number of altitudes ; nmin.......minimum number of data points to use in making average at any altitude ; dmin.......minimum data value to use in making average at any altitude ; dmax.......maximum data value to use in making average at any altitude ; nsmooth....if > 0, then perform a vertical box car smooth over +/- nsmooth points ; ; Output: ; data_av.....average profile on the input altitude grid, fltarr(altitude) ; data_md.....median profile on the input altitude grid, fltarr(altitude) ; data_sd.....the data standard deviations on the input altitude grid, fltarr(altitude) ; data_sdm....the data standard deviation of the mean on the input altitude grid, fltarr(altitude) ; num_good....number of observations used, fltarr(altitude) ; freq........frequency of data > dmin vs. altitude (%), fltarr(altitude) ; ; Required sub routines: box_car.pro ; ; Source: Mark Hervig, GATS Inc. ;---------------------------------------------------------------------------------------------- data_av = dblarr(nz) data_md = dblarr(nz) data_sd = dblarr(nz) data_sdm = dblarr(nz) num_good = fltarr(nz) ;- loop over Z if (opt eq 0) then begin nobs = n_elements(data(0,*)) for i = 0,nz-1 do begin k = where(data(i,*) gt dmin and data(i,*) lt dmax,nk) num_good(i) = nk if (nk ge nmin) then begin data_av(i) = mean(data(i,k)) data_md(i) = median(data(i,k)) data_sd(i) = 0. data_sdm(i) = 0. if (nk gt 1) then begin data_sd(i) = stddev(data(i,k)) data_sdm(i) = data_sd(i) / sqrt(nk) endif endif endfor endif if (opt eq 1) then begin nobs = n_elements(data(*,0)) for i = 0,nz-1 do begin k = where(data(*,i) gt dmin and data(*,i) lt dmax,nk) num_good(i) = nk if (nk ge nmin) then begin data_av(i) = mean(data(k,i)) data_md(i) = median(data(k,i)) data_sd(i) = 0. data_sdm(i) = 0. if (nk gt 1) then begin data_sd(i) = stddev(data(k,i)) data_sdm(i) = data_sd(i) / sqrt(nk) endif endif endfor endif ;- vertical box car smooth if (nsmooth gt 0) then begin box_car,data_av,nsmooth, rsm, rsd data_av = rsm endif ;- Frequency of good data freq = 100 * num_good / float(nobs) ;- done return end