Viewing contents of file '../idllib/ghrs/pro/calfos_flt.pro'
pro calfos_flt,flat,ypos,config,pattern,h,data,err
;+
; CALFOS_FLT
;
; FOS flat fielding
;
; CALLING SEQUENCE:
; calfos_flt,flat,ypos,config,pattern,h,data,err
;
; INPUTS:
; flat - flat field array NS x 2.
; flat(*,0) = upper or single aperture or pass_dir = 1
; flat(*,1) = lower aperture or pass_dir = 2
; ypos - two element vector containing the ybase for the
; upper and the lower aperture for a paired aperture.
; config - instrument configuration (output from CALFOS_RD)
; pattern - pattern vector (output from CALFOS_RD)
;
; INPUT/OUTPUTS:
; h - fits header
; data - data array
; err - propagated error array
;
; HISTORY:
; version 1.0 D. Lindler Jan 1990
;-
;----------------------------------------------------------------------------
;
; get configuration and pattern information
;
polar_id = strtrim(config(2))
if strtrim(config(7)) eq 'PAIR' then paired = 1 else paired = 0
ytypes = config(4:6)
ysteps = pattern(6)
yrange = pattern(5)
ybase = pattern(4)
slices = pattern(9)
nreads = pattern(10)
;
; determine which ysteps to calibrate
;
if ysteps le 3 then begin
calibrate = intarr(ysteps)
for i=0,ysteps-1 do if strtrim(ytypes(i)) ne 'BCK' then $
calibrate(i) = 1
end else calibrate=replicate(1,ysteps)
;
; determine which of the two flat fields to use
;
if polar_id eq 'C' then begin
if paired then begin
y = ybase + (yrange*32.0)/ysteps*indgen(ysteps)
pos = abs(ypos(1)-y) lt abs(ypos(0)-y)
end else pos = intarr(ysteps)
end else begin
if ysteps le 3 then begin
pos = intarr(ysteps)
nobj = 0
for i=0,ysteps do begin
if strtrim(ytypes(i)) eq 'OBJ' then begin
pos(i) = nobj
nobj = nobj + 1
endif
endfor
end else pos = intarr(ysteps)
endelse
;
; loop on readouts and slices
;
f0 = flat(*,0)
f1 = flat(*,1)
for iread = 0,nreads-1 do begin
for slice = 0,slices-1 do begin
ipos = iread*slices + slice ;last subscript in data array
;
; loop on ysteps
;
for ys = 0,ysteps-1 do begin
if calibrate(ys) then begin
if pos(ys) eq 0 then data(0,ys,ipos)=data(*,ys,ipos)*f0 $
else data(0,ys,ipos)=data(*,ys,ipos)*f1
if n_elements(err) gt 1 then begin
if pos(ys) eq 0 then err(0,ys,ipos)=err(*,ys,ipos)*f0 $
else err(0,ys,ipos)=err(*,ys,ipos)*f1
endif
endif
endfor
endfor
endfor
return
end