EIT Software Listings

 

anal
obsolete
response
util

 

Previous Routine
Next Routine

 

Listing of $SSW/soho/eit/idl/util/eit_fill_cube.pro

 


pro eit_fill_cube, cube, ocube, orig_miss=orig_miss, final_miss=final_miss, $
    times=times, missing=missing, track_progress=track_progress, $
    window=window
;+
;   Name: eit_fill_cube
;
;   Purpose: fill missing data with data from neighbors
;  
;   Input Parameters:
;      cube  - data cube (output if only one parameter passed)
;
;   Output Parameters:
;      ocube - optional - output (filled cube) - default replaces input
; 
;   Keyword Parameters:
;      missing - if set, pixel value considered 'missing' (default=0)
;      times   - vector of image times (not yet implemented)
;      track_progress - switch, if set, print correction status info 
;      window - limit window of neighbors to check (+/- limit)
;               (for large cubes, dont wander further than required 
;
;   Output Parameters:
;      orig_miss  - percent missing data in original cube [fltarr(nimages)]
;      final_miss - percent missing data in final cube 
;
;   Calling Sequence:
;      eit_fill_cube,cube		; overwrite input with filled version
;      eit_fill_cube,cube,ocube         ; filled version in ocube (orig saved)
;
;   Calling Examples:
;      eit_fill_cube,cube, orig=orig, final=final
;      eit_fill_cube,cube, mising='aa'x  ; AA(hex) is "missing" (ex: fill data)
;      eit_fill_cube,cube, window=2      ; check neghbors within +2/-2 
;
;   Restrictions:
;      Assumes images are kindof like their neighbors 
;      (normalization, wavelenth, structure, registration, time, whatever)
;
;   History:
;      17-feb-1996 S.L.Freeland
;      18-Feb-1996 S.L.Freeland - add WINDOW keyword and function
;
;   Nothing about this is EIT specific (fills any data cube) so it might->GEN
;   
;   Side Effects:
;      Input array is filled ('clobbered') if only one parameter (for space)
;-

debug=keyword_set(track_progress)	; subtle difference,,,

if data_chk(cube,/ndim) ne 3 then begin
   message,/info,"Sorry, only works on a cube..."
   return
endif

if not keyword_set(missing) then missing=0		; default miss value
sdata=size(cube)
nimage=sdata(3)

orig_miss=fltarr(nimage)		; original quality (output keyword)
final_miss=fltarr(nimage)		; final quality    (output keyword)
npix=float(sdata(1)*sdata(2))

newcube=n_params() eq 2			; need an output copy?
if newcube then ocube=cube
exestr=(['cube(0,0,i)=image','ocube(0,0,i)=image'])(newcube)

if keyword_set(window) then nabors=window+1 else nabors=nimage-1  ;# neighbors
order=lonarr(nabors,nimage)		; "next image" pointers

; Form Nearest Neighbor pointer array
xorder=reform(transpose([lindgen(nabors)+1]#[1,-1]),(nabors)*2)

if n_elements(time) ne nimage then begin
   for i=0,nimage-1 do begin		
     next=xorder+i
     order(0,i)=(reform(next(where(next ge 0 and next le nimage-1))))(0:nabors-1)
   endfor
endif else begin
   message,/info,"not yet implemented....       ; use Time vector for order
endelse

for i=0, nimage-1 do begin		        ; for each image
   image=cube(*,*,i)				; extract
   miss=where(image eq missing,mcnt)	        ; flag missing data
   orig_miss(i)=float(mcnt)/npix*100.	        ; remember original missing %
   nn=-1				        ; neighbor pointer pointer
   if debug then print,'Image: ' + strtrim(i,2) + ' Original Percent Missing: ' + string(orig_miss(i),format='(F6.2)')

   while (mcnt gt 0) and nn lt nabors-1 do begin
      nn=nn+1
      next=order(nn,i)                          ; next neighbor to check
      nxtimage=cube(*,*,next)		        ; grab next neighbor
      image(miss)=nxtimage(miss)		; copy neighbor->current
      miss=where(image eq missing,mcnt)         ; re-check composite
      if debug then print,'Image: ' + strtrim(i,2) + ' Neigbor' + strtrim(next,2) + ' Percent Missing: ' + string(float(mcnt)/npix*100.,format='(F6.2)')
   endwhile

   final_miss(i)=float(mcnt)/npix*100.
   insert=execute(exestr)			; composite -> output array
endfor

return
end


Web curator: Frédéric Auchère
Responsible NASA official: Joseph B. Gurman, Facility Scientist, Solar Data Analysis Center
joseph.b.gurman@gsfc.nasa.gov
+1 301 286-4767
NASA Goddard Space Flight Center
Solar Physics Branch / Code 682

Last revised: - Wed May 9 21:45:16 2007- F. Auchère