Source code for wfc3tools.pstack

from __future__ import division
from __future__ import print_function

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

# STDLIB
import os
from astropy.io import fits
import numpy as np
import matplotlib.pyplot as plt
from stsci.tools import teal

__taskname__ = "pstack"


[docs]def pstack(filename, column=0, row=0, extname="sci", units="counts", title=None, xlabel=None, ylabel=None, plot=True): """A function to plot the statistics of one pixels up the IR ramp image Original implementation in the iraf nicmos package. Pixel values here are 0 based, not 1 based """ time = False valid_ext = ["sci", "err", "dq", "time"] if extname.lower() not in valid_ext: print("Invalid value given for extname") return 0, 0 with fits.open(filename) as myfile: nsamp = myfile[0].header["NSAMP"] bunit = myfile[1].header["BUNIT"] # must use data header for units yaxis = np.zeros(nsamp) # plots versus sample for TIME extension if "time" in extname.lower(): xaxis = np.arange(nsamp) + 1 time = True else: xaxis = np.zeros(nsamp) for i in range(1, nsamp, 1): if time: yaxis[i-1] = myfile["SCI", i].header['SAMPTIME'] else: yaxis[i-1] = myfile[extname.upper(), i].data[column, row] xaxis[i-1] = myfile["SCI", i].header['SAMPTIME'] # convert to countrate if "rate" in units.lower() and "/" not in bunit.lower(): exptime = myfile["SCI", i].header['SAMPTIME'] yaxis[i-1] /= exptime # convert to counts if "counts" in units.lower() and "/" in bunit.lower(): exptime = myfile["SCI", i].header['SAMPTIME'] yaxis[i-1] *= exptime if not ylabel: if "rate" in units.lower(): if "/" in bunit.lower(): ylabel = bunit else: ylabel = bunit+" per second" else: if "/" in bunit: stop_index = bunit.find("/") ylabel = bunit[:stop_index] else: ylabel = bunit if plot: plt.clf() plt.ylabel(ylabel) if not xlabel and time: plt.xlabel("Sample Number") if not xlabel and not time: plt.xlabel("Sample time") if not title: title = "%s Pixel stack for col=%d, row=%d" % (filename, column, row) plt.title(title) if time: plt.xlim(np.max(xaxis), np.min(xaxis)) plt.ylabel("Seconds") plt.plot(xaxis, yaxis, "+") return xaxis, yaxis
[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()
pstack.__doc__ = getHelpAsString(docstring=True)