Source code for mirar.pipelines.gmos.load_gmos_image

"""
Module for loading raw WASP images and ensuring they have the correct format
"""

# pylint: disable=duplicate-code

import logging
from pathlib import Path

import astropy
import numpy as np
from astropy.time import Time

from mirar.data import Image
from mirar.io import open_mef_fits, open_raw_image
from mirar.paths import (
    BASE_NAME_KEY,
    COADD_KEY,
    GAIN_KEY,
    OBSCLASS_KEY,
    PROC_FAIL_KEY,
    PROC_HISTORY_KEY,
    RAW_IMG_KEY,
    SATURATE_KEY,
    TARGET_KEY,
    TIME_KEY,
)
from mirar.pipelines.gmos.config.constants import GMOS_FILTERS

logger = logging.getLogger(__name__)


[docs] def load_detrended_gmos_fits( path: str | Path, ) -> tuple[np.array, astropy.io.fits.Header]: """ Function to load a GMOS image post-DRAGONS processing (10.3847/2515-5172/ad0044) :param path: path of file :return: data and header of image """ primary_header, split_data, split_headers = open_mef_fits(path) data = split_data[0] header = primary_header for key in split_headers[0].keys(): try: header[key] = split_headers[0][key] except ValueError: pass header[RAW_IMG_KEY] = str(path) header[BASE_NAME_KEY] = Path(path).name if GAIN_KEY not in header.keys(): header[GAIN_KEY] = header["GAIN"] header["FILTER"] = header["FILTER1"].replace(" ", "").split("_")[0].lower() assert header["FILTER"] in GMOS_FILTERS, f"Filter {header['FILTER']} not recognised" # Set up for forced photometry header["OBJRA"] = header["RA"] header["OBJDEC"] = header["DEC"] del header["RA"] del header["DEC"] header["DETCOADD"] = header["NCOMBINE"] if SATURATE_KEY not in header: header[SATURATE_KEY] = header["SATLEVEL"] header[OBSCLASS_KEY] = "science" header[TARGET_KEY] = header["OBJECT"].lower() t = Time(f"{header['DATE-OBS']}T{header['TIME-OBS']}") header[TIME_KEY] = t.isot header["MJD-OBS"] = t.mjd if COADD_KEY not in header.keys(): logger.debug(f"No {COADD_KEY} entry. Setting coadds to 1.") header[COADD_KEY] = header["NCOMBINE"] header[PROC_HISTORY_KEY] = "" header[PROC_FAIL_KEY] = "" data = data.astype(float) data[data == 0.0] = np.nan return data, header
[docs] def load_detrended_gmos_image(path: str | Path) -> Image: """ Function to load a detrended GMOS image :param path: Path to the raw image :return: Image object """ return open_raw_image(path, load_detrended_gmos_fits)