pro dical_insertCalKeywords, hdr

;;-----------------------------------------------------------------------------
;; PURPOSE:
;;	Inserts into the FITS header all of the calibration keywords
;;
;; CALLING SEQUENCE:
;;	dical_insertCalKeywords, hdr
;;
;; REQUIRED INPUTS:
;;	hdr - the FITS header to insert keywords into
;;
;; OUTPUTS:
;;	hdr - the header with the new keywords added
;;
;; OPTIONAL INPUT KEYWORDS:
;;
;; EXAMPLE:
;;      IDL> dical_insertCalKeywords, hdr
;;
;; PROCEDURES USED (i.e. called directly!):
;;    sxaddpar - Adds a keyword
;;
;; MODIFICATION HISTORY:
;;   2004-08-02  M. Desnoyer    Created
;;   2005-04-05  B. Carcich     Modified default values for some 
;;                              keywords from '' to -999 to match
;;                              their normal values.  The reason for 
;;                              doing this is that some of the values 
;;                              will not be set by the DIcal procedure
;;                              (e.g. if a module is not run, its
;;                              component keywords will not be changed
;;                              from these default values).  So, if the 
;;                              default keywords are of a different type 
;;                              from the set keywords, that may cause 
;;                              a problem for any later processing that uses 
;;                              all of the images' keyword values e.g. 
;;                              a database.
;;   2005-06-07 M. Desnoyer     Fixed typo in LINBC4 comment  
;;
;;-----------------------------------------------------------------------------

@version ;; Get the DICAL version number

;; Update keywords for the calibration
sxaddpar, hdr, 'BZERO', 0.0, ' Data is 32-bit floating point'
sxaddpar, hdr, 'BSCALE', 1.0, ' Data is 32-bit floating point'

;; Remove the "un" from every comment that contains the word "uncalibrated"
w = where(strmatch(hdr, 'COMMENT*uncalibrated*') EQ 1,c)
IF c GT 0 THEN BEGIN
	loc = strpos(hdr[w],'uncalibrated')
	hdr[w] = strmid(hdr[w],0,loc)+strmid(hdr[w],loc+2)
ENDIF

;; Insert a temporary value to stack everything on top of
sxaddpar, hdr, 'CALTMP', 'T'

;; Insert the first comment
stars='***********************************************************************'
cmt = '** Calibration information, steps, and files (common to IR and VIS)'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'
sxaddpar, hdr, 'COMMENT', cmt, before='CALTMP'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'
	
;; Insert all the common header keywords
sxaddpar, hdr, 'FILEVERN', 1.10, ' Version number of file format', before='CALTMP', $
	format='(F5.2)'
sxaddpar, hdr, 'PGMNAME', 'DICAL', ' Program name that produced this file', before='CALTMP'
sxaddpar, hdr, 'PGMVERN', version, ' Version number of the above program', before='CALTMP', $
	format='(F5.2)'
