Source code for Starfish.grid_tools.instruments

from dataclasses import dataclass
from typing import Tuple

# TODO convert to dataclass

# Convert R to FWHM in km/s by \Delta v = c/R
[docs]@dataclass class Instrument: """ Object describing an instrument. This will be used by other methods for processing raw synthetic spectra. Parameters ---------- name: string name of the instrument FWHM: float the FWHM of the instrumental profile in km/s wl_range: Tuple (low, high) wavelength range of instrument oversampling: float, optional how many samples fit across the :attr:`FWHM`. Default is 4.0 """ name: str FWHM: float wl_range: Tuple[float] oversampling: float = 4.0
[docs] def __str__(self): """ Prints the relevant properties of the instrument. """ return ( "instrument Name: {}, FWHM: {:.1f}, oversampling: {:.0f}, " "wl_range: {}".format( self.name, self.FWHM, self.oversampling, self.wl_range ) )
[docs]class TRES(Instrument): """TRES instrument""" def __init__(self, name="TRES", FWHM=6.8, wl_range=(3500, 9500)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)
# sets the FWHM and wl_range
[docs]class Reticon(Instrument): """Reticon instrument""" def __init__(self, name="Reticon", FWHM=8.5, wl_range=(5145, 5250)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)
[docs]class KPNO(Instrument): """KNPO instrument""" def __init__(self, name="KPNO", FWHM=14.4, wl_range=(6250, 6650)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)
[docs]class SPEX(Instrument): """SPEX instrument at IRTF in Hawaii""" def __init__(self, name="SPEX", FWHM=150.0, wl_range=(7500, 54000)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)
[docs]class SPEX_SXD(SPEX): """SPEX instrument at IRTF in Hawaii short mode (reduced wavelength range)""" def __init__(self, name="SPEX_SXD"): super().__init__(name=name, wl_range=(7500, 26000))
class SPEX_PRISM(SPEX): """SPEX instrument at IRTF in Hawaii low-res PRISM mode (reduced wavelength range)""" def __init__(self, name="SPEX_SXD"): super().__init__(name=name, FWHM=1500, wl_range=(7500, 26000)) class IGRINS(Instrument): """IGRINS Instruments Abstract Class""" def __init__(self, wl_range, name="IGRINS"): super().__init__(name=name, FWHM=7.5, wl_range=wl_range) self.air = False
[docs]class IGRINS_H(IGRINS): """IGRINS H band instrument""" def __init__(self, name="IGRINS_H", wl_range=(14250, 18400)): super().__init__(name=name, wl_range=wl_range)
[docs]class IGRINS_K(IGRINS): """IGRINS K band instrument""" def __init__(self, name="IGRINS_K", wl_range=(18500, 25200)): super().__init__(name=name, wl_range=wl_range)
[docs]class ESPaDOnS(Instrument): """ESPaDOnS instrument""" def __init__(self, name="ESPaDOnS", FWHM=4.4, wl_range=(3700, 10500)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)
[docs]class DCT_DeVeny(Instrument): """DCT DeVeny spectrograph instrument.""" def __init__(self, name="DCT_DeVeny", FWHM=105.2, wl_range=(6000, 10000)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)
[docs]class WIYN_Hydra(Instrument): """WIYN Hydra spectrograph instrument.""" def __init__(self, name="WIYN_Hydra", FWHM=300.0, wl_range=(5500, 10500)): super().__init__(name=name, FWHM=FWHM, wl_range=wl_range)