;+ ; NAME: ; REMOVE_OUTLIERS_REPAIR ; ; PURPOSE: ; Routine repairs outliers. Quadratic trend is determined in a hollow ; vicinity of each point. The data value is compared with the trend ; value. If the deviation is statistically improbable, the value is ; repaired. There are 6 options for repair. ; ; CATEGORY: ; Data Processing ; ; CALLING SEQUENCE: ; repair, valneib, tneib, valiin, nmax, valiout ; ; INPUTS: ; VALNEIB: array of the data values in the hollow vicinity of the point. ; TNEIB: array of the observation times for the above values. ; VALIIN: the value to filter. ; NMAX: maximal probable deviation from the average in units of standard ; deviation ; ; KEYWORDS: None ; ; PARAMETERS: The code has one parameter "sch" setting the way outlier is ; repaired. ; ; OUTPUTS: ; VALIOUT: filtered value. ; ; DEPENDENCIES: None. Called by remove_outliers.pro ; ; MODIFICATION HISTORY: ; Written by: Vladimir Kondratovich 2007/12/28. ;- ; ; THE CODE BEGINS: pro remove_outliers_repair,valneib,tneib,valiin,nmax,valiout ;Set the way outlier is repaired (see cases below): sch=5 valiout=valiin ;Find the (quadratic) trend: dim=n_elements(valneib) if dim le 1 then return; - not enough points for evaluation coefs=svdfit(tneib,valneib,3,yfit=modys,/double) valdev=sqrt(total((valneib-modys)^2)/(dim-1)) valmn=coefs[0] ;apply criteria allowed=nmax*valdev uplim=valmn+allowed lowlim=valmn-allowed if abs(valiin-valmn) gt allowed then begin case sch of 0: if valiin gt uplim then valiout=uplim else if valiin lt lowlim then valiout=lowlim 1: valiout=interpol(valneib,tneib,0.) ; linear 2: valiout=interpol(valneib,tneib,0.,/quadratic) 3: valiout=interpol(valneib,tneib,0.,/lsquadratic) 4: valiout=interpol(valneib,tneib,0.,/spline) 5: valiout=valmn endcase endif return end