Source code for PTO.telescopes.instruments

import astropy.units as u
from dataclasses import dataclass, field
import numpy as np
import logging
from ..utils.utilities import logger_default
from ..simulations.simulator import Simulator
from . import exposure_time_calculator as etc

logger = logging.getLogger(__name__)
if not logger.handlers:
    logger = logger_default(logger)

[docs] @dataclass class Spectrograph(): name: str resolution_mode: str modes: list = field(default_factory=list) def _add_observing_mode(self, mode_name:str, resolution:int, simultaneous = None, exposure_time_calculator: None | etc.ETC = None, simulator: bool = False): self.modes.append( Mode( mode_name=mode_name, resolution=resolution, simultaneous=simultaneous, simulator= simulator, exposure_time_calculator= exposure_time_calculator ) )
[docs] @dataclass class Mode(Simulator): mode_name: str resolution: int simultaneous: bool = None simulator: bool = False, exposure_time_calculator: None | etc.ETC = None pass
#%% List of instruments available #%%% CARMENES CARMENES = Spectrograph( 'CARMENES', resolution_mode= 'high' ) CARMENES._add_observing_mode( 'VIS', 94600, 'with NIR CARMENES mode' ) CARMENES._add_observing_mode( 'NIR', 80400, 'with VIS CARMENES mode' ) #%%% CORALIE CORALIE = Spectrograph( 'CORALIE', resolution_mode= 'high', ) CORALIE._add_observing_mode( 'HR', 50000, ) #%%% ESPRESSO, 1 UT ESPRESSO = Spectrograph( 'ESPRESSO', resolution_mode='high', ) ESPRESSO._add_observing_mode( 'HR', 134000, exposure_time_calculator= etc.ETC_ESPRESSO_1UT_HR() ) ESPRESSO._add_observing_mode( 'UHR', 190000 ) ESPRESSO_4UT = Spectrograph( 'ESPRESSO_4UT', resolution_mode='high' ) ESPRESSO_4UT._add_observing_mode( 'MR', 70000, exposure_time_calculator= etc.ETC_ESPRESSO_4UT() ) #%%% EXPRES EXPRES = Spectrograph( 'EXPRES', resolution_mode='high' ) EXPRES._add_observing_mode( 'HR', 137000, ) #%%% GIANO GIANO = Spectrograph( 'GIANO', resolution_mode='high' ) GIANO._add_observing_mode( 'HR', 50000, ) GIANO._add_observing_mode( 'LR', 25000, ) #%%% HARPS HARPS = Spectrograph( 'HARPS', resolution_mode='high' ) HARPS._add_observing_mode( 'HR', 115000, 'with NIRPS', ) #%%% HARPS-N HARPS_N = Spectrograph( 'HARPS-N', resolution_mode='high' ) HARPS_N._add_observing_mode( 'HR', 115000, 'with GIANO', ) #%%% HPF HPF = Spectrograph( 'HPF', resolution_mode= 'high' ) HPF._add_observing_mode( 'HR', 53000, ) #%%% MAROON-X MAROON_X = Spectrograph( 'MAROON-X', resolution_mode='high' ) MAROON_X._add_observing_mode( 'HR', 80000, ) MAROON_X._add_observing_mode( 'UHR', 100000, ) #%%% NEID NEID = Spectrograph( 'NEID', resolution_mode= 'high' ) NEID._add_observing_mode( 'HR', 110000, ) #%%% NIRPS NIRPS = Spectrograph( 'NIRPS', resolution_mode= 'high' ) NIRPS._add_observing_mode( 'HR', 100000, 'with HARPS', ) NIRPS._add_observing_mode( 'MR', 75000, 'with HARPS', ) #%%% SOPHIE SOPHIE = Spectrograph( 'SOPHIE', resolution_mode= 'high' ) SOPHIE._add_observing_mode( 'HR', 75000, ) SOPHIE._add_observing_mode( 'HE', 40000, ) #%%% SPIRou SPIROU = Spectrograph( 'SPIRou', resolution_mode= 'high' ) SPIROU._add_observing_mode( 'HR', 70000, ) #%%% UVES UVES = Spectrograph( 'UVES', resolution_mode= 'high' ) UVES._add_observing_mode( 'HR', np.mean([40000, 110000]), )