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.AHotOpticalComponent import *
|
||||||
from esbo_etc.classes.optical_component.Filter import *
|
from esbo_etc.classes.optical_component.Filter import *
|
||||||
from esbo_etc.classes.optical_component.Lens 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