function eit_degrid_fft, image, fits_header, final = final ;+ ; ; NAME: ; eit_degrid_fft ; PURPOSE: ; Degrid an EIT image via an FFT transform. EIT_DEGRID_FFT assumes ; missing blocks have been raised to the detector offset, and the ; detector offset subtracted. ; ; CALLING SEQUENCE: ; clean_image = eit_degrid_fft(image, header [, /final]) ; ; INPUTS: ; image = Dark-subtracted EIT image ; header = FITS header ; OPTIONAL KEYWORDS: ; final = ???? ; ; RESTRICTIONS: ; The input image must have the missing blocks raised to detector ; offset, and the detector offset subtracted. (Fecit's words) ; ; At this time (9-Apr-1996) only supports full-frame full-resolution ; images. ; ; TODO: ; Need to stamp the FITS header so we know this image was degridded ; with <mumble> version of EIT_DEGRID_FFT. ; ; MODIfICATION HISTORY: ; 23-Mar-1996 - (DMF) - Written ; 9-Apr-1996 - (BNH) - Cleaned up and documented ;- if ((n_elements(image) le 0) or (n_elements(fits_header) le 0)) then begin message, 'clean_image=eit_degrid_fft(image, header [, /final])' return, -1 endif a = image sz_a = size(a) if not keyword_set(final) then final = 0 corner_offset = [-1, -1, -20, -20] utc_date_19960327 = anytim2utc('1996/03/27') utc_date_19960323 = anytim2utc('1996/03/23') n_x = sz_a(1) & n_y = sz_a(2) if ((n_x + n_y) lt 2048) then begin corner = intarr(4) ih = find_fits_keyword(fits_header, "COMMENT P1_X") for i_corner = 0, 3 do begin corner(i_corner) = fix(strmid(fits_header(ih + i_corner), 24, 4)) end ; fix for incorrect entry of pixel size. 8-apr-96 JSN if (corner(0) mod 2) and (corner(1) mod 2) then $ corner_offset = [-1,-2,-20,-20] corner = corner + corner_offset print, 'EIT_DEGRID-I-CORNERS, subfield corners = ', corner ; First case: full FOV, pixel summing endif else corner = [0, 1023, 0, 1023] ; if ((n_x + n_y) eq 2048) then begin degrid = 1 degrid_file = getenv('SSW_EIT')+'/response/degrid_' ih = find_fits_keyword(fits_header, "WAVELNTH") p_pos = strpos(fits_header(ih), '/') wave = strmid(fits_header(ih), p_pos - 4, 3) ih = find_fits_keyword(fits_header, "FILTER") a_pos = strpos(fits_header(ih), "'") filter_string = strmid(fits_header(ih), a_pos + 1, 5) ; For now, clear means Al +1 and Al +2 means clear (clear?). For ; anything else, punt. ih = find_fits_keyword(fits_header, "DATE_OBS") a_pos = strpos(fits_header(ih), "'") date_obs = strmid(fits_header(ih), a_pos + 1, 24) utc_date_obs = anytim2utc(date_obs) if (not final) and (utc_date_obs.mjd lt utc_date_19960327.mjd) $ and (utc_date_obs.mjd ne utc_date_19960323.mjd) then begin if strlowcase(filter_string) eq 'clear' then begin degrid_file = degrid_file + wave + '_' + 'al1.dat' endif else if strlowcase(filter_string) eq 'al +2' then begin degrid_file = degrid_file + wave + '_' + 'clear.dat' endif else degrid = 0 endif else begin if strlowcase(filter_string) eq 'clear' then begin degrid_file = degrid_file + wave + '_' + 'clear.dat' endif else if strlowcase(filter_string) eq 'al +1' then begin degrid_file = degrid_file + wave + '_' + 'al1.dat' endif else degrid = 0 end if degrid then begin openr, degrid_unit, degrid_file, /get_lun, /xdr degrid_array = fltarr(1024, 1024) readu, degrid_unit, degrid_array close, degrid_unit & free_lun, degrid_unit a = a*degrid_array(corner(0):corner(1), corner(2):corner(3)) endif else a = float(a) return, a end
Last revised: - Wed May 9 21:45:07 2007- F. Auchère