diff --git a/optika/sensors/_materials/_materials.py b/optika/sensors/_materials/_materials.py index 9b56eb9e..a6d1b12e 100644 --- a/optika/sensors/_materials/_materials.py +++ b/optika/sensors/_materials/_materials.py @@ -126,29 +126,40 @@ 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, ) + absorption = chemical_substrate.absorption(wavelength) + + decay = np.exp(-absorption * thickness_substrate) + + transmissivity_total = transmissivity_oxide * decay + + result = transmissivity_oxide - transmissivity_total + return np.real(result)