RP Photonics logo
RP Photonics
Modeling & Design Software
Technical consulting services on lasers, nonlinear optics, fiber optics etc.
Profit from the knowledge and experience of a top expert!
Powerful simulation and design software.
Make computer models in order to get a comprehensive understanding of your devices!
Success comes from understanding – be it in science or in industrial development.
The famous Encyclopedia of Laser Physics and Technology – available online for free!
The ideal place for finding suppliers for many photonics products.
Advertisers: Make sure to have your products displayed here!
powerful tools for efficient laser development and laser science
This page gives you an overview on our software products.
RP Fiber Calculator is a convenient tool for calculations on optical fibers.
RP Fiber Power is an extremely flexible tool for designing and optimizing fiber devices.
RP Resonator is a particularly flexible tool for laser resonator design.
RP ProPulse can simulate the pulse evolution e.g. in mode-locked lasers and sync-pumped OPOs.
RP Coating is a particularly flexible design tool for dielectric multilayer systems.
RP Q-switch can simulate the power evolution in Q-switched lasers.
Most of our software products support a powerful script language, which gives you an extraordinary degree of flexibility.
Here you learn about software license conditions, updates and upgrades, etc.
Competent technical support is a key quality associated with software from RP Photonics.
RP Photonics has distributors in various countries.
The RP Photonics Software News keep you updated on our developments and give the users additional interesting hints.
Here you can make inquiries e.g. concerning technical details, prices and quotations.
en | de

RP Coating – Advanced Software for
Designing Optical Multilayer Structures

Demo File: Fitting Layer Details to a Measured Reflection Spectrum

When a thin-film structure is grown, there are often uncertainties both concerning the layer thickness values and their refractive index. The latter is influenced by the packing density of the material, which depends on the detailed growth conditions. A measured reflectivity spectrum can be used to retrieve information on the layer details and thus to calibrate the coating machine.

In this example, we assume that as a test structure, a simple Bragg mirror with 6 layer pairs of HfO2 / SiO2 has been grown on a BK7 substrate, nominally with λ/4 layers at 800 nm:

d_units: nm
l_units: nm
N := 6  { number of layer pairs }
; Initial (nominal) layer parameters:
d_HfO2 := 800 / 4 / n_HfO2_Jerman(800 nm,7)
x_HfO2 := 7
d_SiO2 := 800 / 4 / n_SiO2_Jerman(800 nm,1.8)
x_SiO2 := 1.6
beam from superstrate
substrate: BK7
for j := 1 to N do
* HfO2_Jerman, x = x_HfO2, d = d_HfO2
* SiO2_Jerman, x = x_SiO2, d = d_SiO2
superstrate: air

We use refractive index data from M. Jerman et al., Appl. Opt. 44 (15), 3006 (2005), which depend on the packing density in units of g/cm3. (These index data are provided with the software.) The precise thickness values and packing densities made with the coating machine are not yet known and should be retrieved from the measured reflectivity data.

The reflection spectrum has been measured and stored in a text file named “Reflectivity.dat”, containing a wavelength and the corresponding reflectivity (in percent) in each line. We read that file, such that its x/y data points are stored (by default as row 1):

include "Reflectivity.dat"

Now we can do the fit. As the fitting variables, we use the thickness values and packing densities, assuming that these parameters are identical for all layer pairs.

We first need to define a function which sets the coating structure according to these fit parameters. Then we can call the fit command and subsequently display the obtained fit parameters:

set_layer_params(d_HfO2, x_HfO2, d_SiO2, x_SiO2) := 
  for j := 1 to N do
    set_d(2 * j - 1, d_HfO2);
    set_d(2 * j    , d_SiO2);
    set_x(2 * j - 1, x_HfO2);
    set_x(2 * j    , x_SiO2);
fit 100 * R(x) to row 1
  with (d_HfO2, x_HfO2, d_SiO2, x_SiO2),
  init set_layer_params(d_HfO2, x_HfO2, d_SiO2, x_SiO2)
show "d_HfO2:  ", d_HfO2:f1:"nm"
show "d_SiO2:  ", d_SiO2:f1:"nm"
show "x_HfO2:  ", x_HfO2:f2:"g / cm^3"
show "x_SiO2:  ", x_SiO2:f2:"g / cm^3"

Finally, we display the reflectivity profile:

diagram 1:
"Reflectivity Profile"
x: 400, 1200
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
m: points("r")  { show the data points as rectangles }
f: 100 * R(x), color = red, width = 3
["d_HfO2:  ", d_HfO2:f1:"nm"], 120, 150
["d_SiO2:  ", d_SiO2:f1:"nm"], 120, 200
["x_HfO2:  ", x_HfO2:f2:"g / cm^3"], 120, 250
["x_SiO2:  ", x_SiO2:f2:"g / cm^3"], 120, 300
fitted reflectivity profile of the test structure

For comparison, see the spectrum without fitting:

reflectivity profile of the test structure without fitting

This example shows that RP Coating makes it quite easy to retrieve layer data from measured spectra. Its high flexibility would allow various further degrees of sophistication:

  • If the spectrometer delivers the data not as comma-separated values, but in some other (possibly even binary) format, one could also read such files with a little script programming.
  • One could export obtained fitting data in any format, e.g. for direct control of coating machine or for documentation purposes.
  • If in-situ reflectivity measurements are made on the heated substrate, one could automatically apply temperature corrections.
  • One could do such measurements and fitting on a partly grown structure and then start a numerical optimization for the remaining layers to be grown. Such growth error control can be implemented with a high degree of automation.