summaryrefslogtreecommitdiff
path: root/lib/stwcs/updatewcs/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stwcs/updatewcs/utils.py')
-rw-r--r--lib/stwcs/updatewcs/utils.py63
1 files changed, 63 insertions, 0 deletions
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:
+ <idctab rootname>-<npolfile rootname>-<d2imfile rootname>
+ 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