Source code for mirar.pipelines.wasp.load_wasp_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.coordinates import Angle
from astropy.time import Time

from mirar.data import Image
from mirar.io import open_fits, open_raw_image
from mirar.paths import (
    COADD_KEY,
    GAIN_KEY,
    OBSCLASS_KEY,
    PROC_FAIL_KEY,
    PROC_HISTORY_KEY,
    SATURATE_KEY,
    TARGET_KEY,
    TIME_KEY,
)
from mirar.pipelines.wasp.config.constants import (
    WASP_FILTERS,
    WASP_GAIN,
    WASP_NONLINEAR_LEVEL,
)

logger = logging.getLogger(__name__)


[docs] def load_raw_wasp_fits(path: str | Path) -> tuple[np.array, astropy.io.fits.Header]: """ Function to load a raw LT image :param path: path of file :return: data and header of image """ data, header = open_fits(path) if GAIN_KEY not in header.keys(): header[GAIN_KEY] = WASP_GAIN header["FILTER"] = header["FILTER"].lower().replace(" ", "") assert header["FILTER"] in WASP_FILTERS, f"Filter {header['FILTER']} not recognised" # Set up for forced photometry ra = Angle(f"{header['RA']} hours").degree header["OBJRA"] = ra dec = Angle(f"{header['DEC']} degrees").degree header["OBJDEC"] = dec del header["RA"] del header["DEC"] header["DETCOADD"] = 1 if SATURATE_KEY not in header: header[SATURATE_KEY] = WASP_NONLINEAR_LEVEL * header["DETCOADD"] if header["OBJECT"] in ["pointing", "focus", "dark", "bias", "flat"]: header[OBSCLASS_KEY] = header["OBJECT"] else: header[OBSCLASS_KEY] = "science" for key in ["focus", "flat", "bias"]: if key in Path(path).name.lower(): header[OBSCLASS_KEY] = key header[TARGET_KEY] = header["OBJECT"].lower() t = Time(header["UTCSTART"]) 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] = 1 header[PROC_HISTORY_KEY] = "" header[PROC_FAIL_KEY] = "" data = data.astype(float) data[data == 0.0] = np.nan return data, header
[docs] def load_raw_wasp_image(path: str | Path) -> Image: """ Function to load a raw WASP image :param path: Path to the raw image :return: Image object """ return open_raw_image(path, load_raw_wasp_fits)