Viewing contents of file '../idllib/astron/contrib/freudenreich/robust_boxcar.pro'
PRO ROBUST_BOXCAR,X,Y,NPER, U,V,SIG, CONF_INT=PERSENT
;
;+
; NAME:
; ROBUST_BOXCAR
;
; PURPOSE:
; Calculate robust boxcar averages of fixed number of points. One average
; is calculated per NPER points. (Remaining points go into the last
; average.) Biweights are used. The same weights are applied to the X
; variable in calculating its average, so that the (X,Y) correspondence
; is not lost.
;
; CALLING SEQUENCE:
; ROBUST_BOXCAR, X, Y, NPER, U, V, SIG, [ CONF_INT = ]
;
; INPUT ARGUMENTS:
; X = X coordinates vector
; Y = Distribution in vector form
; NPER = # points per average
;
; OUTPUT ARGUMENT:
; U = vector of average X
; V = vector of average Y
;
; OPTIONAL OUTPUT ARGUMENT:
; SIG = standard error of V (a robust std. dev. of the mean) [OPTIONAL]
;
; OPTINAL INPUT KEYWORD:
; CONF_INT = confidence interval in percent. If this keyword is present
; then output SIG = the confidence interval
;
; SUBROUTINE CALLS:
; BIWEIGHT_MEAN, which calculates the averages
;
; REVISION HISTORY:
; Written, H. Freudenreich, STX, 1/92
; Modifications: H.F. 3/94 -- added confidence intervals option
;-
ON_ERROR,2
N=N_ELEMENTS(X)
NSEG=N/NPER
U=FLTARR(NSEG) & V=FLTARR(NSEG) & SIG=FLTARR(NSEG)
IF KEYWORD_SET(PERSENT) THEN TINT=PERSENT*.01 ELSE TINT=-1.
J=0
FOR I=0,NSEG-2 DO BEGIN
JEND=J+NPER-1
R=BIWEIGHT_MEAN( Y(J:JEND), S, WEIGHTS)
U(I) =TOTAL( X(J:JEND)*WEIGHTS )
V(I) =R
IF TINT GT 0. THEN SIG(I)=ABS(STUDENT_T(TINT,.7*(NPER-1)))*S/SQRT(NPER) $
ELSE SIG(I)=S
J=JEND+1
ENDFOR
; Remaining points are added to the last bin:
I=NSEG-1
R=BIWEIGHT_MEAN(Y(J:N-1),S, WEIGHTS)
U(I) =TOTAL( X(J:N-1)*WEIGHTS )
V(I) =R
IF TINT GT 0. THEN BEGIN
M=N-J
SIG(I)=ABS(STUDENT_T(TINT,.7*(M-1)))*S/SQRT(M)
ENDIF ELSE SIG(I)=S
RETURN
END