
; CNA_PUTFINALIM -- Write final multiaccum image ouput file.

; Revision history:
; I. Barg 10-Jan-2000 Modified structure names (and tag names) to match 
;             "/iraf/stsdas/lib/hstio.h".

function cna_putfinalim, nic, out, fname

@calnica_common
@VERSION.calnica

  ; Arguments:
  ;  nic    i: NICMOS info structure
  ;  out    i: image data to be written to file
  ;  fname  i: output file name

  ; Open the output file.
  ua_fits_open, fname, outfcb, /WRITE, /NO_ABORT
  if (!ERR lt 0) then begin
    print, 'ERROR: Problem opening output file:  ',fname
    return, 30
  endif

  ; Update output image header keywords.
  ; In global header, update CALSTAGE: set to "CALNICA"
  ghdr = out.globalhdr
  sxaddpar,ghdr,'CALSTAGE','CALNICA',/PDU
  sxaddpar,ghdr,'NEXTEND',5,/PDU
  sxaddpar,ghdr,'FILENAME',fname,/PDU
  sxaddpar,ghdr,'CAL_VER','Version '+UAVersion,/PDU


  ; DATAMIN, DATAMAX: updated in the header of all extensions
  scihdr = out.sci.hdr
  sxaddpar,scihdr,'DATAMIN',min(out.sci.data.data)
  sxaddpar,scihdr,'DATAMAX',max(out.sci.data.data)

  errhdr = out.err.hdr
  sxaddpar,errhdr,'DATAMIN',min(out.err.data.data)
  sxaddpar,errhdr,'DATAMAX',max(out.err.data.data)

  dqhdr = out.dq.hdr
  sxaddpar,dqhdr,'DATAMIN',min(out.dq.data.data)
  sxaddpar,dqhdr,'DATAMAX',max(out.dq.data.data)

  smplhdr = out.smpl.hdr
  sxaddpar,smplhdr,'DATAMIN',min(out.smpl.data.data)
  sxaddpar,smplhdr,'DATAMAX',max(out.smpl.data.data)

  intghdr = out.intg.hdr
  sxaddpar,intghdr,'DATAMIN',min(out.intg.data.data)
  sxaddpar,intghdr,'DATAMAX',max(out.intg.data.data)

  ua_fits_write,outfcb,0,ghdr,/NO_ABORT
  if (!ERR lt 0) then begin
    ua_fits_close,outfcb
    print, 'ERROR: Problem writing FITS global header'
    return, 30
  endif

  ua_fits_write,outfcb,out.sci.data.data,scihdr, $
	     extname='SCI',extver=1,/NO_ABORT
  if (!ERR lt 0) then begin
    ua_fits_close,outfcb
    print, 'ERROR: Problem writing FITS SCI data, extver = 1'
    return, 30
  endif
  ua_fits_write,outfcb,out.err.data.data,errhdr, $
	     extname='ERR',extver=1,/NO_ABORT
  if (!ERR lt 0) then begin
    ua_fits_close,outfcb
    print, 'ERROR: Problem writing FITS ERR data, extver = 1'
    return, 30
  endif
  ua_fits_write,outfcb,out.dq.data.data,dqhdr, $
	     extname='DQ',extver=1,/NO_ABORT
  if (!ERR lt 0) then begin
    ua_fits_close,outfcb
    print, 'ERROR: Problem writing FITS DQ data, extver = 1'
    return, 30
  endif
  ua_fits_write,outfcb,out.smpl.data.data,smplhdr, $
	     extname='SAMP',extver=1,/NO_ABORT
  if (!ERR lt 0) then begin
    ua_fits_close,outfcb
    print, 'ERROR: Problem writing FITS SMPL data, extver = 1'
    return, 30
  endif
  ua_fits_write,outfcb,out.intg.data.data,intghdr, $
	     extname='TIME',extver=1,/NO_ABORT
  if (!ERR lt 0) then begin
    ua_fits_close,outfcb
    print, 'ERROR: Problem writing FITS INTG data, extver = 1'
    return, 30
  endif


  ua_fits_close,outfcb,/NO_ABORT

  ; Successful return.
  return, 0

end

