Source code for dorado.stack.stackClass
import warnings
warnings.filterwarnings('ignore')
from astropy.time import Time
__all__ = ['Stack']
'''
'dorado.stack' holds the base Stack class for handling correlated stacks of image objects.
The Stack class can be used alone, but is designed to work best from within other Dorado
components such as Ceres.
'''
[docs]class Stack:
'''
The Stack class encapsulates correlated stacks of image objects and their associated data.
Stack exceeds simply storing stacks of images in an array or list by expanding upon the array
object to hold additional data about the image stack such as a WCS object, the enclosed target,
and the correlated calibration frames.
Attributes
----------
data: CCDdata array
Array of CCDdata images.
flat: CCDdata
Flatfield calibration frame for data stack. Optional
filter: str
Name of filter data was collected in. Optional.
times: array or list-like
Time for each image as an 'astropy.Time' object. Optional.
calibrated: Boolean
Whether the data is calibrated or not. Default is 'None'. Optional.
aligned: Boolean
Whether the data is aligned or not. Default is 'None'. Optional.
target: TOI object
Instance of the TOI astronomical target class containing the target of interest in the stack. Optional.
alignTo: int
Index of the image which all other stack images should be aligned to. Default is 0. Optional.
'''
## TODO :: auto identify targets in stack
def __init__(self, data, flat = None, filter = '', times = [], calibrated = None,
aligned = None, target = None, alignTo = 0):
self.data = data
self.flat = flat
self.filter = filter
self.length = len(data)
self.calibrated = calibrated
self.aligned = aligned
self.target = target
self.target_info = {} # dictionary of values, call simbad?
self.times = times
self.wcs = None
self.alignTo = alignTo
self.solved = None
self.base = None
# include things like flux uncertainty etc.
# save data
# if flat is none, call clippy for help
if self.filter == '':
try:
self.filter = data[0].header['filter']
except:
self.filter = ''
if self.times == []:
try:
self.get_times()
# print('Times set')
except:
self.times = []
[docs] def get_times(self):
'''
get_times sequences through the stack data and passes the FITS header timestamp
for 'DATE-OBS' into 'astropy.time' and sets the resulting array of times as
'self.times'.
Parameters
----------
None
Returns
-------
None
Sets
----
self.times: array or list-like
array of 'astropy.time' objects for each image timestamp.
'''
times = []
for im in self.data:
times.append(Time(im.header['DATE-OBS'], format='fits'))
self.times = times
[docs] def get_target_info(self, target = None):
'''
get_target_info is a convinience function for setting an instance of TOI
as the Stack target object.
Parameters
----------
target: TOI object
Instance of the TOI astronomical target class containing the target of interest in the stack.
Returns
-------
None
Sets
----
self.target: TOI object
Target of interest in the stack.
'''
# TODO does this need to be a wrapper or need more here
if target != None:
self.target = target