Source code for simmer.utils
"""
This module provides utility functions for the reduction pipeline.
"""
import astropy.io.fits as pyfits
import numpy as np
[docs]
def find_angle(loc1, loc2):
"""
Calculated the angle between two locations on a grid.
Inputs:
:loc1: (tuple) first location.
:relative: (tuple) second location.
Outputs:
:angle : (float) real-valued angle between loc1 and loc2.
"""
angle = np.atan(loc1[1] / loc2[1])
return angle
[docs]
def make_filelist(directory, numlist, inst):
"""Turn a list of numbers into a list of properly formatted filenames.
Inputs:
:directory: (string) path leading to directory of interest.
:numlist: (list) list of numbers corresponding to fits files.
:inst: (Instrument object) instrument for which data is being reduced.
Outputs:
:filelist: (list) list of strings pertaining to files of interest
"""
filelist = [
directory + inst.file_prefix + "{:04d}.fits".format(d) for d in numlist
]
return filelist
[docs]
def read_imcube(filelist):
"""Reads a stack of fits files into an image cube of dimensions (nims, xpix, ypix).
Inputs:
:filelist: (list) list of strings pertaining to files of interest.
Outputs:
:im_array: (3D array) array of 2D arrays pertaining to the files in filelist.
"""
im_array = np.array([pyfits.getdata(file, 0) for file in filelist])
return im_array
[docs]
def image_subsection(input_image, npix, center):
"""reads in a full image array, selects the relevant subsection of the array,
and returns the new array, transposed for use with Python.
input_image must be 2D
Inputs:
:input_image: (2D array) image of which a subsection is desired.
:center: (tuple) center of image, with format (x, y)
:npix: (float) value for size of return image. If non-square image desired, enter as list.
:default: center = (750, 1100)
:npix: = 800 for inscribed region or npix = 1000 for circumscribing region
(was 600 for inscribed region; CDD changed to 800)
:transposed: = np.rot90(input_image.T,2)
:transposed: = np.rot90(input_image,2)
:center: = (2047-center[0],2047-center[1]
Outputs:
:subsection: (2d array) subsection of original image.
)"""
npix = np.array(npix)
if np.size(npix) == 1:
npix = [npix, npix]
half = [int(n / 2) for n in npix]
subsection = input_image[
center[0] - half[0] : center[0] + half[0],
center[1] - half[1] : center[1] + half[1],
]
return subsection