Source code for gemini_instruments.igrins.adclass

#
#                                                            Gemini Observatory
#
#                                                                        Dragons
#                                                             gemini_instruments
#                                                              igrins.adclass.py
# ------------------------------------------------------------------------------

from astrodata import astro_data_tag
from astrodata import astro_data_descriptor
from astrodata import returns_list
from astrodata import TagSet

from ..gemini import AstroDataGemini
#from .. import gmu
# ------------------------------------------------------------------------------
[docs]class AstroDataIgrins(AstroDataGemini): __keyword_dict = dict( airmass = 'AMSTART', wavelength_band = 'BAND', detector_name = 'DETECTOR', observation_class = 'OBJTYPE', observation_type = 'OBJTYPE', ra = 'OBJRA', dec = 'OBJDEC', slit_x_center = 'SLIT_CX', slit_y_center = 'SLIT_CY', slit_width = 'SLIT_WID', slit_length = 'SLIT_LEN', slit_angle = 'SLIT_ANG' ) @staticmethod def _matches_data(source): grins = source[0].header.get('INSTRUME', '').upper() == 'IGRINS' if not grins: grins = source[1].header.get('INSTRUME', '').upper() == 'IGRINS' return grins @astro_data_tag def _tag_instrument(self): return TagSet(['IGRINS']) @astro_data_tag def _tag_image(self): if self.phu.get('BAND') == 'S' or self[0].hdr.get('BAND') == 'S': return TagSet(['IMAGE', 'ACQUISITION']) # @astro_data_tag # def _tag_spect(self): # if self.phu.get('BAND') in ['K', 'H']: # return TagSet(['SPECT']) @astro_data_tag def _tag_dark(self): if self.phu.get('OBJTYPE') == 'DARK' or self[0].hdr.get('OBJTYPE') == 'DARK': return TagSet(['DARK'], blocks=['IMAGE', 'SPECT']) @astro_data_tag def _tag_arc(self): if self.phu.get('OBJTYPE') == 'ARC' or self[0].hdr.get('OBJTYPE') == 'ARC': return TagSet(['ARC', 'CAL']) @astro_data_tag def _tag_flat(self): if self.phu.get('OBJTYPE') == 'FLAT' or self[0].hdr.get('OBJTYPE') == 'FLAT': return TagSet(['FLAT', 'CAL']) @astro_data_tag def _tag_standard(self): if self.phu.get('OBJTYPE') == 'STD' or self[0].hdr.get('OBJTYPE') == 'STD': return TagSet(['STANDARD', 'CAL']) @astro_data_tag def _tag_science(self): if self.phu.get('OBJTYPE') == 'TAR' or self[0].hdr.get('OBJTYPE') == 'TAR': return TagSet(['SCIENCE'])
[docs] @astro_data_descriptor def airmass(self): aim = self.phu.get(self._keyword_for('airmass')) if not aim: aim = self[0].hdr.get(self._keyword_for('airmass')) return aim
[docs] @astro_data_descriptor def detector_name(self): """ Returns the name of the detector Returns ------- <str>: Detector name """ detnam = self.phu.get(self._keyword_for('detector_name')) if not detnam: detnam = self[0].hdr.get(self._keyword_for('detector_name')) return detnam
[docs] @astro_data_descriptor def filter_name(self, pretty=False): """ IGRINS has no filters or filter names. But this descriptor is used to display 'WaveBand' in the archive. So, IGRINS data needs to "fake it." wavelength_band() returns a string exactly equal to a call on filter_name(pretty=True). Parameters ---------- pretty: <bool> This keyword parameter is present for API purposes. It has no effect for this descriptor. Returns ------- <str>: wavelength band substituting for filter_name(pretty=True) """ return self.wavelength_band()
[docs] @astro_data_descriptor def instrument(self, generic=False): """ Returns the name of the instrument making the observation Parameters ---------- generic: <bool> Request the generic instrument name, if applicable. Returns ------- <str>: instrument name """ inst = self.phu.get(self._keyword_for('instrument')) if not inst: inst = self[0].hdr.get(self._keyword_for('instrument')) return inst
[docs] @astro_data_descriptor def observation_class(self): """ Returns 'class' the observation; one of, 'science', 'acq', 'projCal', 'dayCal', 'partnerCal', 'acqCal' An 'acq' is defined by BAND == 'S', where 'S' indicates a slit image. Returns ------- oclass: <str> One of the above enumerated names for observation class. """ oclass = None otype = self.phu.get(self._keyword_for('observation_class')) if not otype: otype = self[0].hdr.get(self._keyword_for('observation_class')) if 'S' in self.wavelength_band(): oclass = 'acq' if 'STD' in otype: oclass = 'partnerCal' elif 'TAR' in otype: oclass = 'science' return oclass
[docs] @astro_data_descriptor def observation_type(self): """ Returns 'type' the observation. For IGRINS, this will be one of, 'OBJECT', 'DARK', 'FLAT', 'ARC' Returns ------- otype: <str> Observation type. """ otype = self.phu.get(self._keyword_for('observation_type')) if not otype: otype = self[0].hdr.get(self._keyword_for('observation_type')) if otype in ['STD', 'TAR']: otype = 'OBJECT' return otype
[docs] @astro_data_descriptor def ra(self): """ Returns the RA of the observation. Returns ------- rad: <str> Right Ascension """ rad = self.phu.get(self._keyword_for('ra')) if not rad: rad = self[0].hdr.get(self._keyword_for('ra')) return rad
[docs] @astro_data_descriptor def dec(self): """ Returns the declination of observation. Returns ------- decd: <str> Declination """ decd = self.phu.get(self._keyword_for('dec')) if not decd: decd = self[0].hdr.get(self._keyword_for('dec')) return decd
[docs] @astro_data_descriptor def wavelength_band(self): """ Returns the name of the bandpass of the observation. Returns ------- <str>: Name of the bandpass. """ waveb = self.phu.get(self._keyword_for('wavelength_band')) if not waveb: waveb = self[0].hdr.get(self._keyword_for('wavelength_band')) return waveb
#@astro_data_descriptor def _slit_x_center(self): """ Returns Center x position of slit in the SVC image Returns ------- <int>: center x position in pixels """ return self.phu.get(self._keyword_for('slit_x_center')) #@astro_data_descriptor def _slit_y_center(self): """ Returns Center y position of slit in the SVC image Returns ------- <int>: center y position in pixels """ return self.phu.get(self._keyword_for('slit_y_center')) #@astro_data_descriptor def _slit_width(self): """ Returns slit width in the SVC image Returns ------- <int>: slit width in pixels """ return self.phu.get(self._keyword_for('slit_width')) #@astro_data_descriptor def _slit_length(self): """ Returns slit length in the SVC image Returns ------- <int>: slit length in pixels """ return self.phu.get(self._keyword_for('slit_length')) #@astro_data_descriptor def _slit_angle(self): """ Returns slit length in the SVC image Returns ------- <int>: slit length in pixels """ return self.phu.get(self._keyword_for('slit_angle'))
[docs] @astro_data_descriptor def target_ra(self): return self.wcs_ra()
[docs] @astro_data_descriptor def target_dec(self): return self.wcs_dec()