Source code for simmer.darks

"""
Functions to work with darks.
"""

import astropy.io.fits as pyfits
import numpy as np
from tqdm import tqdm

from . import plotting as pl
from . import utils as u

[docs] def dark_driver(raw_dir, reddir, config, inst, plotting_yml=None): """Night should be entered in format 'yyyy_mm_dd' as string. This will point toward a config file for the night with darks listed.flat Inputs: :raw_dir: (string) directory for the raw data :reddir: (string) directory for the reduced data :config: (pandas DataFrame) dataframe corresponding to config sheet for data. :inst: (Instrument object) instrument for which data is being reduced. :plotting_yml: (string) path to the plotting configuration file. """ if plotting_yml: pl.initialize_plotting(plotting_yml) _darks = config[config.Object == "dark"] texps = _darks.ExpTime.unique() for texp in tqdm(texps, desc="Running darks", position=0, leave=True): darklist = [] ww = np.where(_darks.ExpTime == texp) allfiles = _darks.iloc[ww].Filenums.values for aa in np.arange(len(allfiles)): for bb in eval(allfiles[aa]): darklist.append(bb) create_darks( raw_dir, reddir, darklist, inst ) # creates a new dark file
[docs] def create_darks(raw_dir, reddir, darklist, inst): """creates the actual darks from a list of dark file numbers, taking the median and writing to a file. Returns the final dark. Inputs: :reddir: (string) directory for the reduced data :darklist: string) list of dark file numbers :inst: (Instrument object) instrument for which data is being reduced. """ ndarks = len(darklist) darkfiles = u.make_filelist(raw_dir, darklist, inst) dark_array = u.read_imcube(darkfiles) dark_array = inst.adjust_array(dark_array, ndarks) head = inst.head(darkfiles[0]) itime = inst.itime(head) final_dark = np.median(dark_array, axis=0) # nanmedian? pl.plot_array( "intermediate", dark_array, -1.0, 50.0, reddir, f"dark_cube_{int(round(itime))}sec.png", ) head.set("DATAFILE", str(darklist)) # add all file names hdu = pyfits.PrimaryHDU( final_dark, header=head ) # can i do this with fits? dark_filename = reddir + "dark_{}sec.fits".format(int(round(itime))) hdu.writeto(dark_filename, overwrite=True, output_verify="ignore") return final_dark