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