summaryrefslogtreecommitdiff
path: root/lib/stwcs/wcsutil/convertwcs.py
diff options
context:
space:
mode:
authorembray <embray@stsci.edu>2011-06-22 19:24:07 -0400
committerembray <embray@stsci.edu>2011-06-22 19:24:07 -0400
commitd93a10017d62f39d80167b45c1044a5e113f5994 (patch)
tree07967ea82a8550f8a8423bbe30046e798cf6c98e /lib/stwcs/wcsutil/convertwcs.py
parent708b4f32ac133fdb6157ec6e243dc76e32f9a84b (diff)
downloadstwcs_hcf-d93a10017d62f39d80167b45c1044a5e113f5994.tar.gz
Redoing the r13221-13223 merge in the actual trunk now. This updates trunk to the setup_refactoring branch (however, coords, pysynphot, and pywcs are still being pulled from the astrolib setup_refactoring branch. Will have to do that separately then update the svn:externals)
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/trunk/stwcs@13225 fe389314-cf27-0410-b35b-8c050e845b92
Diffstat (limited to 'lib/stwcs/wcsutil/convertwcs.py')
-rw-r--r--lib/stwcs/wcsutil/convertwcs.py118
1 files changed, 118 insertions, 0 deletions
diff --git a/lib/stwcs/wcsutil/convertwcs.py b/lib/stwcs/wcsutil/convertwcs.py
new file mode 100644
index 0000000..80276c3
--- /dev/null
+++ b/lib/stwcs/wcsutil/convertwcs.py
@@ -0,0 +1,118 @@
+import pyfits
+try:
+ import stwcs
+ from stwcs import wcsutil
+except:
+ stwcs = None
+
+from stsci.tools import fileutil
+
+OPUS_WCSKEYS = ['OCRVAL1','OCRVAL2','OCRPIX1','OCRPIX2',
+ 'OCD1_1','OCD1_2','OCD2_1','OCD2_2',
+ 'OCTYPE1','OCTYPE2']
+
+
+def archive_prefix_OPUS_WCS(fobj,extname='SCI'):
+ """ Identifies WCS keywords which were generated by OPUS and archived
+ using a prefix of 'O' for all 'SCI' extensions in the file
+
+ Parameters
+ ----------
+ fobj: string or pyfits.HDUList
+ Filename or pyfits object of a file
+
+ """
+ if stwcs is None:
+ print '====================='
+ print 'The STWCS package is needed to convert an old-style OPUS WCS to an alternate WCS'
+ print '====================='
+ raise ImportError
+
+
+ closefits = False
+ if isinstance(fobj,str):
+ # A filename was provided as input
+ fobj = pyfits.open(fobj,mode='update')
+ closefits=True
+
+ # Define the header
+ ext = ('sci',1)
+ hdr = fobj[ext].header
+
+ numextn = fileutil.countExtn(fobj)
+ extlist = []
+ for e in xrange(1,numextn+1):
+ extlist.append(('sci',e))
+
+ # Insure that the 'O' alternate WCS is present
+ if 'O' not in wcsutil.wcskeys(hdr):
+ # if not, archive the Primary WCS as the default OPUS WCS
+ wcsutil.archiveWCS(fobj,extlist, wcskey='O', wcsname='OPUS')
+
+ # find out how many SCI extensions are in the image
+ numextn = fileutil.countExtn(fobj,extname=extname)
+ if numextn == 0:
+ extname = 'PRIMARY'
+
+ # create HSTWCS object from PRIMARY WCS
+ wcsobj = wcsutil.HSTWCS(fobj,ext=ext,wcskey='O')
+ # get list of WCS keywords
+ wcskeys = wcsobj.wcs2header().keys()
+
+ # For each SCI extension...
+ for e in xrange(1,numextn+1):
+ # Now, look for any WCS keywords with a prefix of 'O'
+ for key in wcskeys:
+ okey = 'O'+key[:7]
+ hdr = fobj[(extname,e)].header
+ if hdr.has_key(okey):
+ # Update alternate WCS keyword with prefix-O OPUS keyword value
+ hdr[key] = hdr[okey]
+
+ if closefits:
+ fobj.close()
+
+def create_prefix_OPUS_WCS(fobj,extname='SCI'):
+ """ Creates alternate WCS with a prefix of 'O' for OPUS generated WCS values
+ to work with old MultiDrizzle.
+
+ Parameters
+ ----------
+ fobj: string or pyfits.HDUList
+ Filename or pyfits object of a file
+
+ Raises
+ ------
+ IOError:
+ if input PyFITS object was not opened in 'update' mode
+
+ """
+ # List of O-prefix keywords to create
+ owcskeys = OPUS_WCSKEYS
+
+ closefits = False
+ if isinstance(fobj,str):
+ # A filename was provided as input
+ fobj = pyfits.open(fobj,mode='update')
+ closefits=True
+ else:
+ # check to make sure this FITS obj has been opened in update mode
+ if fobj.fileinfo(0)['filemode'] != 'update':
+ print 'File not opened with "mode=update". Quitting...'
+ raise IOError
+
+ # check for existance of O-prefix WCS
+ if not fobj['sci',1].header.has_key(owcskeys[0]):
+
+ # find out how many SCI extensions are in the image
+ numextn = fileutil.countExtn(fobj,extname=extname)
+ if numextn == 0:
+ extname = ''
+ for extn in xrange(1,numextn+1):
+ hdr = fobj[(extname,extn)].header
+ for okey in owcskeys:
+ hdr.update(okey,hdr[okey[1:]+'O'])
+
+ # Close FITS image if we had to open it...
+ if closefits:
+ fobj.close()