Allow single value for transmittance / reflectivity and use 1-value as emissivity

This commit is contained in:
Lukas Klass 2020-09-30 21:22:55 +02:00
parent 047e54bd84
commit 5c31dbf87c
4 changed files with 40 additions and 11 deletions

View File

@ -11,7 +11,7 @@ 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, emissivity: Union[str, float] = 1, def __init__(self, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = None,
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): obstructor_emissivity: float = 1):
""" """
@ -37,7 +37,12 @@ class BeamSplitter(AHotOpticalComponent):
obstructor_emissivity : float obstructor_emissivity : float
Emissivity of the obstructing component. Emissivity of the obstructing component.
""" """
self._transmittance = SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled) try:
self._transmittance = float(transmittance) * u.dimensionless_unscaled
except ValueError:
self._transmittance = SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled)
if emissivity is None:
emissivity = -1 * self._transmittance + 1.0
super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity) super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity)
def _propagate(self, rad: SpectralQty) -> SpectralQty: def _propagate(self, rad: SpectralQty) -> SpectralQty:
@ -73,7 +78,9 @@ class BeamSplitter(AHotOpticalComponent):
""" """
mes = conf.check_file("transmittance") mes = conf.check_file("transmittance")
if mes is not None: if mes is not None:
return mes mes = conf.check_float("transmittance")
if mes is not None:
return mes
if hasattr(conf, "emissivity"): if hasattr(conf, "emissivity"):
mes = conf.check_file("emissivity") mes = conf.check_file("emissivity")
if mes is not None: if mes is not None:

View File

@ -104,7 +104,7 @@ class Filter(AHotOpticalComponent):
obstructor_temp, obstructor_emissivity) obstructor_temp, obstructor_emissivity)
# @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(self, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = 1, def _fromFile(self, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = None,
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) -> dict: obstructor_emissivity: float = 1) -> dict:
""" """
@ -136,7 +136,13 @@ class Filter(AHotOpticalComponent):
args : dict args : dict
The arguments for the class instantiation. The arguments for the class instantiation.
""" """
return {"parent": parent, "transmittance": SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled), try:
_transmittance = float(transmittance) * u.dimensionless_unscaled
except ValueError:
_transmittance = SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled)
if emissivity is None:
emissivity = -1 * _transmittance + 1.0
return {"parent": parent, "transmittance": _transmittance,
"emissivity": emissivity, "temp": temp, "obstruction": obstruction, "obstructor_temp": obstructor_temp, "emissivity": emissivity, "temp": temp, "obstruction": obstruction, "obstructor_temp": obstructor_temp,
"obstructor_emissivity": obstructor_emissivity} "obstructor_emissivity": obstructor_emissivity}
@ -235,6 +241,8 @@ class Filter(AHotOpticalComponent):
mes = conf.check_selection("band", ["U", "B", "V", "R", "I", "J", "H", "K", "L", "M", "N"]) mes = conf.check_selection("band", ["U", "B", "V", "R", "I", "J", "H", "K", "L", "M", "N"])
elif hasattr(conf, "transmittance"): elif hasattr(conf, "transmittance"):
mes = conf.check_file("transmittance") mes = conf.check_file("transmittance")
if mes is not None:
mes = conf.check_float("transmittance")
elif hasattr(conf, "start") and hasattr(conf, "end"): elif hasattr(conf, "start") and hasattr(conf, "end"):
mes = conf.check_quantity("start", u.m) mes = conf.check_quantity("start", u.m)
if mes is not None: if mes is not None:

View File

@ -11,7 +11,7 @@ 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, emissivity: Union[str, float] = 1, def __init__(self, parent: IRadiant, transmittance: str, emissivity: Union[str, float] = None,
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): obstructor_emissivity: float = 1):
""" """
@ -37,7 +37,12 @@ class Lens(AHotOpticalComponent):
obstructor_emissivity : float obstructor_emissivity : float
Emissivity of the obstructing component. Emissivity of the obstructing component.
""" """
self._transmittance = SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled) try:
self._transmittance = float(transmittance) * u.dimensionless_unscaled
except ValueError:
self._transmittance = SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled)
if emissivity is None:
emissivity = -1 * self._transmittance + 1.0
super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity) super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity)
def _propagate(self, rad: SpectralQty) -> SpectralQty: def _propagate(self, rad: SpectralQty) -> SpectralQty:
@ -73,7 +78,9 @@ class Lens(AHotOpticalComponent):
""" """
mes = conf.check_file("transmittance") mes = conf.check_file("transmittance")
if mes is not None: if mes is not None:
return mes mes = conf.check_float("transmittance")
if mes is not None:
return mes
if hasattr(conf, "emissivity"): if hasattr(conf, "emissivity"):
mes = conf.check_file("emissivity") mes = conf.check_file("emissivity")
if mes is not None: if mes is not None:

View File

@ -11,7 +11,7 @@ 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, emissivity: Union[str, float] = 1, def __init__(self, parent: IRadiant, reflectance: str, emissivity: Union[str, float] = None,
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): obstructor_emissivity: float = 1):
""" """
@ -37,7 +37,12 @@ class Mirror(AHotOpticalComponent):
obstructor_emissivity : float obstructor_emissivity : float
Emissivity of the obstructing component. Emissivity of the obstructing component.
""" """
self._reflectance = SpectralQty.fromFile(reflectance, u.nm, u.dimensionless_unscaled) try:
self._reflectance = float(reflectance) * u.dimensionless_unscaled
except ValueError:
self._reflectance = SpectralQty.fromFile(reflectance, u.nm, u.dimensionless_unscaled)
if emissivity is None:
emissivity = -1 * self._reflectance + 1.0
super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity) super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity)
def _propagate(self, rad: SpectralQty) -> SpectralQty: def _propagate(self, rad: SpectralQty) -> SpectralQty:
@ -73,7 +78,9 @@ class Mirror(AHotOpticalComponent):
""" """
mes = conf.check_file("reflectance") mes = conf.check_file("reflectance")
if mes is not None: if mes is not None:
return mes mes = conf.check_float("reflectance")
if mes is not None:
return mes
if hasattr(conf, "emissivity"): if hasattr(conf, "emissivity"):
mes = conf.check_file("emissivity") mes = conf.check_file("emissivity")
if mes is not None: if mes is not None: