;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ***N.B. UPDATE DICalKeywords_Version RETURN VALUE IF ANY UPDATES ARE MADE ;;; ***N.B. UPDATE DICalKeywords_Version RETURN VALUE IF ANY UPDATES ARE MADE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Calibration keywords ;;; ;;; ***N.B. UPDATE DICalKeywords_Version IF ANY UPDATES ARE MADE ;;; ;;; Standard keywords for Deep Impact (DI) instrument calibration files ;;; ;;; DICalKeywords_Version() => Returns Version of these keywords ;;; - ***N.B. UPDATE DICalKeywords_Version RETURN VALUE IF ANY UPDATES ARE MADE ;;; ;;; DICalKeywords__FitAddpar => Add DICalKeywords_Version to FITS header ;;; ;;; DICalKeywords__define => Definition of DICalKeywords structure ;;; - ***N.B. UPDATE DICalKeywords_Version RETURN VALUE IF ANY UPDATES ARE MADE ;;; ;;; DICalKeywords_Comments() => Returns comments for keywords ;;; ;;; Revision history ;;; 2010-09-02 BTCarcich original version ;;; 2010-09-18 BTCarcich Misc changes to make it work, ;;; added noSetName and nameSuffix arguments ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FORWARD_FUNCTION DICalKeywords function DICalKeywords_Version return,'2010-09-18.0' end pro DICalKeywords_SetName, dicalKwd, noSetName=noSetName $ , nameSuffix=nameSuffix $ , debug=debug if keyword_set(noSetname) then return sArr =[ dicalKwd.dicalins $ , dicalKwd.dicaldat $ , strtrim(dicalKwd.dicalver,2) $ , strtrim(dicalKwd.dicalmod,2) $ ] if n_elements(nameSuffix) eq 1L then sArr=[sArr,strtrim(nameSuffix[0],2)] dicalKwd.dicalnam = strjoin( sArr, '_') + ".fit" end pro DICalKeywords_FitAddPar, fithdr, dicalKwd $ , noSetName=noSetName $ , nameSuffix=nameSuffix $ , before=beforeArg,after=afterArg $ , debug=debug dumy = DICalKeywords(returnComments=dicalcmt) diCalkeywords_SetName, dicalKwd $ , noSetName=noSetName, nameSuffix=nameSuffix tns=tag_names(dicalKwd) nTnsM1=n_elements(tns)-1L for i=0L,nTnsM1 do begin kwd = tns[i] val = dicalKwd.(i) if strtrim(val) eq '' then val = 'UNKNOWN' sxaddpar, fithdr, kwd, val, dicalcmt.(i) $ , before=beforeArg, after=afterArg endfor return end pro DICalKeywords__define x = $ { DICalKeywords $ , msnconfg: '' $ , fnorig: '' $ , datedlv: '' $ , author: '' $ , dicalnam: '' $ , dicalins: '' $ , dicalmod: 0L $ , dicalfil: 0L $ , dicaltyp: '' $ , dicaldat: '' $ , dicalver: 0L $ , dicalkwv: DICalKeywords_Version() $ } return end function DICalKeywords, returnComments=returnComments dicalkeywords__define ;;; Generate exception if structure defined differently rtn = {DICalKeywords} rtn.dicalkwv = DICalKeywords_Version() lclComments = $ { msnconfg: ' Configuration of cal data, GROUNDCAL or FLIGHT' $ , fnorig: ' Filename relating to source of data' $ , datedlv: ' [YYYY-MM-DD] Delivery date' $ , author: ' Author of this data file' $ , dicalnam: ' The name of this FITS DI calibration file' $ , dicalins: ' Applicable instrument' $ , dicalmod: ' Applicable instrument mode' $ , dicalfil: ' Applicable instrument filter (0 => any)' $ , dicaltyp: ' Calibration type (e.g. FLAT, DARKS)' $ , dicaldat: ' [YYMMDD] Earliest applicable date' $ , dicalver: ' Version for DICALTYP, DICALMOD, and DICALDAT' $ , dicalkwv: ' DICAL Keywords version' $ } ;;; Consistency check tnKwd = tag_names(rtn) tnCmt = tag_names(lclComments) iw = where( tnKwd ne tnCmt, iwCt) if iwCt ne 0L or n_elements(tnKwd) ne n_elements(tnCmt) then begin message, 'Inconsistency found between DICAL Keywords and Comments structures; contact programmmer, code WSNBATGH-DICalKeywords-0' return, 0b endif returnComments = lclComments return,rtn end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Test code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; dicalkw = dicalkeywords() mkhdr,h,1 dicalkeywords_fitaddpar,h,dicalkw if keyword_set(doDicalKwTestPrint) then begin help,/st,dicalkw print,h[where(strtrim(h) ne '')],f='(a)' endif end