Source code for soxspipe.recipes.soxs_straighten

#!/usr/bin/env python
# encoding: utf-8
"""
*transform spectral image from detector pixel space to wavelength and slit-position space*

Author
: David Young & Marco Landoni

Date Created
: May 17, 2021
"""
################# GLOBAL IMPORTS ####################
from datetime import datetime
from soxspipe.commonutils import keyword_lookup
from .base_recipe import base_recipe
from fundamentals import tools
from builtins import object
import sys
import os

os.environ["TERM"] = "vt100"


[docs] class soxs_straighten(base_recipe): """ *The soxs_straighten recipe* """ # Initialisation def __init__( self, log, settings=False, inputFrames=[], verbose=False, overwrite=False, command=False, debug=False, turnOffMP=False, ): # INHERIT INITIALISATION FROM base_recipe super(soxs_straighten, self).__init__( log=log, settings=settings, inputFrames=inputFrames, overwrite=overwrite, recipeName="soxs-straighten", command=command, verbose=verbose, debug=debug, turnOffMP=turnOffMP, ) self.log = log log.debug("instantiating a new 'soxs_straighten' object") self.settings = settings self.inputFrames = inputFrames self.verbose = verbose # xt-self-arg-tmpx # INITIAL ACTIONS # CONVERT INPUT FILES TO A CCDPROC IMAGE COLLECTION (inputFrames > # imagefilecollection) from soxspipe.commonutils.set_of_files import set_of_files sof = set_of_files( log=self.log, settings=self.settings, inputFrames=self.inputFrames, ext=self.settings["data-extension"] ) self.inputFrames, self.supplementaryInput = sof.get() # VERIFY THE FRAMES ARE THE ONES EXPECTED BY SOXS_straighten - NO MORE, NO LESS. # PRINT SUMMARY OF FILES. self.log.print("# VERIFYING INPUT FRAMES") self.verify_input_frames() sys.stdout.flush() sys.stdout.write("\x1b[1A\x1b[2K") self.log.print("# VERIFYING INPUT FRAMES - ALL GOOD") # SORT IMAGE COLLECTION self.inputFrames.sort(["MJD-OBS"]) if self.verbose: self.log.print("# RAW INPUT FRAMES - SUMMARY") self.log.print(self.inputFrames.summary) self.log.print("\n") # PREPARE THE FRAMES - CONVERT TO ELECTRONS, ADD UNCERTAINTY AND MASK # EXTENSIONS self.inputFrames = self.prepare_frames(save=self.settings["save-intermediate-products"]) return None
[docs] def verify_input_frames(self): """*verify the input frame match those required by the soxs_straighten recipe* **Return:** - ``None`` If the fits files conform to the required input for the recipe, everything will pass silently; otherwise, an exception will be raised. """ self.log.debug("starting the ``verify_input_frames`` method") kw = self.kw error = False # BASIC VERIFICATION COMMON TO ALL RECIPES imageTypes, imageTech, imageCat = self._verify_input_frames_basics() # NEED TO READD FILTERING # if self.arm == "NIR": # # WANT ON AND OFF PINHOLE FRAMES # # MIXED INPUT IMAGE TYPES ARE BAD # if len(imageTypes) > 1: # imageTypes = " and ".join(imageTypes) # self.log.print(self.inputFrames.summary) # raise TypeError( # "Input frames are a mix of %(imageTypes)s" % locals()) # if imageTypes[0] != "LAMP,FMTCHK": # raise TypeError( # "Input frames for soxspipe straighten need to be ********* lamp on and lamp off frames for NIR" % locals()) # for i in imageTech: # if i not in ['ECHELLE,PINHOLE', 'IMAGE']: # raise TypeError( # "Input frames for soxspipe straighten need to be ********* lamp on and lamp off frames for NIR" % locals()) # else: # for i in imageTypes: # if i not in ["LAMP,FMTCHK", "BIAS", "DARK"]: # raise TypeError( # "Input frames for soxspipe straighten need to be ********* and a master-bias and possibly a master dark for UVB/VIS" % locals()) # LOOK FOR **** arm = self.arm if arm not in self.supplementaryInput or "2D_MAP" not in self.supplementaryInput[arm]: raise TypeError( "Need a full dispersion/spatial solution for %(arm)s - none found with the input files" % locals() ) if error: sys.stdout.flush() sys.stdout.write("\x1b[1A\x1b[2K") self.log.print("# VERIFYING INPUT FRAMES - **ERROR**\n") self.log.print(self.inputFrames.summary) self.log.print("") raise TypeError(error) self.imageType = imageTypes[0] self.log.debug("completed the ``verify_input_frames`` method") return None
[docs] def produce_product(self): """*The code to generate the product of the soxs_straighten recipe* **Return:** - ``productPath`` -- the path to the final product **Usage** ```python from soxspipe.recipes import soxs_straighten recipe = soxs_straighten( log=log, settings=settings, inputFrames=fileList ) straightenFrame = recipe.produce_product() ``` """ self.log.debug("starting the ``produce_product`` method") arm = self.arm kw = self.kw dp = self.detectorParams productPath = None # filename = os.path.basename(productPath) utcnow = datetime.utcnow() utcnow = utcnow.strftime("%Y-%m-%dT%H:%M:%S") # xsoxs-append-to-product-report-table qcTable = self.report_output() self.clean_up() self.log.debug("completed the ``produce_product`` method") return productPath, qcTable
# use the tab-trigger below for new method # xt-class-method # Override Method Attributes # method-override-tmpx