diff options
author | hack <hack@stsci.edu> | 2011-10-27 17:06:09 -0400 |
---|---|---|
committer | hack <hack@stsci.edu> | 2011-10-27 17:06:09 -0400 |
commit | a62507f73b60941b9b2ba5d42344c16839d4ec4e (patch) | |
tree | 2866b68d6b65ac3b88eb73f791726a4ece9010b4 | |
parent | 1ea16652ceb59f2dee2870af87d2adf4e22e75ff (diff) | |
download | stwcs_hcf-a62507f73b60941b9b2ba5d42344c16839d4ec4e.tar.gz |
This update to the 'headerlet' module should enable proper verification of 'wcsname' and 'wcskey' input values. The changes also result in Exceptions being raised for conditions where HDRNAME is not given, when WCSNAME can't be found when it it needed or when 'wcsname' and 'wcskey' inputs are not consistent with the WCS's in the image.
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/trunk/stwcs@13917 fe389314-cf27-0410-b35b-8c050e845b92
-rw-r--r-- | lib/stwcs/wcsutil/headerlet.py | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/lib/stwcs/wcsutil/headerlet.py b/lib/stwcs/wcsutil/headerlet.py index 34fb6d0..325393a 100644 --- a/lib/stwcs/wcsutil/headerlet.py +++ b/lib/stwcs/wcsutil/headerlet.py @@ -870,14 +870,38 @@ def create_headerlet(filename, sciext='SCI', hdrname=None, destim=None, wcskey=" 'D2IMFILE': True} fobj,fname,close_file = parseFilename(filename) + # Define extension to evaluate for verification of input parameters + wcsext = 1 + if fu.isFits(fname)[1] == 'simple': + wcsext = 0 # Translate 'wcskey' value for PRIMARY WCS to valid altwcs value of ' ' if wcskey == 'PRIMARY': wcskey = ' ' + wcsnamekw = "".join(["WCSNAME",wcskey.upper()]).rstrip() - # get all required keywords + if not wcsname: + # User did not specify a value for 'wcsname' + if wcsnamekw in fobj[wcsext].header: + wcsname = fobj[wcsext].header[wcsnamekw] + else: + message = "WCS in header Missing required keyword '%s'."%(wcsnamekw) + module_logger.critical(message) + raise KeyError,message + else: + # Verify that 'wcsname' and 'wcskey' values specified by user reference + # the same WCS + wname = fobj[wcsext].header[wcsnamekw] + if wcsname != wname: + message = "Inconsistent values for 'wcskey' and 'wcsname' specified!\n" + message += " 'wcskey' = %s and 'wcsname' = %s. \n"%(wcskey,wcsname) + message += "Actual value of %s found to be %s. \n"%(wcsnamekw,wname) + print message + raise KeyError,"Inconsistent values for 'wcskey' and 'wcsname' parameters" + + # get remaining required keywords if destim is None: - try: + if 'ROOTNAME' in fobj[0].header: destim = fobj[0].header['ROOTNAME'] - except KeyError: + else: destim = fname module_logger.info('DESTIM not provided') module_logger.info('Keyword "ROOTNAME" not found') @@ -885,28 +909,19 @@ def create_headerlet(filename, sciext='SCI', hdrname=None, destim=None, wcskey=" if not hdrname: # check if HDRNAME<wcskey> is in header - hdrname = "".join(["HDRNAME",wcskey.upper()]) - try: - hdrname = fobj[1].header['HDRNAME'] - except KeyError: - try: - wname = ('WCSNAME'+wcskey).rstrip() - hdrname = fobj[1].header['WCSNAME'+wcskey] + hdrnamekw = "".join(["HDRNAME",wcskey.upper()]).rstrip() + if hdrnamekw in fobj[wcsext].header: + hdrname = fobj[wcsext].header[hdrnamekw] + else: + if wcsnamekw in fobj[wcsext].header: + hdrname = fobj[wcsext].header[wcsnamekw] print 'Using default value for HDRNAME of "%s"'%(hdrname), - print ' derived from %s.'%(wname) - except KeyError, detail: - message = "Required keywords 'HDRNAME' or 'WCSNAME' not found" - module_logger.critical(message) - print message, detail - - if not wcsname: - wname = "".join(["WCSNAME",wcskey.upper()]) - if wname in fobj[1].header: - wcsname = fobj[1].header[wname] + print ' derived from %s.'%(wcsnamekw) else: - message = "Missing required keyword 'WCSNAME'." + message = "Required keywords 'HDRNAME' or 'WCSNAME' not found" module_logger.critical(message) - print message, detail + print message + raise KeyError,message if not sipname: sipname = utils.build_sipname(fobj) |