Viewing contents of file '../idllib/ghrs/pro/calfos_repair.pro'
pro calfos_repair,mask,data
;+
; calfos_repair
;
; Repair bad pixels in a data vector by linear interpolation over
; good pixels.
;
; CALLING SEQUENCE:
; calfos_repair,mask,data
;
; INPUTS:
; mask - mask of same length as data. mask=0 (good pixel)
; mask=1 (bad pixel)
; INPUT/OUTPUT:
; data - data vector
;
; OPERATIONAL NOTES:
; if all pixels are bad, no repair is done and !err is set to -1.
; Otherwise !err is set to 1.
;
; HISTORY:
; version 1.0 D. Lindler Jan 1990
;-
;---------------------------------------------------------------------------
ns = n_elements(data) ;number of data points
bad = where(mask) & nbad=!err ;bad data points
if nbad eq ns then begin ;all bad?
!err = -1
return
end
if nbad gt 0 then begin ;any bad points?
;
; locate bad regions
;
first = intarr(nbad) ;first point in regions
last = intarr(nbad) ;last point in regions
nregions = 0 ;number of regions
first(0) = bad(0) ;first point in first region
for i=1,nbad-1 do begin ;loop on bad points
if bad(i)-bad(i-1) gt 1 then begin ; not consecutive?
last(nregions) = bad(i-1) ;last point in region
nregions = nregions + 1
first(nregions) = bad(i) ;first point in next region
endif
endfor
last(nregions) = bad(nbad-1) ;last point in last region
;
; correct each bad region
;
for k=0,nregions do begin
i1 = first(k) ;first bad point
i2 = last(k) ;last bad point
j1 = i1 - 1 ;previous good point
j2 = i2 + 1 ;next good point
if j1 lt 0 then j1=j2 ;propagate data from j2
if j2 ge ns then j2=j1 ;propagate data from j1
d1 = data(j1)
d2 = data(j2)
if j1 ne j2 then frac = (d2-d1)/(j2-j1)
;
; interpolate between two good points
;
index = indgen(i2-i1+1) + i1
if j1 ne j2 then begin
data(index) = d1 + frac*(index-j1) ;interpolate
end else begin
data(index) = data(j1) ;propagate
endelse
endfor ; loop on regions
end; if there are any bad data points
!err = 1
return
end