"""Data objects needed for Lezargus are stored here.
We load and make the objects from accompanying data files.
"""
import lezargus
from lezargus.data import _make
from lezargus.library import logging
# Globals are how this entire module works, and it is readable as compared to
# using the globals dictionary.
# ruff: noqa: PLW0603
# pylint: disable=global-variable-undefined
[docs]
def __initialize_data_all() -> None:
"""Initialize the all of the data objects.
We wrap the initialization of the data objects in a function so we can
handle it with a more fine grained approach. The use of the global keyword
enables the objects to be the global space of this module anyways.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# Loading the data in the proper order.
__initialize_data_constants()
__initialize_data_star_spectra()
__initialize_data_photometric_filters()
__initialize_data_atmosphere_generators()
__initialize_data_optic_efficiency_functions()
__initialize_data_dispersion_patterns()
[docs]
def __initialize_data_constants() -> None:
"""Initialize only the constant value data.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# Otherwise...
# Mirror solid angles.
global CONST_ENTRANCE_WINDOW_SOLID_ANGLE
CONST_ENTRANCE_WINDOW_SOLID_ANGLE = _make.make_constant(
key="CONST_ENTRANCE_WINDOW_SOLID_ANGLE",
)
global CONST_PRIMARY_MIRROR_SOLID_ANGLE
CONST_PRIMARY_MIRROR_SOLID_ANGLE = _make.make_constant(
key="CONST_PRIMARY_MIRROR_SOLID_ANGLE",
)
global CONST_SECONDARY_MIRROR_SOLID_ANGLE
CONST_SECONDARY_MIRROR_SOLID_ANGLE = _make.make_constant(
key="CONST_SECONDARY_MIRROR_SOLID_ANGLE",
)
# Pixel and slice sizes and widths.
global CONST_SPECTRE_SLICES
CONST_SPECTRE_SLICES = _make.make_constant(key="CONST_SPECTRE_SLICES")
global CONST_VISIBLE_DETECTOR_SIZE
CONST_VISIBLE_DETECTOR_SIZE = _make.make_constant(
key="CONST_VISIBLE_DETECTOR_SIZE",
)
global CONST_NEARIR_DETECTOR_SIZE
CONST_NEARIR_DETECTOR_SIZE = _make.make_constant(
key="CONST_NEARIR_DETECTOR_SIZE",
)
global CONST_MIDIR_DETECTOR_SIZE
CONST_MIDIR_DETECTOR_SIZE = _make.make_constant(
key="CONST_MIDIR_DETECTOR_SIZE",
)
global CONST_VISIBLE_PIXEL_SIZE
CONST_VISIBLE_PIXEL_SIZE = _make.make_constant(
key="CONST_VISIBLE_PIXEL_SIZE",
)
global CONST_NEARIR_PIXEL_SIZE
CONST_NEARIR_PIXEL_SIZE = _make.make_constant(key="CONST_NEARIR_PIXEL_SIZE")
global CONST_MIDIR_PIXEL_SIZE
CONST_MIDIR_PIXEL_SIZE = _make.make_constant(key="CONST_MIDIR_PIXEL_SIZE")
# Cosmic ray parameters.
global CONST_COSMIC_RAY_VALUE
CONST_COSMIC_RAY_VALUE = _make.make_constant(key="CONST_COSMIC_RAY_VALUE")
global CONST_COSMIC_RAY_RATE
CONST_COSMIC_RAY_RATE = _make.make_constant(key="CONST_COSMIC_RAY_RATE")
# Detector gain values.
global CONST_VISIBLE_DETECTOR_GAIN
CONST_VISIBLE_DETECTOR_GAIN = _make.make_constant(
key="CONST_VISIBLE_DETECTOR_GAIN",
)
global CONST_NEARIR_DETECTOR_GAIN
CONST_NEARIR_DETECTOR_GAIN = _make.make_constant(
key="CONST_NEARIR_DETECTOR_GAIN",
)
global CONST_MIDIR_DETECTOR_GAIN
CONST_MIDIR_DETECTOR_GAIN = _make.make_constant(
key="CONST_MIDIR_DETECTOR_GAIN",
)
# All done.
return
[docs]
def __initialize_data_star_spectra() -> None:
"""Initialize only the standard spectral data.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# Otherwise...
# Creating all of the standard (star) spectra objects.
global STAR_16CYGB
STAR_16CYGB = _make.make_standard_spectrum(
basename="star_spectra_16CygB.dat",
)
global STAR_109VIR
STAR_109VIR = _make.make_standard_spectrum(
basename="star_spectra_109Vir.dat",
)
global STAR_A0V
STAR_A0V = _make.make_standard_spectrum(basename="star_spectra_A0V.dat")
global STAR_SUN
STAR_SUN = _make.make_standard_spectrum(basename="star_spectra_Sun.dat")
global STAR_VEGA
STAR_VEGA = _make.make_standard_spectrum(basename="star_spectra_Vega.dat")
# All done.
return
[docs]
def __initialize_data_photometric_filters() -> None:
"""Initialize only the photometric filters.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# Otherwise...
# If the standard Vega spectrum does not exist, we cannot actually
# load the filters. The spectrum needs to be done first.
try:
if not isinstance(
STAR_A0V,
lezargus.library.container.LezargusSpectrum,
):
logging.critical(
critical_type=logging.DevelopmentError,
message="Standard A0V star is not a LezargusSpectrum.",
)
except NameError:
logging.critical(
critical_type=logging.DevelopmentError,
message=(
"Standard A0V spectrum data does not exist in data module."
" Cannot properly load photometric filters."
),
)
# Creating all of the photometric filter objects.
# Johnson U B V filters.
global FILTER_JOHNSON_U
FILTER_JOHNSON_U = _make.make_vega_photometric_filter(
basename="filter_Johnson_U.dat",
)
FILTER_JOHNSON_U.add_standard_star_spectrum(
spectrum=STAR_A0V,
magnitude=0,
magnitude_uncertainty=0,
)
global FILTER_JOHNSON_B
FILTER_JOHNSON_B = _make.make_vega_photometric_filter(
basename="filter_Johnson_B.dat",
)
FILTER_JOHNSON_B.add_standard_star_spectrum(
spectrum=STAR_A0V,
magnitude=0,
magnitude_uncertainty=0,
)
global FILTER_JOHNSON_V
FILTER_JOHNSON_V = _make.make_vega_photometric_filter(
basename="filter_Johnson_V.dat",
)
FILTER_JOHNSON_V.add_standard_star_spectrum(
spectrum=STAR_A0V,
magnitude=0,
magnitude_uncertainty=0,
)
# 2MASS J H Ks filters.
global FILTER_2MASS_J
FILTER_2MASS_J = _make.make_vega_photometric_filter(
basename="filter_2MASS_J.dat",
)
FILTER_2MASS_J.add_standard_star_spectrum(
spectrum=STAR_A0V,
magnitude=0,
magnitude_uncertainty=0,
)
global FILTER_2MASS_H
FILTER_2MASS_H = _make.make_vega_photometric_filter(
basename="filter_2MASS_H.dat",
)
FILTER_2MASS_H.add_standard_star_spectrum(
spectrum=STAR_A0V,
magnitude=0,
magnitude_uncertainty=0,
)
global FILTER_2MASS_KS
FILTER_2MASS_KS = _make.make_vega_photometric_filter(
basename="filter_2MASS_Ks.dat",
)
FILTER_2MASS_KS.add_standard_star_spectrum(
spectrum=STAR_A0V,
magnitude=0,
magnitude_uncertainty=0,
)
[docs]
def __initialize_data_atmosphere_generators() -> None:
"""Initialize only the atmospheric generators.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# Otherwise...
# Creating the atmospheric transmission and radiance generators.
global ATM_TRANS_GEN
ATM_TRANS_GEN = _make.make_atmosphere_transmission_generator(
basename="psg_telluric_transmission.dat",
)
global ATM_RADIANCE_GEN
ATM_RADIANCE_GEN = _make.make_atmosphere_radiance_generator(
basename="psg_telluric_radiance.dat",
)
[docs]
def __initialize_data_optic_efficiency_functions() -> None:
"""Initialize only the optic efficiency function spectrums.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# Otherwise...
# Creating the IRTF efficiency functions for the primary and secondary
# mirror.
global EFFICIENCY_IRTF_PRIMARY
EFFICIENCY_IRTF_PRIMARY = _make.make_optic_efficiency(
basename="efficiency_irtf_primary_mirror.dat",
)
global EFFICIENCY_IRTF_SECONDARY
EFFICIENCY_IRTF_SECONDARY = _make.make_optic_efficiency(
basename="efficiency_irtf_secondary_mirror.dat",
)
# Creating the SPECTRE entrance window efficiency.
global EFFICIENCY_SPECTRE_WINDOW
EFFICIENCY_SPECTRE_WINDOW = _make.make_optic_efficiency(
basename="efficiency_spectre_entrance_window.dat",
)
# Creating the SPECTRE collimator mirror efficiency.
global EFFICIENCY_SPECTRE_COLLIMATOR
EFFICIENCY_SPECTRE_COLLIMATOR = _make.make_optic_efficiency(
basename="efficiency_spectre_collimator_mirror.dat",
)
# Creating the SPECTRE camera mirror efficiency.
global EFFICIENCY_SPECTRE_CAMERA
EFFICIENCY_SPECTRE_CAMERA = _make.make_optic_efficiency(
basename="efficiency_spectre_camera_mirror.dat",
)
# Creating the SPECTRE IFU image slicer efficiency.
global EFFICIENCY_SPECTRE_IMAGE_SLICER
EFFICIENCY_SPECTRE_IMAGE_SLICER = _make.make_optic_efficiency(
basename="efficiency_spectre_image_slicer.dat",
)
# Creating the SPECTRE IFU pupil mirror efficiency.
global EFFICIENCY_SPECTRE_PUPIL_MIRROR
EFFICIENCY_SPECTRE_PUPIL_MIRROR = _make.make_optic_efficiency(
basename="efficiency_spectre_pupil_mirror.dat",
)
# Creating the SPECTRE dichroic efficiencies.
global EFFICIENCY_SPECTRE_DICHROIC_VISIBLE
EFFICIENCY_SPECTRE_DICHROIC_VISIBLE = _make.make_optic_efficiency(
basename="efficiency_spectre_dichroic_visible.dat",
)
global EFFICIENCY_SPECTRE_DICHROIC_NEARIR
EFFICIENCY_SPECTRE_DICHROIC_NEARIR = _make.make_optic_efficiency(
basename="efficiency_spectre_dichroic_nearir.dat",
)
global EFFICIENCY_SPECTRE_DICHROIC_MIDIR
EFFICIENCY_SPECTRE_DICHROIC_MIDIR = _make.make_optic_efficiency(
basename="efficiency_spectre_dichroic_midir.dat",
)
# Creating the SPECTRE relay mirror efficiencies.
global EFFICIENCY_SPECTRE_RELAY_VISIBLE
EFFICIENCY_SPECTRE_RELAY_VISIBLE = _make.make_optic_efficiency(
basename="efficiency_spectre_relay_mirror_visible.dat",
)
global EFFICIENCY_SPECTRE_RELAY_NEARIR
EFFICIENCY_SPECTRE_RELAY_NEARIR = _make.make_optic_efficiency(
basename="efficiency_spectre_relay_mirror_nearir.dat",
)
global EFFICIENCY_SPECTRE_RELAY_MIDIR
EFFICIENCY_SPECTRE_RELAY_MIDIR = _make.make_optic_efficiency(
basename="efficiency_spectre_relay_mirror_midir.dat",
)
# Creating the SPECTRE prism efficiencies.
global EFFICIENCY_SPECTRE_PRISM_BK7
EFFICIENCY_SPECTRE_PRISM_BK7 = _make.make_optic_efficiency(
basename="efficiency_spectre_prism_bk7.dat",
)
global EFFICIENCY_SPECTRE_PRISM_SILICA
EFFICIENCY_SPECTRE_PRISM_SILICA = _make.make_optic_efficiency(
basename="efficiency_spectre_prism_silica.dat",
)
global EFFICIENCY_SPECTRE_PRISM_ZNSE
EFFICIENCY_SPECTRE_PRISM_ZNSE = _make.make_optic_efficiency(
basename="efficiency_spectre_prism_znse.dat",
)
global EFFICIENCY_SPECTRE_PRISM_SAPPHIRE
EFFICIENCY_SPECTRE_PRISM_SAPPHIRE = _make.make_optic_efficiency(
basename="efficiency_spectre_prism_sapphire.dat",
)
# Creating the SPECTRE fold mirror efficiencies.
global EFFICIENCY_SPECTRE_FOLD_VISIBLE
EFFICIENCY_SPECTRE_FOLD_VISIBLE = _make.make_optic_efficiency(
basename="efficiency_spectre_fold_mirror_visible.dat",
)
global EFFICIENCY_SPECTRE_FOLD_NEARIR
EFFICIENCY_SPECTRE_FOLD_NEARIR = _make.make_optic_efficiency(
basename="efficiency_spectre_fold_mirror_nearir.dat",
)
global EFFICIENCY_SPECTRE_FOLD_MIDIR
EFFICIENCY_SPECTRE_FOLD_MIDIR = _make.make_optic_efficiency(
basename="efficiency_spectre_fold_mirror_midir.dat",
)
# Creating the SPECTRE detector quantum efficiencies.
global EFFICIENCY_SPECTRE_CCD_VISIBLE
EFFICIENCY_SPECTRE_CCD_VISIBLE = _make.make_optic_efficiency(
basename="efficiency_spectre_ccd_qe.dat",
)
global EFFICIENCY_SPECTRE_H2RG_NEARIR
EFFICIENCY_SPECTRE_H2RG_NEARIR = _make.make_optic_efficiency(
basename="efficiency_spectre_h2rg25_qe.dat",
)
global EFFICIENCY_SPECTRE_H2RG_MIDIR
EFFICIENCY_SPECTRE_H2RG_MIDIR = _make.make_optic_efficiency(
basename="efficiency_spectre_h2rg40_qe.dat",
)
# All done
return
[docs]
def __initialize_data_dispersion_patterns() -> None:
"""Initialize only the spectral/detector dispersion patterns.
Parameters
----------
None
Returns
-------
None
"""
# If the initialization of the data is to be skipped.
if lezargus.config.INTERNAL_DEBUG_SKIP_LOADING_DATA_FILES:
return
# The SPECTRE pattern.
global DISPERSION_SPECTRE
DISPERSION_SPECTRE = _make.make_spectre_dispersion_pattern(
basename="spectre_slice_dispersion.dat",
)
__initialize_data_all()