-
Notifications
You must be signed in to change notification settings - Fork 5
Fit single layer ellipsometry 2 (with BlackBoxOptim)
Leandro Acquaroli edited this page Nov 28, 2019
·
4 revisions
In this example, we will fit the ellipsometry spectra of a hafnium oxide thin film coating atop a fused silica UV graded glass substrate, using the BlackBoxOptim option. The light hits the air medium, then the oxide film and finally passes through the substrate.
We will use the Tauc-Lorentz parametrization of the dielectric function in this case.
The complete code can be found here.
using Plots
pyplot()
using ThinFilmsTools# Wavelength range [nm]
λ = 200:2100
# Angle of incidence [degrees]
θ = [60.]
# Polarisation (1.0 = p, 0.0 = s, between 0.0 and 1.0 = average)
pol = 0.5
beam = PlaneWave(λ, θ; p=pol)# Refractive indices of incident (0) and substrate (2)
incident = RIdb.air(beam.λ)
emergent = RIdb.fused_silica_uv(beam.λ)
# Define the RI model to use
layers = [
LayerTMMO(incident),
ModelFit(:tauclorentz),
LayerTMMO(emergent),
]Ψexp, Δexp = SpectraDB.hafnia_ellips(beam.λ)
# Spectrum type: ellipsometry with the input experimental spectra
spectype = Ellipsometry([Ψexp Δexp])seed = [vcat(100.0, # thickness
[3.0, 5.5,
545, 6.2, 13.2], # osc 1
),
]
# Boundaries
lb = 0.01.*seed
ub = 2.0.*seed
# Thickness bounds
lb[1][1] = 80
ub[1][1] = 200
# Egap bounds
lb[1][3] = 4.0
ub[1][3] = 6.0
solOptim = fit_tmm_optics(
spectype, seed, beam, layers;
alg=:BBO,
SearchRange=Utils.unfold_bnd(lb,ub),
)
plot(FitSpectrumEllip(),
solOptim.beam.λ, solOptim.spectrumExp, solOptim.spectrumFit,
xaxis=("Wavelength [nm]"),
)
gui()