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