Function sum_FField,data,Slit,RefPix,FFfile,Reverse=Reverse,Flat=FFdat,$ NorthUp=NorthUp,Quiet=Quiet if ((slit eq 3) or (slit eq 5) or (slit eq 6) or (slit eq 8)) and $ not keyword_set(NorthUp) and not keyword_set(Quiet) then $ message,/info,'The program assumes by default that the data is '+$ 'oriented with South up. If your data has North up (as is the case for '+$ 'data from the .fts files) please use the NorthUp keyword.' ;determine size of data;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; dsize=size(data) if dsize(0) eq 2 then nexp = 1 else nexp = dsize(3) dY = dsize(2) dW = dsize(1) data=float(data) data_out=fltarr(dW,dY,nexp) ;determine subframe of image;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; up = 299 center = 179 down = 59 if keyword_set(NorthUp) then begin case slit of 1: SlitLoc = center 2: SlitLoc = center 3: SlitLoc = down 4: SlitLoc = center 5: SlitLoc = up 6: SlitLoc = down 7: SlitLoc = center 8: SlitLoc = up 9: SlitLoc = center else: message,'Problem with slit' endcase endif else begin case slit of 1: SlitLoc = center 2: SlitLoc = center 3: SlitLoc = up 4: SlitLoc = center 5: SlitLoc = down 6: SlitLoc = up 7: SlitLoc = center 8: SlitLoc = down 9: SlitLoc = center else: message,'Problem with slit' endcase endelse if dY GE 360 THEN SlitLoc = center ; accept large format with short slit ;spatial image range YRange=[SlitLoc,SlitLoc]+[-dY/2+1,dY/2] ;wavelength direction range if dw eq 1024 then wrange=[0,1023] else begin if dW mod 2 eq 0 then WRange = [refpix-1,refpix-1]+[-dW/2+1,dW/2] $ else WRange = [refpix-1,refpix-1]+[-dW/2,dW/2] endelse if WRange(0) lt 0 then data1=data(dW-1-WRange(1):dW-1,YRange(0):YRange(1))else $ if WRange(1) gt 1023 then data1=data(0:1023-WRange(0),YRange(0):YRange(1)) else data1=data WRangeff=WRange>0 WRangeff=WRangeff<1023 data_out1=data1 ; get flat field correction matrix if n_elements(FFdat) ne 360*1024. then begin if n_elements(FFfile) eq 0 then begin ; restore ff-matrix if file_exist('ff.rst') then begin message,/info,'Using flatfield in ff.rst' restore,'ff.rst' endif else message,'Flat field must be in FITS file FFile (a function input)'+$ ' or in file ff.rst' endif else begin ; read in FITS flat field ft_sumread_fits,FFFile,hff,bff,nff,FFdat,col=[1] endelse endif ;select subframe of flat field FF=float(FFdat(WRangeff(0):WRangeff(1),YRange(0):YRange(1))) ;perform flat field correction or undo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; for i=0,nexp-1 do begin if keyword_set(Reverse) then data_out1(*,*,i) = float(data1(*,*,i)) * FF $ else data_out1(*,*,i) = float(data1(*,*,i)) / FF if WRange(1) gt 1023 then data_out(0:1023-WRange(0),YRange(0):YRange(1))=data_out1 else $ if Wrange(0) lt 0 then $ data_out(dW-1-WRange(1):dW-1,YRange(0):YRange(1))=data_out1 else data_out=data_out1 endfor return,data_out end