Source code for noctua.templates.skyflat

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# System modules

# Third-party modules
from astropy.io import fits
from astropy.time import Time

# Other templates
from ..config.constants import temp_fits
from ..devices import dom
from ..utils.analysis import skyflat_exptime
from ..utils.logger import log
from .acquisition import Template as Acquisition
from .basetemplate import BaseTemplate
from .observation import Template as Observation


[docs] class Template(BaseTemplate): """Sky flat template""" def __init__(self): """Constructor""" super().__init__() self.name = "skyflat" self.description = "Takes a set of sky flat calibrations"
[docs] def content(self, params): """Template implementation""" ######################## ##### Params check ##### ######################## try: binning = params["binning"] repeat = params.get("repeat") or 1 filt = params["filter"] exptime = params["exptime"] except KeyError as e: log.error(f"Parameter {e} not found") fixed = { "objname": "Sky flat frame", "frametype": "Flat" } params.update(fixed) ############################ ##### Moving telescope ##### ############################ # hour < 12: 'twilight', hour > 12: 'dawn' now = Time.now() hour = now.datetime.hour # Point opposite to the Sun: # West if twilight, Est if dawn. altaz = [30, 270] if hour < 12 else [30, 90] acq = Acquisition() acq.run({"altaz": altaz}) self.check_pause_or_abort() ################################### ##### Taking a test flat image #### ################################### obs = Observation() obs.run(params) self.check_pause_or_abort() # Calculating the average count rate img = fits.getdata(temp_fits) average_counts = img.data.mean() rate = average_counts / exptime # calcolo test rate (counts/(s*pixel)) # Retrieving optimal exptimes "à la Tyson&Gal" exptimes = skyflat_exptime(rate, binning=binning, repeat=repeat) #################################################### ##### Taking sky flats looping optimal exptimes #### #################################################### for exp in exptimes: self.check_pause_or_abort() params["exptime"] = exp obs.run(params) return