Viewing contents of file '../idllib/ghrs/pro/calfos_dqi.pro'
pro calfos_dqi,name,ypos,config,pattern,dqi,eps,data
;+
; CALFOS_DQI
;
; data quality initialization
;
; CALLING SEQUENCE:
; calfos_dqi,name,ypos,config,pattern,,dqi,eps,data
;
; INPUTS:
; name - rootname of observation
; ypos - 2 element vector containing upper and lower aperture pos.
; config - instrument configuration vector
; pattern - pattern vector from CALFOS_RD
; dqi - data quality initialization vector (from CALFOS_RDDQI)
; It should already be corrected for the scan pattern
; INPUT/OUTPUTS:
; eps - data quality values
; data - data array
;
; HISTORY:
; version 1 D. Lindler Jan 1990
; version 2 D. Lindler Aug 1, 1991 Added upper/lower dqi vectors
; version 3 D. Neill Mar 1992 Modified to read .q0h file directly
;-
;-----------------------------------------------------------------------
polar_id = strtrim(config(2))
if strtrim(config(7)) eq 'PAIR' then paired=1 else paired=0
ysteps = pattern(6)
slices = pattern(9)
nreads = pattern(10)
ybase = pattern(4)
ytypes = config(4:6)
yrange = pattern(5)
ns = pattern(8)
;
; read q0h file
;
fname2 = strtrim(name,2)+'.q0h' ;data quality file
sxopen,2,fname2
;
; loop on reads
;
for i=0,nreads-1 do begin
e = float(sxread(2,i))
eps(0,0,i*slices) = float(e,0,ns,ysteps,slices)
;
; change eps=16 to 800 (fill)
; eps=1 to 100 (Reed-Solomon error)
;
bad = where(eps eq 16) & nbad=!err
if nbad gt 0 then begin
eps(bad)=800
data(bad)=0.0
print,'WARNING- Fill values present in data'
end
bad = where(eps eq 1) & nbad=!err
if nbad gt 0 then begin
eps(bad)=100
print,'WARNING- Reed-Solomon Errors present in data'
endif
end
;
; determine which of the two dqi files 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
dqi0 = dqi(*,0)
dqi1 = dqi(*,1)
bad0 = where(dqi0 gt 200) & nbad0 = !err
bad1 = where(dqi1 gt 200) & nbad1 = !err
;
for slice = 0,slices*nreads-1 do begin
for ystep = 0,ysteps-1 do begin
if pos(ystep) eq 0 then begin
eps1 = eps(*,ystep,slice) > dqi0
nbad = nbad0
bad = bad0
end else begin
eps1 = eps(*,ystep,slice) > dqi1
nbad = nbad1
bad = bad1
end
eps(0,ystep,slice) = eps1
if nbad gt 0 then begin
d=data(*,ystep,slice)
d(bad) = 0 ;new bad data
data(0,ystep,slice) = d
endif
endfor
endfor
return
end