Beam splitter added
This commit is contained in:
parent
8e10a3dcfe
commit
434f1737e0
56
esbo_etc/classes/optical_component/BeamSplitter.py
Normal file
56
esbo_etc/classes/optical_component/BeamSplitter.py
Normal file
@ -0,0 +1,56 @@
|
||||
from .AHotOpticalComponent import AHotOpticalComponent
|
||||
from ..SpectralQty import SpectralQty
|
||||
from ..ITransmissive import ITransmissive
|
||||
from astropy import units as u
|
||||
from typing import Union
|
||||
|
||||
|
||||
class BeamSplitter(AHotOpticalComponent):
|
||||
"""
|
||||
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])
|
||||
def __init__(self, parent: ITransmissive, transmittance: str,
|
||||
emissivity: Union[int, float, str] = 1, temp: u.Quantity = 0 * u.K,
|
||||
obstruction: float = 0, obstructor_temp: u.Quantity = 0 * u.K, obstructor_emissivity: float = 1):
|
||||
"""
|
||||
Instantiate a new beam splitter model
|
||||
|
||||
Parameters
|
||||
----------
|
||||
parent : ITransmissive
|
||||
The parent element of the optical component from which the electromagnetic radiation is received.
|
||||
transmittance : str
|
||||
The spectral transmittance coefficients of the filter.
|
||||
emissivity : Union[int, float, str]
|
||||
The spectral emissivity coefficient for the optical surface.
|
||||
temp: Quantity in Kelvin / Celsius
|
||||
Temperature of the optical component
|
||||
obstruction : float
|
||||
The additional obstruction factor of the optical component. 0 means the component is not obstructed, 1
|
||||
denotes a completely obstructed component with therefore no incoming flux. It is important to note, that
|
||||
the obstruction factor reflects the obstruction of the optical component additionally to the obstruction
|
||||
factors of the prior elements in the beam.
|
||||
obstructor_temp : Quantity in Kelvin / Celsius
|
||||
Temperature of the obstructing component.
|
||||
obstructor_emissivity : float
|
||||
Emissivity of the obstructing component.
|
||||
"""
|
||||
self._transmittance = SpectralQty.fromFile(transmittance, u.nm, u.dimensionless_unscaled)
|
||||
super().__init__(parent, emissivity, temp, obstruction, obstructor_temp, obstructor_emissivity)
|
||||
|
||||
def propagate(self, sqty: SpectralQty) -> SpectralQty:
|
||||
"""
|
||||
Propagate incoming radiation through the optical component
|
||||
|
||||
Parameters
|
||||
----------
|
||||
sqty : SpectralQty
|
||||
The incoming radiation
|
||||
|
||||
Returns
|
||||
-------
|
||||
sqty : SpectralQty
|
||||
Manipulated incoming radiation
|
||||
"""
|
||||
return sqty * self._transmittance
|
@ -4,3 +4,4 @@ from esbo_etc.classes.optical_component.StrayLight import *
|
||||
from esbo_etc.classes.optical_component.AHotOpticalComponent import *
|
||||
from esbo_etc.classes.optical_component.Filter import *
|
||||
from esbo_etc.classes.optical_component.Lens import *
|
||||
from esbo_etc.classes.optical_component.BeamSplitter import *
|
||||
|
21
tests/test_BeamSplitter.py
Normal file
21
tests/test_BeamSplitter.py
Normal file
@ -0,0 +1,21 @@
|
||||
from unittest import TestCase
|
||||
from esbo_etc.classes.optical_component.BeamSplitter import BeamSplitter
|
||||
from esbo_etc.classes.SpectralQty import SpectralQty
|
||||
from esbo_etc.classes.target.FileTarget import FileTarget
|
||||
import astropy.units as u
|
||||
import numpy as np
|
||||
|
||||
|
||||
class TestBeamSplitter(TestCase):
|
||||
wl = np.arange(201, 205, 1) << u.nm
|
||||
|
||||
def setUp(self):
|
||||
self.target = FileTarget("data/target/target_demo_1.csv")
|
||||
self.splitter = BeamSplitter(self.target, "data/lens/lens_transmittance.csv", 0.5, temp=300 * u.K)
|
||||
|
||||
def test___init__(self):
|
||||
self.assertEqual(self.splitter.calcNoise(),
|
||||
SpectralQty(self.wl, [4.31413931e-96, 1.37122214e-95, 4.30844544e-95, 1.33846280e-94] << u.W /
|
||||
(u.m ** 2 * u.nm * u.sr)))
|
||||
self.assertEqual(self.splitter.calcSignal(),
|
||||
SpectralQty(self.wl, [1.20e-15, 1.30e-15, 1.40e-15, 1.35e-15] << u.W / (u.m ** 2 * u.nm)))
|
Loading…
x
Reference in New Issue
Block a user