Viewing contents of file '../idllib/contrib/icur/avbad.pro'
;***********************************************************************
function avbad,f1,e,kk,bad=bad     ;expunge bad data points
;
f=f1
; first, get rid of single points
f=avspt(f,e,kz,bad=bad)
if n_elements(kz) eq 0 then kk=-1 else kk=kz           ;indices of single pts
;
np=n_elements(f)-1
if n_elements(bad) gt 0 then k=bad else case 1 of
      (min(e) eq 0) and (max(e) lt 10): k=where(e gt 1)
      (min(e) lt 0)                   : k=where(e lt -200)
      else                            : k=where(e eq 0)
      endcase
nk=n_elements(k)          ;number of bad points
nkk=n_elements(kz)        ;number of bad single points
nsp=nk-nkk                ;number of other bad points
if nk le 0 then return,f
if nsp le 0 then return,f 
;
if nkk gt 0 then begin     ;there are single bad points
   for i=0,nkk-1 do k(where(k eq kk(i)))=-1
   k=k(where(k gt -1))
   nk=n_elements(k)
   if nk ne nsp then begin
      print,' AVBAD: Warning: nk=',nk,' nk-nkk=',nsp
      endif
   endif
;
k1=k(1:*)-k       ;difference
k2=where(k1 gt 1,nk2)
if nk2 eq 0 then k2=[0,n_elements(k)] else k2=[0,k2+1,n_elements(k)]
nk2=nk2+1      ;number of bad intervals
print,nk2,' bad intervals being interpolated'
for i=0,nk2-1 do begin
   i1=k(k2(i))-1 & i2=k(k2(i+1)-1)+1
   case 1 of
      i1 eq -1: f(0:i2-1)=f(i2)
      i2 ge np: f(i1+1:*)=f(i1)
      else: begin
         np1=i2-i1    ;number of points
         sl=(f(i2)-f(i1))/np1
         x=f(i1)+findgen(np1)*sl
         f(i1)=x
         end
      endcase
   endfor
;
return,f
end