Source code for soxspipe.commonutils.keyword_lookup

#!/usr/bin/env python
# encoding: utf-8
"""
*Given a keyword token and instrument name return the exact FITS Header keyword*

Author
: David Young & Marco Landoni

Date Created
: February 26, 2020
"""
################# GLOBAL IMPORTS ####################
from fundamentals import tools
from builtins import object
import sys
import os

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


[docs] class keyword_lookup(object): """ *The worker class for the keyword_lookup module* **Key Arguments:** - ``log`` -- logger - ``settings`` -- the settings dictionary. Default *False* - ``instrument`` -- can directly add the instrument if settings file is not avalable. Default *False* **Usage** To initalise the keyword lookup object in your code add the following: ```python from soxspipe.commonutils import keyword_lookup kw = keyword_lookup( log=log, settings=settings, instrument=False, ).get ``` After this it's possible to either look up a single keyword using it's alias: ```python kw("DET_NDITSKIP") > "ESO DET NDITSKIP" ``` or return a list of keywords: ```python kw(["PROV", "DET_NDITSKIP"]) > ['PROV', 'ESO DET NDITSKIP'] ``` For those keywords that require an index it's possible to also pass the index to the `kw` function: ```python kw("PROV", 9) > 'PROV09' ``` If a tag is not in the list of FITS Header keyword aliases in the configuration file a `LookupError` will be raised. """ # Initialisation def __init__( self, log, instrument=False, settings=False, ): self.log = log log.debug("instantiating a new 'keyword_lookup' object") self.settings = settings self.instrument = instrument # xt-self-arg-tmpx # SELECT THE INSTRUMENT AND READ THE KEYWORD DICTIONARY IN RESOURCES # FOLDER if instrument: self.instrument = instrument elif settings and "instrument" in settings: self.instrument = settings["instrument"] else: self.instrument = "soxs" self.kwDict = self._select_dictionary() return None
[docs] def get(self, tag, index=False): """ *given a tag, and optional keyword index, return the FITS Header keyword for the selected instrument* **Key Arguments:** - ``tag`` -- the keyword tag as set in the yaml keyword dictionary (e.g. 'SDP_KEYWORD_TMID' returns 'TMID'). Can be string or list of sttings. - ``index`` -- add an index to the keyword if not False (e.g. tag='PROV', index=3 returns 'PROV03') Default *False* **Return:** - ``keywords`` -- the FITS Header keywords. Can be string or list of sttings depending on format of tag argument **Usage** See docstring for the class """ self.log.debug("starting the ``get`` method") # CONVERT STRING TO LIST OF ONE ITEM single = False if not isinstance(tag, list): single = True tag = [tag] # STRINGIFY INDEX if index: index = "%(index)0.2d" % locals() else: index = "" # LOOKUP KEYWORDS keywords = [] for t in tag: if t not in self.kwDict: raise LookupError(f"{t} is not in the list of known FITS Header keyword aliases") keywords.append(self.kwDict[t] + index) # RETURNING A SINGLE KEYWORD? if single: keywords = keywords[0] self.log.debug("completed the ``get`` method") return keywords
def _select_dictionary(self): """*select the keyword dictionary based on the instrument passed via the settings* **Return:** - ``kwDict`` -- the python dictionary of keywords (key = tag, value = fits keyword) **Usage** ```python from soxspipe.commonutils import keyword_lookup this = keyword_lookup( log=log, settings=settings ) kwDict = this._select_dictionary() ``` """ self.log.debug("starting the ``_select_dictionary`` method") # GENERATE PATH TO YAML DICTIONARY yamlFilePath = ( os.path.dirname(os.path.dirname(__file__)) + "/resources/" + self.instrument.lower() + "_keywords.yaml" ) # YAML CONTENT TO DICTIONARY import yaml with open(yamlFilePath, "r") as stream: kwDict = yaml.safe_load(stream) self.log.debug("completed the ``_select_dictionary`` method") return kwDict