From ef81bd46ac63c8ed59c15035132cae36b66d0684 Mon Sep 17 00:00:00 2001 From: Roy Smart Date: Sat, 20 Sep 2025 11:22:34 -0600 Subject: [PATCH 1/2] Modified `optika.sensors.absorbance()` to _not_ consider reflections from the non-illuminated side for performance reasons. --- optika/sensors/_materials/_materials.py | 47 ++++++++++++++++--------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/optika/sensors/_materials/_materials.py b/optika/sensors/_materials/_materials.py index 9b56eb9e..929f4b6f 100644 --- a/optika/sensors/_materials/_materials.py +++ b/optika/sensors/_materials/_materials.py @@ -126,29 +126,44 @@ def absorbance( if not isinstance(chemical_substrate, optika.chemicals.AbstractChemical): chemical_substrate = optika.chemicals.Chemical(chemical_substrate) - result = optika.materials.layer_absorbance( - index=1, + layer_oxide = optika.materials.Layer( + chemical=chemical_oxide, + thickness=thickness_oxide, + interface=optika.materials.profiles.ErfInterfaceProfile( + width=roughness_oxide, + ), + ) + + layer_substrate = optika.materials.Layer( + chemical=chemical_substrate, + thickness=thickness_substrate, + interface=optika.materials.profiles.ErfInterfaceProfile( + width=roughness_substrate, + ), + ) + + _, transmissivity_oxide = optika.materials.multilayer_efficiency( wavelength=wavelength, direction=direction, n=n, layers=[ - optika.materials.Layer( - chemical=chemical_oxide, - thickness=thickness_oxide, - interface=optika.materials.profiles.ErfInterfaceProfile( - width=roughness_oxide, - ), - ), - optika.materials.Layer( - chemical=chemical_substrate, - thickness=thickness_substrate, - interface=optika.materials.profiles.ErfInterfaceProfile( - width=roughness_substrate, - ), - ), + layer_oxide, + ], + substrate=layer_substrate, + ) + + _, transmissivity_total = optika.materials.multilayer_efficiency( + wavelength=wavelength, + direction=direction, + n=n, + layers=[ + layer_oxide, + layer_substrate, ], ) + result = transmissivity_oxide - transmissivity_total + return np.real(result) From 65fd04eefbfd71c503a5a380092fd430805c8b20 Mon Sep 17 00:00:00 2001 From: Roy Smart Date: Sat, 20 Sep 2025 20:50:48 -0600 Subject: [PATCH 2/2] further improvements --- optika/sensors/_materials/_materials.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/optika/sensors/_materials/_materials.py b/optika/sensors/_materials/_materials.py index 929f4b6f..a6d1b12e 100644 --- a/optika/sensors/_materials/_materials.py +++ b/optika/sensors/_materials/_materials.py @@ -152,15 +152,11 @@ def absorbance( substrate=layer_substrate, ) - _, transmissivity_total = optika.materials.multilayer_efficiency( - wavelength=wavelength, - direction=direction, - n=n, - layers=[ - layer_oxide, - layer_substrate, - ], - ) + absorption = chemical_substrate.absorption(wavelength) + + decay = np.exp(-absorption * thickness_substrate) + + transmissivity_total = transmissivity_oxide * decay result = transmissivity_oxide - transmissivity_total