Source code for astrocut.tica_cube_factory

# Licensed under a 3-clause BSD style license - see LICENSE.rst

from typing import Optional, Union

import numpy as np
from astropy.io import fits
from astropy.utils.decorators import deprecated

from .cube_factory import CubeFactory


[docs]@deprecated(since='1.1.0', message='The `TicaCubeFactory` class is deprecated and will be removed in a future version. ' 'Use the `CubeFactory` class for creating image cubes from SPOC product files.') class TicaCubeFactory(CubeFactory): """ Class for creating TICA image cubes. The TESS Image CAlibrator (TICA) products are high level science products (HLSPs) developed by the MIT Quick Look Pipeline (https://github.com/mmfausnaugh/tica). These images are produced and delivered up to 4x sooner than their SPOC counterparts (as of TESS EM2), and can therefore be used to produce the most up-to-date cutouts of a target. More information on TICA can be found here: https://archive.stsci.edu/hlsp/tica Parameters ---------- max_memory : int The maximum amount of memory to make available for building the data cube in GB. Note, this is the maximum amount of space to be used for the cube array only, so should not be set to the full amount of memory on the system. """ def __init__(self, max_memory: int = 50): """ Setting up the class members.""" super().__init__(max_memory=max_memory) self._time_keyword = 'STARTTJD' # Start time in TJD. TICA-specific. self._last_file_keywords = ['ENDTJD'] # Stop time in TJD. TICA-specific (assumed to be in extension 0) self._image_header_keywords = ['CAMNUM', 'CCDNUM'] # Camera number and CCD number self._template_requirements = {'NAXIS': 2} # Using NAXIS instead of WCSAXES. self._img_ext = 0 # TICA has image data in the primary extension self._naxis1 = 1 # TICA has data values only def _get_img_start_time(self, img_data: fits.HDUList) -> float: """ Get the start time of the image. Parameters ---------- img_data : HDUList The image data. Returns ------- float The start time of the image. """ return img_data[self._img_ext].header.get(self._time_keyword) def _get_img_shape(self, img_data: fits.HDUList) -> tuple: """ Get the shape of the image data. Parameters ---------- img_data : HDUList The image data. Returns ------- tuple The shape of the image data. """ try: return img_data[self._img_ext].data.shape except AttributeError: # If data is not found in the image extension, raise an error raise ValueError(self.ERROR_MSG) def _write_to_sub_cube(self, sub_cube: np.ndarray, idx: int, img_data: fits.HDUList, start_row: int, end_row: int): """ Write data from an input image to a sub-cube. Parameters ---------- sub_cube : numpy.ndarray The sub-cube to write to. idx : int The index of the input file. img_data : HDUList The image data. start_row : int The starting row of the block. end_row : int The ending row of the block. """ # Add image data to the sub-cube sub_cube[:, :, idx, 0] = img_data[0].data[start_row:end_row, :] # Remove the data from the input image to save memory del img_data[0].data def _get_header_keyword(self, kwd: str, img_data: fits.HDUList, nulval: Optional[Union[int, str]]): """ Get a header keyword from an input image and save it to the info table. Parameters ---------- kwd : str The keyword to get. img_data : HDUList The image data. nulval : int or str The null value for the keyword. """ val = img_data[0].header.get(kwd, nulval) # The "COMMENT" keyword is in the form of a _HeaderCommentaryCard instead of a string return str(val) if isinstance(val, fits.header._HeaderCommentaryCards) else val