glass

iadpython.fresnel.glass(n_i, n_g, n_t, nu_i)[source]

Reflection from a glass slide.

‘glass’ calculates the total specular reflection (i.e., including multiple internal reflections) based on the indices of refraction of the incident medium ‘n_i’, the glass ‘n_g’, and medium into which the light is transmitted ‘n_t’ for light incident at an angle from the normal having cosine ‘nu_i’.

In many tissue optics problems, the sample is constrained by a piece of glass creating an air-glass-tissue sequence. The adding-doubling formalism can calculate the effect that the layer of glass will have on the radiative transport properties by including a layer for the glass-tissue interface and a layer for the air-glass interface. However, it is simpler to find net effect of the glass slide and include only one layer for the glass boundary.

The first time I implemented this routine, I did not include multiple internal reflections. After running test cases, it soon became apparent that the percentage errors were way too big for media with little absorption and scattering. It is not hard to find the result for the reflection from a non-absorbing glass layer (equation A2.21 in my dissertation) in which multiple reflections are properly accounted for

\[r_g = \frac{r_1 + r_2 - 2 r_1 r_2 }{ 1 - r_1 r_2}\]

Here \(r_1\) is the reflection at the air-glass interface and \(r_2\) is the reflection at the glass-sample interface.

There is one pitfall in calculating r_g. When the angle of incidence exceeds the critical angle then the formula above causes division by zero. If this is the case then r_1 = 1 and can easily be tested for.

To eliminate unnecessary computation, I check to make sure that it really is necessary to call the ‘Fresnel’ routine twice. It is noteworthy that the formula for r_g works correctly if the the first boundary is not totally reflecting but the second one is. Note that nu_g gets calculated twice (once in the first call to ‘Fresnel’ and once directly).