sxaddpar, hdr, 'DATAQUAL', -999, ' Data quality (1=good, etc)', before='CALTMP'
sxaddpar, hdr, 'TMPVLTUP', 'F', ' Physical temps and voltages updated (T/F)', before='CALTMP'
sxaddpar, hdr, 'TMPVLTV', '', ' Valid date of physical temps and voltages used', before='CALTMP'
sxaddpar, hdr, 'SMOBENT', -1.00, ' Smoothed over time version of OPTBENT [K]', before='CALTMP'
sxaddpar, hdr, 'CMPRESSN', 'F', ' Decompression performed (T/F)', before='CALTMP'
sxaddpar, hdr, 'LUTTABLE', '', ' Lossy lookup table/algorithm applied', before='CALTMP'
sxaddpar, hdr, 'CMPRMETH', -999, ' Decompress method. 1=avg,2=gauss,3=uniform', before='CALTMP'
sxaddpar, hdr, 'SATPIX', 'F', ' Saturated pixels flagged (T/F)', before='CALTMP'
sxaddpar, hdr, 'SMSATVL', 0L, ' DN value where some pixels are saturated', before='CALTMP'
sxaddpar, hdr, 'MSTSATVL', 0L, ' DN value where most pixels are saturated', before='CALTMP'
sxaddpar, hdr, 'ADCSATVL', 0L, ' DN value where the ADC encoder is saturated', before='CALTMP'
sxaddpar, hdr, 'BITCORR', 'F', ' Uneven bit weighting corrected (T/F)', before='CALTMP'
sxaddpar, hdr, 'BITLUT', '', ' Bit weighting lookup table used', before='CALTMP'
sxaddpar, hdr, 'DARKCORR', 'F', ' Dark subtration (T/F)', before='CALTMP'
sxaddpar, hdr, 'DARKALG', '', ' Algorithm used to create dark', before='CALTMP'
sxaddpar, hdr, 'DARKFN', '', ' File name for the frame/model used', before='CALTMP'
sxaddpar, hdr, 'BIASFN', '', ' Filename of bias frame used', before='CALTMP'
sxaddpar, hdr, 'XTALK', 'F', ' Electrical crosstalk removed (T/F)', before='CALTMP'
sxaddpar, hdr, 'XTALKFN', '', ' Filename of crosstalk gains used', before='CALTMP'
sxaddpar, hdr, 'GAINCORR', 'F', ' Quadrant Gain correction performed (T/F)', before='CALTMP'
sxaddpar, hdr, 'GAINFN', '', ' Filename of gain values used', before='CALTMP'
sxaddpar, hdr, 'FLATCORR', 'F', ' Flat fielded', before='CALTMP'
sxaddpar, hdr, 'FLATFILE', '', ' Name of flat field applied', before='CALTMP'
sxaddpar, hdr, 'BPIXFL', 'F', ' Bad pixels flagged (T/F)', before='CALTMP'
sxaddpar, hdr, 'BPIXFILE', '', ' Name of bad pixel map applied', before='CALTMP'
sxaddpar, hdr, 'CLEAN', 'F', ' Cleaned/fill small gaps (T/F)', before='CALTMP'
sxaddpar, hdr, 'CLEANV', -999, ' Max filled gap size; -999999=>fill failed', before='CALTMP'
sxaddpar, hdr, 'CLNBAD', 'F', ' Bad pixels cleaned', before='CALTMP'
sxaddpar, hdr, 'CLNMISS', 'F', ' Missing data cleaned', before='CALTMP'
sxaddpar, hdr, 'DESPIKE', 'F', ' Despiking applied (T/F)', before='CALTMP'
sxaddpar, hdr, 'DESPIKET', -999, ' Despiking threshold used (sigma)', before='CALTMP'
sxaddpar, hdr, 'DESPIKEI', -999, ' Number of iterations of despiking', before='CALTMP'
sxaddpar, hdr, 'DESPIKEB', -999, ' Boxsize for despiking', before='CALTMP'
sxaddpar, hdr, 'DESPIKEM', '', ' Metric used for despiking. Mean or Median', before='CALTMP'
sxaddpar, hdr, 'DENOISE', 'F', ' Denoising applied (T/F)', before='CALTMP'
sxaddpar, hdr, 'DENOISEV', '', ' Denoise parameter applied', before='CALTMP'
sxaddpar, hdr, 'DECON', 'F', ' Deconvolution performed (T/F)', before='CALTMP'
sxaddpar, hdr, 'DECONPSF', '', ' Deconvolution psf used', before='CALTMP'
sxaddpar, hdr, 'DECONALG', '', ' Deconvolution algorithm used', before='CALTMP'
sxaddpar, hdr, 'DECONV', '', ' Deconvolution algorithm-specific parameter', before='CALTMP'

;; Insert second comment
cmt = '** Calibration information, steps, and files specific to IR'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'
sxaddpar, hdr, 'COMMENT', cmt, before='CALTMP'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'

