Viewing contents of file '../idllib/ghrs/pro/calfos_ivs.pro'
pro calfos_ivs,ivs,ypos,config,pattern,net,h,err,flux
;+
;			CALFOS_WAV
;
; Conversion to absolute flux units.
;
; CALLING SEQUENCE:
;	calfos_ivs,ivs,ypos,config,pattern,net,h,err,flux
;
; INPUTS:
;	ivs - inverse sensitivity array (from calfos_rdivs)
;	ypos - ybases of the upper and lower aperture of an aperture
;		pair (from routine calfos_ccs1)
;	config - configuration vector (from calfos_rd)
;	pattern - pattern vector (from calfos_rd)
;	net - net spectra array
;
; INPUTS/OUTPUTS:
;	h - FITS header
;	err - propagated statistics array
; OUTPUTS:
;	flux - absolute flux array
;
; HISTORY:
;	version 1  D. Lindler  Jan 1990
;-
;----------------------------------------------------------------------------
;
; extract pattern and configuration
;
	ybase = pattern(4)
	yrange = pattern(5)
	ysteps = pattern(6)
	ns = pattern(8)
	slices = pattern(9)
	nreads = pattern(10)
	nframes = slices*nreads
	fchnl = pattern(0)
	nxsteps = pattern(3)
	polar_id = strtrim(config(2))
	if strtrim(config(7)) eq 'PAIR' then paired=1 else paired=0
	ytypes = strarr(3)
	for i=0,2 do ytypes(i) = config(i+4)
	fgwa_id = strtrim(config(3))
;
; determine number of object spectra and thier ysteps
;
	if ysteps le 3 then begin
		nobj = 0
		ystep = intarr(3)
		for i=0,2 do begin
		    if strtrim(ytypes(i)) eq 'OBJ' then begin
			ystep(nobj) = i
			nobj = nobj+1
		    endif
		endfor
	   end else begin
		ystep = indgen(ysteps)		;they are all object
		nobj = ysteps
	end
	if nobj eq 0 then return		;we should not be here
;
; determine which sensitivity vector to use
;
	if polar_id ne 'C' then begin
		pos = indgen(nobj)<1
	   end else begin
		if paired then begin
			y = ybase + 32*yrange/ysteps*ystep
			pos = fix( abs(y-ypos(1)) lt abs(y-ypos(0)) )
		    end else begin
			pos = intarr(nobj)
		end
	end
;
; loop on frames and object spectra
;
	flux = fltarr(ns,nobj,nframes)
	for frame = 0,nframes-1 do begin
	    for i=0,nobj-1 do begin
		flux(0,i,frame) = net(*,i,frame)*ivs(*,pos(i))
		if n_elements(err) gt 1 then  $
				err(0,i,frame) = err(*,i,frame)*ivs(*,pos(i))
	    end
	end
return
end