;         18-Mar-2008 A. Gardini - Changed the column's order in moments.
;          3-Aug-2008 A. Gardini - Changed call to getvar to get wdm.
pro eis_moment::corrvel,iwin,bad,init=init
  if n_elements(init) eq 1 then return
  ndegree=2
; wdm=self->getvar(iwin)
  wdm=*self.w[iwin]
  nslit=(size(wdm))[2]
  nexp=(size(wdm))[3]
  int=fltarr(nslit,nexp)
  vel=fltarr(nslit,nexp)
  vel2=fltarr(nslit,nexp)
  avx=fltarr(nslit)
  avy=fltarr(nexp)
  int[*,*]=wdm[0,*,*]
  vel[*,*]=wdm[1,*,*]
  dark=where(int lt 0.1*stdev(int))
  if dark[0] ne -1 then vel[dark]=0.0
; subtract average velocity at each exposure time
  for j=0,nexp-1 do begin
    good_px=where(bad[*,j] ge 0.0 and abs(vel) lt 200. and int gt 0.1*stdev(int),good_count)
    if good_count gt 0 then $
      vel2[*,j]=vel[*,j]-total(vel[good_px,j],1)/(good_count)
  endfor
; average velocity along slit excluding bad pixels
  for i=0,nslit-1 do begin
    avx[i]=0.
    good_px=where(bad[i,*] ge 0.0,good_count)
    if good_count gt 0 then avx[i] = total(vel2[i,good_px],2)/(good_count)
  endfor
  r=poly_fit(indgen(nslit),avx,ndegree,yfit=avxx)
  for j=0,nexp-1 do vel[*,j]=vel[*,j]-avxx
  for j=0,nexp-1 do begin
    good_px=where(bad[*,j] ge 0.0 and abs(vel) lt 200. and int gt 0.1*stdev(int),good_count)
    if good_count gt 0 then $
      avy[j]=total(vel[good_px,j],1)/(good_count)
  endfor
  for i=0,nslit-1 do vel[i,*]=vel[i,*]-smooth(avy,15,/edge_truncate)
  if dark[0] ne -1 then vel[dark]=0.0
  wdm[1,*,*]=vel
; self->setvar,wdm,iwin
  *self.w[iwin]=wdm
  return
end
