summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhack <hack@stsci.edu>2011-10-27 17:06:09 -0400
committerhack <hack@stsci.edu>2011-10-27 17:06:09 -0400
commita62507f73b60941b9b2ba5d42344c16839d4ec4e (patch)
tree2866b68d6b65ac3b88eb73f791726a4ece9010b4
parent1ea16652ceb59f2dee2870af87d2adf4e22e75ff (diff)
downloadstwcs_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.py59
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)