Source code for wfc3tools.embedsub

from __future__ import absolute_import, division, print_function

# get the auto update version
from .version import __version__, __version_date__
from .sub2full import sub2full

# STDLIB
from astropy.io import fits
import os
import numpy

# STSCI
from stsci.tools import parseinput
from stsci.tools import teal

__taskname__ = "embedsub"


[docs]def embedsub(files): """Return the full-frame location of the subarray. Parameters ---------- filename : string The name of the image file containing the subarray. This can be a single filename or a list of files. The ippsoot will be used to construct the output filename. You should input an FLT image The output file will contain the subarray image placed inside the full frame extent of a regular image """ uvis = False uvis_full_x = 2051 uvis_full_y = 4096 ir_full = 1014 infiles, dummy_out = parseinput.parseinput(files) if len(infiles) < 1: return ValueError("Please input a valid HST filename") # process all the input subarrays for filename in infiles: # Make sure the input name conforms to normal style if '_flt' not in filename: print("Warning: Can't properly parse '%s'; Skipping" % files) # Extract the root name and build SPT and output file names root = filename[0:filename.find('_flt')] full = root[0:len(root)-1] + 'f_flt.fits' try: flt = fits.open(filename) except EnvironmentError: print("Problem opening fits file %s" % (filename)) detector = flt[0].header['DETECTOR'] if 'UVIS' in detector: uvis = True # compute subarray corners assuming the raw image location x1, x2, y1, y2 = sub2full(filename, fullExtent=True)[0] print("Subarray image section [x1,x2,y1,y2] = [%d:%d,%d:%d]" % (x1, x2, y1, y2)) if uvis: xaxis = uvis_full_x yaxis = uvis_full_y else: xaxis = ir_full yaxis = ir_full # Now copy the subarray image data into full-chip data arrays; # The regions outside the subarray will be set to zero in the # SCI, ERR, SAMP, and TIME extensions, and to DQ=4. sci = numpy.zeros([xaxis, yaxis], dtype=numpy.float32) err = numpy.zeros([xaxis, yaxis], dtype=numpy.float32) dq = numpy.zeros([xaxis, yaxis], dtype=numpy.int16) + 4 sci[y1-1:y2, x1-1:x2] = flt[1].data err[y1-1:y2, x1-1:x2] = flt[2].data dq[y1-1:y2, x1-1:x2] = flt[3].data if not uvis: samp = numpy.zeros([xaxis, yaxis], dtype=numpy.int16) time = numpy.zeros([xaxis,yaxis],dtype=numpy.float32) samp[y1-1:y2, x1-1:x2] = flt[4].data time[y1-1:y2,x1-1:x2] = flt[5].data # Reset a few WCS values to make them appropriate for a # full-chip image crpix1 = flt[1].header['CRPIX1'] crpix2 = flt[1].header['CRPIX2'] flt[1].header['sizaxis1'] = yaxis flt[1].header['sizaxis2'] = xaxis for i in range(1, 4): flt[i].header['crpix1'] = crpix1 + x1 - 1 flt[i].header['crpix2'] = crpix2 + y1 - 1 flt[i].header['ltv1'] = 0.0 flt[i].header['ltv2'] = 0.0 # set the header value of SUBARRAY to False since it's now # regular size image flt[0].header['SUBARRAY'] = False # Now write out the SCI, ERR, DQ extensions to the full-chip file hdulist = fits.HDUList() hdulist.append(fits.ImageHDU(flt[0].data, header=flt[0].header)) hdulist.append(fits.ImageHDU(sci, header=flt[1].header, name='SCI')) hdulist.append(fits.ImageHDU(err, header=flt[2].header, name='ERR')) hdulist.append(fits.ImageHDU(dq, header=flt[3].header, name='DQ')) if not uvis: hdulist.append(fits.ImageHDU(dq, header=flt[4].header, name='SAMP')) hdulist.append(fits.ImageHDU(dq, header=flt[5].header, name='TIME')) hdulist.writeto(full, clobber=False) # close the input files flt.close() print("Image saved to: %s" % (full))
[docs]def getHelpAsString(docstring=False): """Return documentation on the 'wf3ir' function. Required by TEAL.""" install_dir = os.path.dirname(__file__) htmlfile = os.path.join(install_dir, 'htmlhelp', __taskname__ + '.html') helpfile = os.path.join(install_dir, __taskname__ + '.help') if docstring or (not docstring and not os.path.exists(htmlfile)): helpString = ' '.join([__taskname__, 'Version', __version__, ' updated on ', __version_date__]) + '\n\n' if os.path.exists(helpfile): helpString += teal.getHelpFileAsString(__taskname__, __file__) else: helpString = 'file://' + htmlfile return helpString
[docs]def help(file=None): """ Print out syntax help for running wf3ir """ helpstr = getHelpAsString(docstring=True) if file is None: print(helpstr) else: if os.path.exists(file): os.remove(file) f = open(file, mode='w') f.write(helpstr) f.close()
embedsub.__doc__ = getHelpAsString(docstring=True) if __name__ == "main": """called system prompt, return the default corner locations """ import sys embedsub(sys.argv[1])