From 01a72d0468f4d71876b20be05806efdd90f65f54 Mon Sep 17 00:00:00 2001 From: hack Date: Fri, 19 Aug 2011 15:22:06 +0000 Subject: Revised how DISTNAME and SIPNAME are computed to meet requirements specified by 8/11/2011 version of Headerlet Design document. The function 'compute_distname' was moved from __init__ to utils for use in other STWCS routines if necessary. git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/trunk/stwcs@13640 fe389314-cf27-0410-b35b-8c050e845b92 --- lib/stwcs/updatewcs/utils.py | 63 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'lib/stwcs/updatewcs/utils.py') diff --git a/lib/stwcs/updatewcs/utils.py b/lib/stwcs/updatewcs/utils.py index 29ba5f3..6789c19 100644 --- a/lib/stwcs/updatewcs/utils.py +++ b/lib/stwcs/updatewcs/utils.py @@ -1,4 +1,5 @@ from __future__ import division # confidence high +import os def diff_angles(a,b): """ @@ -26,3 +27,65 @@ def getBinning(fobj, extver=1): binned = fobj['SCI', extver].header.get('BINAXIS',1) return binned +def extract_rootname(kwvalue): + """ Returns the rootname from a full reference filename + + If a non-valid value (any of ['','N/A','NONE','INDEF',None]) is input, + simply return a string value of 'NONE' + + """ + # check to see whether a valid kwvalue has been provided as input + if kwvalue.strip() in ['','N/A','NONE','INDEF',None]: + return 'NONE' # no valid value, so return 'NONE' + + # for a valid kwvalue, parse out the rootname + # strip off any environment variable from input filename, if any are given + if '$' in kwvalue: + fullval = kwvalue[kwvalue.find('$')+1:] + else: + fullval = kwvalue + # Extract filename without path from kwvalue + fname = os.path.basename(fullval).strip() + + # Now, rip out just the rootname from the full filename + if '_' in fname: + rootname = fname[:fname.rfind('_')] + elif '.fit' in fname: # on some systems, only .fit is used instead of .fits + rootname = fname[:fname.rfind('.fit')] + elif '.' in fname: # account for non-standard file extensions + rootname = fname[:fname.rfind('.')] + else: + rootname = fname + + return rootname + +def construct_distname(fobj,wcsobj): + """ + This function constructs the value for the keyword 'DISTNAME'. + It relies on the reference files specified by the keywords 'IDCTAB', + 'NPOLFILE', and 'D2IMFILE'. + + The final constructed value will be of the form: + -- + and have a value of 'NONE' if no reference files are specified. + """ + idcname = extract_rootname(fobj[0].header.get('IDCTAB', "NONE")) + if idcname is None and wcsobj.sip is not None: + idcname = 'UNKNOWN' + + npolname = extract_rootname(fobj[0].header.get('NPOLFILE', "NONE")) + if npolname is None and wcsobj.cpdis1 is not None: + npolname = 'UNKNOWN' + + d2imname = extract_rootname(fobj[0].header.get('D2IMFILE', "NONE")) + if d2imname is None and wcsobj.det2im is not None: + d2imname = 'UNKNOWN' + + distname = idcname.strip() + if npolname != 'NONE' or d2imname != 'NONE': + if d2imname != 'NONE': + distname+= '-'+npolname.strip() + '-'+d2imname.strip() + else: + distname+='-'+npolname.strip() + + return {'DISTNAME':distname,'SIPNAME':idcname} \ No newline at end of file -- cgit