Source code for dorado.ceres.ceresClass
import warnings
warnings.filterwarnings('ignore')
# import sys
# import os
import numpy as np
import ccdprocx
from astropy.time import Time
from astropy.table import QTable, Table
import astroalign as aa
from astropy.wcs import WCS
# from astropy.utils.console import ProgressBar, ProgressBarOrSpinner
from tqdm import tqdm
# from astropy.coordinates import SkyCoord as acoord
# import astropy.units as un
from astropy.io import fits
from astropy.nddata.ccddata import CCDData
CCDData._config_ccd_requires_unit = False
# photometry imports
# from photutils.psf import IntegratedGaussianPRF, DAOGroup
# from photutils.background import MMMBackground, MADStdBackgroundRMS
# from astropy.modeling.fitting import LevMarLSQFitter
# from astropy.stats import gaussian_sigma_to_fwhm
# from photutils.psf import IterativelySubtractedPSFPhotometry
from photutils.aperture import CircularAperture, aperture_photometry, CircularAnnulus
# from photutils import DAOStarFinder
# from astropy.stats import mad_std
# from astroquery.simbad import Simbad
from astropy.visualization import SqrtStretch
from astropy.visualization.mpl_normalize import ImageNormalize
from astropy.stats import SigmaClip
from photutils import Background2D, MedianBackground
'''
Ceres is the handler of observational image series in Dorado.
'''
__all__ = ['Ceres']
[docs]class Ceres:
'''
The Ceres class encapsulates a set of astronomical data from a single night of observation.
Ceres can handle multiple stacks of data in different filters and perform a variety of
actions on them in an orgainized fashion.
Attributes
----------
filters: dictionary
data: Stack array
bias: CCDdata
time: 'astropy.Time'
datestr: str
'''
def __init__(self, filters = {}, data = [], bias = None, time = None, datestr = None):
# metadata
self.filters = filters
self.data = data
self.time = time
self.datestr = datestr
self.bias = bias
# location, weather, timezone, camera, observer array
# TODO figure out how to clean this up
try:
self.date = Time(int(self.time.mjd), format = 'mjd')
except:
self.date = None
if datestr == None:
try:
epoch = self.date.ymdhms
if (epoch['hour'] + Dorado.UTCoffset) < 0:
day = str(epoch['day'] - 1)
day2 = str(epoch['day'])
month = str(epoch['month'])
if (epoch['day'] - 1) < 10:
day = '0' + str(epoch['day'] - 1)
if epoch['day'] < 10:
day2 = '0' + str(epoch['day'])
if epoch['month'] < 10:
month = '0' + str(epoch['month'])
else:
day = str(epoch['day'])
day2 = str(epoch['day'] + 1)
month = str(epoch['month'])
if epoch['day'] < 10:
day = '0' + str(epoch['day'])
if epoch['day'] < 9:
day2 = '0' + str(epoch['day'] + 1)
if epoch['month'] < 10:
month = '0' + str(epoch['month'])
self.datestr = str(epoch['year']) + '-' + month + '-' + day + '+' + day2
except:
self.datestr = datestr
[docs] def add_stack(self, stack):
'''
Add a Dorado stack to the current Ceres instance (self).
Parameters
----------
stack: dorado.stack
Instance of dorado.stack class to add to self.
'''
# eventually stacks themelves should have some metadata
# to denote stuff like calibration status
# TODO do I need to add times?
self.filters[stack.filter] = len(self.data)
self.data.append(stack)
[docs] def rem_stack(self, filter):
'''
Remove a Dorado stack to the current Ceres instance (self).
Parameters
----------
filter: str
String representation of the relevent filter to remove from self.
'''
# TODO delete time strings
del self.data[self.filters[filter]]
class Bias_Ceres:
def __init__(self, file_list = [], data = [], datestr = ''):
self.time = time
try:
self.date = Time(int(self.time.mjd), format = 'mjd')
except:
self.date = None
if datestr == '':
try:
epoch = self.date.ymdhms
if (epoch['hour'] + Dorado.UTCoffset) < 0:
day = str(epoch['day'] - 1)
day2 = str(epoch['day'])
month = str(epoch['month'])
if (epoch['day'] - 1) < 10:
day = '0' + str(epoch['day'] - 1)
if epoch['day'] < 10:
day2 = '0' + str(epoch['day'])
if epoch['month'] < 10:
month = '0' + str(epoch['month'])
else:
day = str(epoch['day'])
day2 = str(epoch['day'] + 1)
month = str(epoch['month'])
if epoch['day'] < 10:
day = '0' + str(epoch['day'])
if epoch['day'] < 9:
day2 = '0' + str(epoch['day'] + 1)
if epoch['month'] < 10:
month = '0' + str(epoch['month'])
self.datestr = str(epoch['year']) + '-' + month + '-' + day + '+' + day2
except:
self.datestr = datestr
# if np.any(file_list)