Configuration checks added
This commit is contained in:
parent
fb2238b0b7
commit
35488b4fb5
@ -5,6 +5,7 @@ from abc import abstractmethod
|
|||||||
import astropy.units as u
|
import astropy.units as u
|
||||||
from astropy.modeling.models import BlackBody
|
from astropy.modeling.models import BlackBody
|
||||||
from typing import Union, Callable
|
from typing import Union, Callable
|
||||||
|
from ..Entry import Entry
|
||||||
|
|
||||||
|
|
||||||
class AHotOpticalComponent(AOpticalComponent):
|
class AHotOpticalComponent(AOpticalComponent):
|
||||||
@ -90,3 +91,21 @@ class AHotOpticalComponent(AOpticalComponent):
|
|||||||
"""
|
"""
|
||||||
bb = BlackBody(temperature=temp, scale=em * u.W / (u.m ** 2 * u.nm * u.sr))
|
bb = BlackBody(temperature=temp, scale=em * u.W / (u.m ** 2 * u.nm * u.sr))
|
||||||
return lambda wl: bb(wl)
|
return lambda wl: bb(wl)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@abstractmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
@ -6,6 +6,7 @@ import astropy.units as u
|
|||||||
from astropy.modeling.models import BlackBody
|
from astropy.modeling.models import BlackBody
|
||||||
from typing import Union, Callable, Tuple
|
from typing import Union, Callable, Tuple
|
||||||
from logging import info, debug
|
from logging import info, debug
|
||||||
|
from ..Entry import Entry
|
||||||
|
|
||||||
|
|
||||||
class AOpticalComponent(IRadiant):
|
class AOpticalComponent(IRadiant):
|
||||||
@ -122,3 +123,21 @@ class AOpticalComponent(IRadiant):
|
|||||||
return self.__noise
|
return self.__noise
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
error("noise not given. Method ownNoise() needs to be implemented.")
|
error("noise not given. Method ownNoise() needs to be implemented.")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@abstractmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
from .AOpticalComponent import AOpticalComponent
|
from .AOpticalComponent import AOpticalComponent
|
||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
|
from ..Entry import Entry
|
||||||
import astropy.units as u
|
import astropy.units as u
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
class Atmosphere(AOpticalComponent):
|
class Atmosphere(AOpticalComponent):
|
||||||
@ -37,3 +39,26 @@ class Atmosphere(AOpticalComponent):
|
|||||||
qty_unit_default=u.W / (u.m ** 2 * u.nm * u.sr))
|
qty_unit_default=u.W / (u.m ** 2 * u.nm * u.sr))
|
||||||
# Initialize the super class
|
# Initialize the super class
|
||||||
super().__init__(parent, transmittance_sqty, emission_sqty)
|
super().__init__(parent, transmittance_sqty, emission_sqty)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_file("transmittance")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "emission"):
|
||||||
|
mes = conf.check_file("emission")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from .AHotOpticalComponent import AHotOpticalComponent
|
from .AHotOpticalComponent import AHotOpticalComponent
|
||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
|
from ..Entry import Entry
|
||||||
from astropy import units as u
|
from astropy import units as u
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
@ -10,9 +11,9 @@ class BeamSplitter(AHotOpticalComponent):
|
|||||||
A class to model the optical characteristics of a beam splitter.
|
A class to model the optical characteristics of a beam splitter.
|
||||||
"""
|
"""
|
||||||
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def __init__(self, parent: IRadiant, transmittance: str,
|
def __init__(self, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = 1,
|
||||||
emissivity: Union[int, float, str] = 1, temp: u.Quantity = 0 * u.K,
|
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
||||||
obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1):
|
obstructor_emissivity: float = 1):
|
||||||
"""
|
"""
|
||||||
Instantiate a new beam splitter model
|
Instantiate a new beam splitter model
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ class BeamSplitter(AHotOpticalComponent):
|
|||||||
The parent element of the optical component from which the electromagnetic radiation is received.
|
The parent element of the optical component from which the electromagnetic radiation is received.
|
||||||
transmittance : str
|
transmittance : str
|
||||||
The spectral transmittance coefficients of the filter.
|
The spectral transmittance coefficients of the filter.
|
||||||
emissivity : Union[int, float, str]
|
emissivity : Union[str, u.Quantity]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -54,3 +55,44 @@ class BeamSplitter(AHotOpticalComponent):
|
|||||||
Manipulated incoming radiation
|
Manipulated incoming radiation
|
||||||
"""
|
"""
|
||||||
return rad * self._transmittance
|
return rad * self._transmittance
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_file("transmittance")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "emissivity"):
|
||||||
|
mes = conf.check_file("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
mes = conf.check_float("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "temp"):
|
||||||
|
mes = conf.check_quantity("temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstruction"):
|
||||||
|
mes = conf.check_float("obstruction")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_temp"):
|
||||||
|
mes = conf.check_quantity("obstructor_temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_emissivity"):
|
||||||
|
mes = conf.check_float("obstructor_emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -2,6 +2,7 @@ from .AHotOpticalComponent import AHotOpticalComponent
|
|||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
from ...lib.helpers import error
|
from ...lib.helpers import error
|
||||||
|
from ..Entry import Entry
|
||||||
from astropy import units as u
|
from astropy import units as u
|
||||||
from typing import Union, Callable
|
from typing import Union, Callable
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -22,8 +23,8 @@ class Filter(AHotOpticalComponent):
|
|||||||
|
|
||||||
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def __init__(self, parent: IRadiant, transmittance: Union[SpectralQty, Callable[[u.Quantity], u.Quantity]],
|
def __init__(self, parent: IRadiant, transmittance: Union[SpectralQty, Callable[[u.Quantity], u.Quantity]],
|
||||||
emissivity: Union[int, float, str] = 1, temp: u.Quantity = 0 * u.K,
|
emissivity: Union[str, float] = 1, temp: u.Quantity = 0 * u.K, obstruction: float = 0,
|
||||||
obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1):
|
obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1):
|
||||||
"""
|
"""
|
||||||
Instantiate a new filter model
|
Instantiate a new filter model
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ class Filter(AHotOpticalComponent):
|
|||||||
The parent element of the optical component from which the electromagnetic radiation is received.
|
The parent element of the optical component from which the electromagnetic radiation is received.
|
||||||
transmittance : Union[SpectralQty, Callable]
|
transmittance : Union[SpectralQty, Callable]
|
||||||
The spectral transmittance coefficients of the filter.
|
The spectral transmittance coefficients of the filter.
|
||||||
emissivity : Union[str, int, float]
|
emissivity : Union[str, float]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -52,8 +53,8 @@ class Filter(AHotOpticalComponent):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
# @u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
# @u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def fromBand(cls, parent: IRadiant, band: str, emissivity: Union[str, int, float] = 1,
|
def fromBand(cls, parent: IRadiant, band: str, emissivity: Union[str, float] = 1, temp: u.Quantity = 0 * u.K,
|
||||||
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
||||||
obstructor_emissivity: float = 1) -> "Filter":
|
obstructor_emissivity: float = 1) -> "Filter":
|
||||||
"""
|
"""
|
||||||
Instantiate a new filter model from a spectral band. The filter will be modelled as bandpass filter of
|
Instantiate a new filter model from a spectral band. The filter will be modelled as bandpass filter of
|
||||||
@ -65,7 +66,7 @@ class Filter(AHotOpticalComponent):
|
|||||||
The parent element of the optical component from which the electromagnetic radiation is received.
|
The parent element of the optical component from which the electromagnetic radiation is received.
|
||||||
band : str
|
band : str
|
||||||
The spectral band of the filter. Can be one of [U, B, V, R, I, J, H, K].
|
The spectral band of the filter. Can be one of [U, B, V, R, I, J, H, K].
|
||||||
emissivity : Union[str, int, float]
|
emissivity : Union[str, float]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -92,7 +93,7 @@ class Filter(AHotOpticalComponent):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
# @u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
# @u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def fromFile(cls, parent: IRadiant, transmittance: str, emissivity: Union[str, int, float] = 1,
|
def fromFile(cls, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = 1,
|
||||||
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
||||||
obstructor_emissivity: float = 1) -> "Filter":
|
obstructor_emissivity: float = 1) -> "Filter":
|
||||||
"""
|
"""
|
||||||
@ -105,7 +106,7 @@ class Filter(AHotOpticalComponent):
|
|||||||
transmittance : str
|
transmittance : str
|
||||||
Path to the file containing the spectral transmittance-coefficients of the filter element.
|
Path to the file containing the spectral transmittance-coefficients of the filter element.
|
||||||
The format of the file will be guessed by `astropy.io.ascii.read()`.
|
The format of the file will be guessed by `astropy.io.ascii.read()`.
|
||||||
emissivity : Union[str, int, float]
|
emissivity : Union[str, float]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -129,9 +130,9 @@ class Filter(AHotOpticalComponent):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
# @u.quantity_input(start="length", end="length", temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
# @u.quantity_input(start="length", end="length", temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def fromRange(cls, parent: IRadiant, start: u.Quantity, end: u.Quantity,
|
def fromRange(cls, parent: IRadiant, start: u.Quantity, end: u.Quantity, emissivity: Union[str, float] = 1,
|
||||||
emissivity: Union[str, int, float] = 1, temp: u.Quantity = 0 * u.K, obstruction: float = 0,
|
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
||||||
obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1) -> "Filter":
|
obstructor_emissivity: float = 1) -> "Filter":
|
||||||
"""
|
"""
|
||||||
Instantiate a new filter model from a spectral range. The filter will be modelled as bandpass filter of
|
Instantiate a new filter model from a spectral range. The filter will be modelled as bandpass filter of
|
||||||
infinite order and therefore similar to a hat-function.
|
infinite order and therefore similar to a hat-function.
|
||||||
@ -144,7 +145,7 @@ class Filter(AHotOpticalComponent):
|
|||||||
Start wavelength of the pass-band
|
Start wavelength of the pass-band
|
||||||
end : length-quantity
|
end : length-quantity
|
||||||
End wavelength of the pass-band
|
End wavelength of the pass-band
|
||||||
emissivity : Union[str, int, float]
|
emissivity : Union[str, float]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -202,3 +203,54 @@ class Filter(AHotOpticalComponent):
|
|||||||
"""
|
"""
|
||||||
return lambda wl: np.logical_and(np.greater_equal(wl, start), np.greater_equal(end, wl)).astype(int) *\
|
return lambda wl: np.logical_and(np.greater_equal(wl, start), np.greater_equal(end, wl)).astype(int) *\
|
||||||
u.dimensionless_unscaled
|
u.dimensionless_unscaled
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
if hasattr(conf, "band"):
|
||||||
|
mes = conf.check_selection("band", ["U", "B", "V", "R", "I", "J", "H", "K", "L", "M", "N"])
|
||||||
|
elif hasattr(conf, "transmittance"):
|
||||||
|
mes = conf.check_file("transmittance")
|
||||||
|
elif hasattr(conf, "start") and hasattr(conf, "end"):
|
||||||
|
mes = conf.check_quantity("start", u.m)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
mes = conf.check_quantity("end", u.m)
|
||||||
|
else:
|
||||||
|
mes = "Expected one of 'band' / 'transmittance' / 'start' & 'end'."
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "emissivity"):
|
||||||
|
mes = conf.check_file("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
mes = conf.check_float("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "temp"):
|
||||||
|
mes = conf.check_quantity("temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstruction"):
|
||||||
|
mes = conf.check_float("obstruction")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_temp"):
|
||||||
|
mes = conf.check_quantity("obstructor_temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_emissivity"):
|
||||||
|
mes = conf.check_float("obstructor_emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from .AHotOpticalComponent import AHotOpticalComponent
|
from .AHotOpticalComponent import AHotOpticalComponent
|
||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
|
from ..Entry import Entry
|
||||||
from astropy import units as u
|
from astropy import units as u
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
@ -10,9 +11,9 @@ class Lens(AHotOpticalComponent):
|
|||||||
A class to model the optical characteristics of a lens.
|
A class to model the optical characteristics of a lens.
|
||||||
"""
|
"""
|
||||||
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def __init__(self, parent: IRadiant, transmittance: str,
|
def __init__(self, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = 1,
|
||||||
emissivity: Union[int, float, str] = 1, temp: u.Quantity = 0 * u.K,
|
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
||||||
obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1):
|
obstructor_emissivity: float = 1):
|
||||||
"""
|
"""
|
||||||
Instantiate a new lens model
|
Instantiate a new lens model
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ class Lens(AHotOpticalComponent):
|
|||||||
The parent element of the optical component from which the electromagnetic radiation is received.
|
The parent element of the optical component from which the electromagnetic radiation is received.
|
||||||
transmittance : str
|
transmittance : str
|
||||||
The spectral transmittance coefficients of the filter.
|
The spectral transmittance coefficients of the filter.
|
||||||
emissivity : Union[int, float, str]
|
emissivity : Union[str, float]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -54,3 +55,44 @@ class Lens(AHotOpticalComponent):
|
|||||||
Manipulated incoming radiation
|
Manipulated incoming radiation
|
||||||
"""
|
"""
|
||||||
return rad * self._transmittance
|
return rad * self._transmittance
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_file("transmittance")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "emissivity"):
|
||||||
|
mes = conf.check_file("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
mes = conf.check_float("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "temp"):
|
||||||
|
mes = conf.check_quantity("temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstruction"):
|
||||||
|
mes = conf.check_float("obstruction")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_temp"):
|
||||||
|
mes = conf.check_quantity("obstructor_temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_emissivity"):
|
||||||
|
mes = conf.check_float("obstructor_emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from .AHotOpticalComponent import AHotOpticalComponent
|
from .AHotOpticalComponent import AHotOpticalComponent
|
||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
|
from ..Entry import Entry
|
||||||
from astropy import units as u
|
from astropy import units as u
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
@ -10,9 +11,9 @@ class Mirror(AHotOpticalComponent):
|
|||||||
A class to model the optical characteristics of a mirror.
|
A class to model the optical characteristics of a mirror.
|
||||||
"""
|
"""
|
||||||
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
@u.quantity_input(temp=[u.Kelvin, u.Celsius], obstructor_temp=[u.Kelvin, u.Celsius])
|
||||||
def __init__(self, parent: IRadiant, reflectance: str,
|
def __init__(self, parent: IRadiant, reflectance: str, emissivity: Union[str, float] = 1,
|
||||||
emissivity: Union[int, float, str] = 1, temp: u.Quantity = 0 * u.K,
|
temp: u.Quantity = 0 * u.K, obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K,
|
||||||
obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1):
|
obstructor_emissivity: float = 1):
|
||||||
"""
|
"""
|
||||||
Instantiate a new mirror model
|
Instantiate a new mirror model
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ class Mirror(AHotOpticalComponent):
|
|||||||
The parent element of the optical component from which the electromagnetic radiation is received.
|
The parent element of the optical component from which the electromagnetic radiation is received.
|
||||||
reflectance : str
|
reflectance : str
|
||||||
The spectral transmittance coefficients of the filter.
|
The spectral transmittance coefficients of the filter.
|
||||||
emissivity : Union[int, float, str]
|
emissivity : Union[str, float]
|
||||||
The spectral emissivity coefficient for the optical surface.
|
The spectral emissivity coefficient for the optical surface.
|
||||||
temp: Quantity in Kelvin / Celsius
|
temp: Quantity in Kelvin / Celsius
|
||||||
Temperature of the optical component
|
Temperature of the optical component
|
||||||
@ -54,3 +55,44 @@ class Mirror(AHotOpticalComponent):
|
|||||||
Manipulated incoming radiation
|
Manipulated incoming radiation
|
||||||
"""
|
"""
|
||||||
return rad * self._reflectance
|
return rad * self._reflectance
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_file("reflectance")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "emissivity"):
|
||||||
|
mes = conf.check_file("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
mes = conf.check_float("emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "temp"):
|
||||||
|
mes = conf.check_quantity("temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstruction"):
|
||||||
|
mes = conf.check_float("obstruction")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_temp"):
|
||||||
|
mes = conf.check_quantity("obstructor_temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
if hasattr(conf, "obstructor_emissivity"):
|
||||||
|
mes = conf.check_float("obstructor_emissivity")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
from .AOpticalComponent import AOpticalComponent
|
from .AOpticalComponent import AOpticalComponent
|
||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
|
from ..Entry import Entry
|
||||||
import astropy.units as u
|
import astropy.units as u
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
class StrayLight(AOpticalComponent):
|
class StrayLight(AOpticalComponent):
|
||||||
@ -27,3 +29,22 @@ class StrayLight(AOpticalComponent):
|
|||||||
qty_unit_default=u.W / (u.m ** 2 * u.nm * u.sr))
|
qty_unit_default=u.W / (u.m ** 2 * u.nm * u.sr))
|
||||||
# Initialize the super class
|
# Initialize the super class
|
||||||
super().__init__(parent, 1.0, emission_sqty)
|
super().__init__(parent, 1.0, emission_sqty)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_file("emission")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from ..IRadiant import IRadiant
|
from ..IRadiant import IRadiant
|
||||||
import astropy.units as u
|
import astropy.units as u
|
||||||
from abc import abstractmethod
|
from abc import abstractmethod
|
||||||
|
from ..Entry import Entry
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
class ASensor:
|
class ASensor:
|
||||||
@ -52,3 +54,20 @@ class ASensor:
|
|||||||
The necessary exposure time in seconds.
|
The necessary exposure time in seconds.
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was succesful.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
@ -5,6 +5,7 @@ import astropy.units as u
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from logging import info, debug
|
from logging import info, debug
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from ..Entry import Entry
|
||||||
|
|
||||||
|
|
||||||
class ATarget(IRadiant):
|
class ATarget(IRadiant):
|
||||||
@ -59,3 +60,21 @@ class ATarget(IRadiant):
|
|||||||
info("Calculating Signal for class '" + self.__class__.__name__ + "'.")
|
info("Calculating Signal for class '" + self.__class__.__name__ + "'.")
|
||||||
debug(self.__sfd)
|
debug(self.__sfd)
|
||||||
return self.__sfd, self.__size
|
return self.__sfd, self.__size
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@abstractmethod
|
||||||
|
def check_config(conf: Entry) -> bool:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
@ -3,6 +3,8 @@ from ..SpectralQty import SpectralQty
|
|||||||
import astropy.units as u
|
import astropy.units as u
|
||||||
from astropy.modeling.models import BlackBody
|
from astropy.modeling.models import BlackBody
|
||||||
from ...lib.helpers import error
|
from ...lib.helpers import error
|
||||||
|
from ..Entry import Entry
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
class BlackBodyTarget(ATarget):
|
class BlackBodyTarget(ATarget):
|
||||||
@ -44,16 +46,44 @@ class BlackBodyTarget(ATarget):
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
"""
|
"""
|
||||||
if band not in self._band.keys():
|
if band.upper() not in self._band.keys():
|
||||||
error("Band has to be one of '[" + ", ".join(list(self._band.keys())) + "]'")
|
error("Band has to be one of '[" + ", ".join(list(self._band.keys())) + "]'")
|
||||||
# Create blackbody model with given temperature
|
# Create blackbody model with given temperature
|
||||||
bb = BlackBody(temperature=temp, scale=1 * u.W / (u.m ** 2 * u.nm * u.sr))
|
bb = BlackBody(temperature=temp, scale=1 * u.W / (u.m ** 2 * u.nm * u.sr))
|
||||||
|
|
||||||
# Calculate the correction factor for a star of 0th magnitude using the spectral flux density
|
# Calculate the correction factor for a star of 0th magnitude using the spectral flux density
|
||||||
# for the central wavelength of the given band
|
# for the central wavelength of the given band
|
||||||
factor = self._band[band]["sfd"] / (bb(self._band[band]["wl"]) * u.sr) * u.sr
|
factor = self._band[band.upper()]["sfd"] / (bb(self._band[band.upper()]["wl"]) * u.sr) * u.sr
|
||||||
# Calculate spectral flux density for the given wavelengths and scale it for a star of the given magnitude
|
# Calculate spectral flux density for the given wavelengths and scale it for a star of the given magnitude
|
||||||
sfd = bb(wl_bins) * factor * 10 ** (- 2 / 5 * mag / u.mag)
|
sfd = bb(wl_bins) * factor * 10 ** (- 2 / 5 * mag / u.mag)
|
||||||
|
|
||||||
# Initialize super class
|
# Initialize super class
|
||||||
super().__init__(SpectralQty(wl_bins, sfd), wl_bins, size)
|
super().__init__(SpectralQty(wl_bins, sfd), wl_bins, size)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_quantity("temp", u.K)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
mes = conf.check_quantity("mag", u.mag)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
mes = conf.check_selection("band", ["U", "B", "V", "R", "I", "J", "H", "K", "L", "M", "N"])
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
mes = conf.check_selection("size", ["point", "extended"])
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
from ..target.ATarget import ATarget
|
from ..target.ATarget import ATarget
|
||||||
from ..SpectralQty import SpectralQty
|
from ..SpectralQty import SpectralQty
|
||||||
import astropy.units as u
|
import astropy.units as u
|
||||||
|
from ..Entry import Entry
|
||||||
|
from typing import Union
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
class FileTarget(ATarget):
|
class FileTarget(ATarget):
|
||||||
@ -29,3 +32,28 @@ class FileTarget(ATarget):
|
|||||||
sfd = SpectralQty.fromFile(file, u.nm, u.W / (u.m ** 2 * u.nm))
|
sfd = SpectralQty.fromFile(file, u.nm, u.W / (u.m ** 2 * u.nm))
|
||||||
# Initialize the super class
|
# Initialize the super class
|
||||||
super().__init__(sfd, wl_bins, size)
|
super().__init__(sfd, wl_bins, size)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_config(conf: Entry) -> Union[None, str]:
|
||||||
|
"""
|
||||||
|
Check the configuration for this class
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
conf : Entry
|
||||||
|
The configuration entry to be checked.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
mes : Union[None, str]
|
||||||
|
The error message of the check. This will be None if the check was successful.
|
||||||
|
"""
|
||||||
|
mes = conf.check_file("file")
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
mes = conf.check_quantity("wl_bins", u.m)
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
mes = conf.check_selection("size", ["point", "extended"])
|
||||||
|
if mes is not None:
|
||||||
|
return mes
|
||||||
|
Loading…
Reference in New Issue
Block a user