Source code for mirar.pipelines.wirc.load_wirc_image

"""
Module for loading raw WIRC images and ensuring they have the correct format
"""
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_fits, open_raw_image
from mirar.paths import (
    COADD_KEY,
    GAIN_KEY,
    OBSCLASS_KEY,
    PROC_FAIL_KEY,
    PROC_HISTORY_KEY,
    SATURATE_KEY,
    TARGET_KEY,
    ZP_KEY,
    ZP_STD_KEY,
)
from mirar.processors.skyportal import SNCOSMO_KEY

wirc_filter_dict = {"J": 1, "H": 2, "Ks": 3}

logger = logging.getLogger(__name__)

WIRC_NONLINEAR_LEVEL = 30000

sncosmo_filters = {
    "j": "cspjs",
    "h": "csphs",
    "ks": "cspk",
}


[docs] def load_raw_wirc_fits(path: str | Path) -> tuple[np.array, astropy.io.fits.Header]: """ Function to load a raw WIRC 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] = 1.2 header["FILTER"] = header["AFT"].split("__")[0] header[SNCOSMO_KEY] = sncosmo_filters[header["FILTER"].lower()] if "COADDS" in header.keys(): header["DETCOADD"] = header["COADDS"] if SATURATE_KEY not in header: header[SATURATE_KEY] = WIRC_NONLINEAR_LEVEL * header["DETCOADD"] if header["OBJECT"] in ["acquisition", "pointing", "focus", "none"]: header[OBSCLASS_KEY] = header["OBJECT"] else: header[OBSCLASS_KEY] = "science" # Apparently for WIRC, the images come tagged correctly. header[TARGET_KEY] = header["OBJECT"].lower() if "MJD-OBS" in header.keys(): header["DATE-OBS"] = Time(header["MJD-OBS"], format="mjd").isot else: header["DATE-OBS"] = header["UTSHUT"] header["MJD-OBS"] = Time(header["UTSHUT"]).mjd header["JD"] = Time(header["DATE-OBS"]).jd 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] = "" if "FILTERID" not in header.keys(): header["FILTERID"] = wirc_filter_dict[header["FILTER"]] header["FID"] = header["FILTERID"] if "FIELDID" not in header.keys(): header["FIELDID"] = 99999 if "PROGPI" not in header.keys(): header["PROGPI"] = "Kasliwal" if "PROGID" not in header.keys(): header["PROGID"] = 0 if "ZP" not in header.keys(): if "TMC_ZP" in header.keys(): header[ZP_KEY] = float(header["TMC_ZP"]) header[ZP_STD_KEY] = float(header["TMC_ZPSD"]) if "ZP_AUTO" in header.keys(): header[ZP_KEY] = float(header["ZP_AUTO"]) header[ZP_STD_KEY] = float(header["ZP_AUTO_std"]) data = data.astype(float) data[data == 0.0] = np.nan return data, header
[docs] def load_raw_wirc_image(path: str | Path) -> Image: """ Function to load a raw WIRC image :param path: Path to the raw image :return: Image object """ return open_raw_image(path, load_raw_wirc_fits)