In [ ]:
import matplotlib.pyplot as plt
import numpy as np
from solcore.absorption_calculator import calculate_ellipsometry
from solcore import material, si
from solcore.structure import Structure, Layer

First we defined a couple of materials, for example, GaAs and AlGAs

In [ ]:
GaAs = material('GaAs')(T=300)
AlGaAs = material('AlGaAs')(T=300, Al=0.3)

Now, let's build the structure. We don't add a substrate and assume that there is an infinitely thick absorbing
material in the back.

In [ ]:
my_structure = Structure([
    Layer(si(40, 'nm'), material=AlGaAs),
    Layer(si(3000, 'nm'), material=GaAs),

We want to calculate the ellipsometry of this structure as a function of the wavelength for a few angles

In [ ]:
wavelength = np.linspace(400, 1000, 200)
angles = [65, 70, 75]
In [ ]:
out = calculate_ellipsometry(my_structure, wavelength, angle=angles)

This results must be taken with care. As the ellipsometry routine can only deal with coherent light, there might be
strange oscillations related with intereference in thick layers, something that should not happen.
Setting no_back_reflection=True (the default) should take care of most of this effects, but might add other unexpected

In [ ]:
fig, ax1 = plt.subplots(1, 1)
ax2 = ax1.twinx()

ax1.plot(wavelength, out['psi'][:, 0], 'b', label=r'$\Psi$')
ax2.plot(wavelength, out['Delta'][:, 0], 'r', label=r'$\Delta$')
for i in range(1, len(angles)):
    ax1.plot(wavelength, out['psi'][:, i], 'b')
    ax2.plot(wavelength, out['Delta'][:, i], 'r')

ax1.set_xlabel("Wavelength (nm)")
ax1.set_ylabel(r'$\Psi$ (º)')
ax2.set_ylabel(r'$\Delta$ (º)')

ax1.legend(loc="upper left")
ax2.legend(loc="upper right")