deep_causality_physics/photonics/
wrappers.rs1use crate::photonics::quantities::{
7 AbcdMatrix, ComplexBeamParameter, JonesVector, OpticalPower, RayAngle, RayHeight, StokesVector,
8 Wavelength,
9};
10use crate::{IndexOfRefraction, Length, Ratio};
11use deep_causality_core::{CausalityError, PropagatingEffect};
12use deep_causality_num::Complex;
13use deep_causality_tensor::CausalTensor;
14
15use crate::photonics::{beam, diffraction, polarization, ray};
17
18pub fn ray_transfer(
23 m: &AbcdMatrix,
24 h: RayHeight,
25 a: RayAngle,
26) -> PropagatingEffect<(RayHeight, RayAngle)> {
27 match ray::ray_transfer_kernel(m, h, a) {
28 Ok(res) => PropagatingEffect::pure(res),
29 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
30 }
31}
32
33pub fn snells_law(
34 n1: IndexOfRefraction,
35 n2: IndexOfRefraction,
36 theta1: RayAngle,
37) -> PropagatingEffect<RayAngle> {
38 match ray::snells_law_kernel(n1, n2, theta1) {
39 Ok(theta2) => PropagatingEffect::pure(theta2),
40 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
41 }
42}
43
44pub fn lens_maker(n: IndexOfRefraction, r1: f64, r2: f64) -> PropagatingEffect<OpticalPower> {
45 match ray::lens_maker_kernel(n, r1, r2) {
46 Ok(p) => PropagatingEffect::pure(p),
47 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
48 }
49}
50
51pub fn jones_rotation(
56 jones_matrix: &CausalTensor<Complex<f64>>,
57 angle: RayAngle,
58) -> PropagatingEffect<CausalTensor<Complex<f64>>> {
59 match polarization::jones_rotation_kernel(jones_matrix, angle) {
60 Ok(m) => PropagatingEffect::pure(m),
61 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
62 }
63}
64
65pub fn stokes_from_jones(jones: &JonesVector) -> PropagatingEffect<StokesVector> {
66 match polarization::stokes_from_jones_kernel(jones) {
67 Ok(s) => PropagatingEffect::pure(s),
68 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
69 }
70}
71
72pub fn degree_of_polarization(stokes: &StokesVector) -> PropagatingEffect<Ratio> {
73 match polarization::degree_of_polarization_kernel(stokes) {
74 Ok(r) => PropagatingEffect::pure(r),
75 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
76 }
77}
78
79pub fn gaussian_q_propagation(
84 q_in: ComplexBeamParameter,
85 matrix: &AbcdMatrix,
86) -> PropagatingEffect<ComplexBeamParameter> {
87 match beam::gaussian_q_propagation_kernel(q_in, matrix) {
88 Ok(q) => PropagatingEffect::pure(q),
89 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
90 }
91}
92
93pub fn beam_spot_size(
94 q: ComplexBeamParameter,
95 wavelength: Wavelength,
96) -> PropagatingEffect<Length> {
97 match beam::beam_spot_size_kernel(q, wavelength) {
98 Ok(w) => PropagatingEffect::pure(w),
99 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
100 }
101}
102
103pub fn single_slit_irradiance(
108 i0: f64,
109 slit_width: Length,
110 theta: RayAngle,
111 wavelength: Wavelength,
112) -> PropagatingEffect<f64> {
113 match diffraction::single_slit_irradiance_kernel(i0, slit_width, theta, wavelength) {
114 Ok(i) => PropagatingEffect::pure(i),
115 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
116 }
117}
118
119pub fn grating_equation(
120 pitch: Length,
121 order: i32,
122 incidence: RayAngle,
123 wavelength: Wavelength,
124) -> PropagatingEffect<RayAngle> {
125 match diffraction::grating_equation_kernel(pitch, order, incidence, wavelength) {
126 Ok(angle) => PropagatingEffect::pure(angle),
127 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
128 }
129}