Viewing contents of file '../idllib/contrib/esrg_ucsb/average.pro'
pro average, tab, moy, stdv, nb, reject=reject
;+
; FUNCTION: This procedure computes the AVERAGE of a the nk
; fields stored in the array tab (nbcol,nblign,nk).
;
; INPUTS : tab --> 3 dimensional array (nbcol x nblign x nk)
;
; OUTPUTS : moy --> average of the fields (nbcol x nblign)
; stdv --> standard deviation (nbcol x nblign)
; nb --> number of points used in the average
;
; USE : vertaver, array1, array2, outaver,outstdc,outelmts
;
; CONTACT : Didier JOURDAN didier@esrg.ucsb.edu
;-
sz=size(tab)
;
if (n_elements(reject) ne 0) then begin
reject=reject
endif else begin
reject=9999.
endelse
print
print, '==> By default values =', reject,' are rejected'
print, '==> To change the value use keyword : reject=new_value'
print
;
; define arrays & variables
;
som=dblarr(sz(1), sz(2))
som2=dblarr(sz(1), sz(2))
nb=dblarr(sz(1), sz(2))
moy=dblarr(sz(1), sz(2))
moy2=dblarr(sz(1), sz(2))
test=dblarr(sz(1), sz(2))
stdv=dblarr(sz(1), sz(2))
;
irej=where(tab ne reject)
sz1=size(irej)
if (sz1(0) eq 0) then begin
if (irej eq -1) then begin
moy(*,*)=reject
stdv(*,*)=reject
nb(*,*)=0.
endif
endif else begin
;
; do loop over # of fields
;
for i=0L, sz(3)-1 do begin
; compute sum
som(*,*)=som(*,*)+tab(*,*,i)*(tab(*,*,i) ne reject)
; compute square of the sum
som2(*,*)=som2(*,*)+(tab(*,*,i)*(tab(*,*,i) ne reject))^2
; counts number of points different from reject.
nb(*,*)=nb(*,*)+(tab(*,*,i) ne reject)
endfor
iw=where(nb eq 0)
;
;compute average
;
index=where(nb gt 0)
moy(index)=som(index)/nb(index)
; square ifthe sum
moy2(index)=som2(index)/nb(index)
test(index)=moy2(index)-moy(index)^2
neg=where(test lt 0)
pos=where(test gt 0)
;
; check negative values in test array
; if (neg(0) ne -1) then begin
; chain=string("WARNING STDV NEGATIVE FOR",n_elements(neg)," mean", $
; " values computed with")
; chain=strcompress(chain)
; print, "--------------------------------------------------------------------------------"
; print, chain
; for i=0L, sz(3)-1 do begin
; nb(*,*)=tab(*,*,i)
; print, "--------------------------------------------------------------------------------"
; print, nb(neg)
; endfor
; print, "================================================================================"
; print, test(neg)
; print, "================================================================================"
; stdv(neg)=0.
; endif
;
;compute standard deviation
;
stdv(pos)=sqrt(test(pos))
;
; missing values
;
if (iw(0) ne -1) then begin
moy(iw)=reject
moy2(iw)=reject
stdv(iw)=reject
endif
endelse
return
end