;; Insert IR keywords
sxaddpar, hdr, 'LINEARIZ', 'F', ' Linearization applied (T/F)', before='CALTMP'
sxaddpar, hdr, 'LINAC0', -999d0, ' Quad A additive constant for linearization', before='CALTMP'
sxaddpar, hdr, 'LINAC1', -999d0, ' Quad A coefficient for x term', before='CALTMP'
sxaddpar, hdr, 'LINAC2', -999d0, ' Quad A coefficient for x-squared term', before='CALTMP'
sxaddpar, hdr, 'LINAC3', -999d0, ' Quad A coefficient for x-cubed term', before='CALTMP'
sxaddpar, hdr, 'LINAC4', -999d0, ' Quad A coefficient for x-4th term', before='CALTMP'
sxaddpar, hdr, 'LINBC0', -999d0, ' Quad B additive constant for linearization', before='CALTMP'
sxaddpar, hdr, 'LINBC1', -999d0, ' Quad B coefficient for x term', before='CALTMP'
sxaddpar, hdr, 'LINBC2', -999d0, ' Quad B coefficient for x-squared term', before='CALTMP'
sxaddpar, hdr, 'LINBC3', -999d0, ' Quad B coefficient for x-cubed term', before='CALTMP'
sxaddpar, hdr, 'LINBC4', -999d0, ' Quad B coefficient for x-4th term', before='CALTMP'
sxaddpar, hdr, 'MDARKVER', '', ' Master dark frame version', before='CALTMP'
sxaddpar, hdr, 'DRKPMODE', -999, ' Mode of the previous set taken', before='CALTMP'
sxaddpar, hdr, 'DARKISG', -999d0, ' Inter-sequence gap [msec]', before='CALTMP'
sxaddpar, hdr, 'DARKA0', -999d0, ' Dark level temp coef A_0', before='CALTMP'
sxaddpar, hdr, 'DARKA1', -999d0, ' Dark level temp coef A_1', before='CALTMP'
sxaddpar, hdr, 'DARKB0', -999d0, ' Dark level temp coef B_0', before='CALTMP'
sxaddpar, hdr, 'DARKB1', -999d0, ' Dark level temp coef B_1', before='CALTMP'
sxaddpar, hdr, 'DARKC0', -999d0, ' Dark level temp coef C_0', before='CALTMP'
sxaddpar, hdr, 'DRKTMSCL', -999d0, ' Dark scaling factor for time dependency', before='CALTMP'
sxaddpar, hdr, 'DARKPLAT', '', ' Dark plateau reached', before='CALTMP'
sxaddpar, hdr, 'DARKMSCL', -999d0, ' Manually derived scaling factor', before='CALTMP'
sxaddpar, hdr, 'CALCORR', 'F', ' Calibration Applied (T/F)', before='CALTMP'
sxaddpar, hdr, 'CALCONST', -999d0, ' Calibration Constant Applied', before='CALTMP'
sxaddpar, hdr, 'CALNUMB0', -999, ' Number of ZERO calibration factors found', before='CALTMP'
sxaddpar, hdr, 'CALMAP1', '', ' Calibration constant map interped (1)', before='CALTMP'
sxaddpar, hdr, 'CALMAP2', '', ' Calibration constant map interped (2)', before='CALTMP'
sxaddpar, hdr, 'SPECMAP1', '', ' Spectral map interpolated over (1)', before='CALTMP'
sxaddpar, hdr, 'SPECMAP2', '', ' Spectral map interpolated over (2)', before='CALTMP'
sxaddpar, hdr, 'HLUTFN', '', ' H lambda lookup table used', before='CALTMP'

;; Insert second comment
cmt = '** Calibration information, steps, and files specific to VIS'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'
sxaddpar, hdr, 'COMMENT', cmt, before='CALTMP'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'

sxaddpar, hdr, 'SMEAR', 'F', ' Frame-transfer smear removed (T/F)', before='CALTMP'
sxaddpar, hdr, 'SMEARV', '', ' Smear removal algorithm applied', before='CALTMP'
sxaddpar, hdr, 'RADCAL', 'F', ' Radiance calibration applied (T/F)', before='CALTMP'
sxaddpar, hdr, 'RADCALV', -999d0, ' Rad cal constant used [W/(m^2 sr um)/(DN/s)]', before='CALTMP'
sxaddpar, hdr, 'RADCALW', '', ' Radiance calib - wavelength used [nm]', before='CALTMP'
sxaddpar, hdr, 'IOFCAL', 'F', ' I/F calibration applied (T/F)', before='CALTMP'
sxaddpar, hdr, 'IOFCALV', -999d0, ' I/F cal constant used [W/(m^2 sr um) @ 1 AU]', before='CALTMP'
sxaddpar, hdr, 'IOFCALW', '', ' I/F calib - wavelength used [nm]', before='CALTMP'
sxaddpar, hdr, 'IOFCALD', -999d0, ' I/F calib - Distance used [AU]', before='CALTMP'
sxaddpar, hdr, 'GEOMCAL', 'F', ' Geometric calibration performed (T/F)', before='CALTMP'
sxaddpar, hdr, 'GEOMFILE', '', ' File used for geometric calibration', before='CALTMP'

;; Insert third comment
cmt = '** Image Quality Statistics'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'
sxaddpar, hdr, 'COMMENT', cmt, before='CALTMP'
sxaddpar, hdr, 'COMMENT', stars, before='CALTMP'

sxaddpar, hdr, 'BADPXCT', -999, ' Number of bad pixels', before='CALTMP'
sxaddpar, hdr, 'MISSPXCT', -999, ' Number of missing pixels', before='CALTMP'
sxaddpar, hdr, 'DESPIKCT', -999, ' Number of despiked pixels', before='CALTMP'
sxaddpar, hdr, 'INTERPCT', -999, ' Number of interpolated pixels', before='CALTMP'
sxaddpar, hdr, 'PSATPXCT', -999, ' Num possibly saturated pixels (VIS>=11000DN,IR>=8000DN)', before='CALTMP' 
sxaddpar, hdr, 'SATPXCT', -999, ' Num likely saturated pixels (VIS>=15000DN,IR>=11000DN)', before='CALTMP'
sxaddpar, hdr, 'ASATPXCT', -999, ' Number of ADC saturated pixels', before='CALTMP'
sxaddpar, hdr, 'ULTCMPCT', -999, ' Number of ultra-compressed pixels', before='CALTMP'

;; Remove the temporary header item
sxdelpar, hdr, 'CALTMP'
END