A GPL Optical simulation program for mixed coherent / incoherent multilayer systems

Features and capabilities:

  • Can treat multilayers with any number of coherent and incoherent layer in any position and for any Incidence angle using a Generalized Scattering Matrix Method
  • Can compute total light Reflectance, Transmittance, internal Absorption and internal Energy Flux
  • Can do thickness determination by fitting of experimental R and T spectra
  • EMA (Effective Medium Approximation) for mixed phase materials is integrated in the structure editor
  • Is a Python cross-platform software released under the GPL license

Whenever refering to "Optical", please cite a reference to the following publication: E.Centurioni, "Generalized matrix method for calculation of internal light energy flux in mixed coherent and incoherent multilayers", Applied Optics, Vol. 44, No. 35 (2005), pp 7532-7539.

Download source code from GitHub

Old version for Python 2 can be found here

Install Optical on Windows

Download and install Python. Please note: during installation select the option "Add python to PATH".

Optical should work with any version of Python 3. However, if you have problems with the last version of python, you can use this version python-3.10.8-amd64.exe.zip, that has been succesfully tested.

Open the command prompt and digit "pip install matplotlib wxpython msvc-runtime"

Download Optical as zip file from GitHub, uncompress and double-click on the file "optical"

Here is a video showing how to to install optical.

Tutorial 1

Tutorial 2

Short Tutorial

We assume the reader has some basic knowledge of optics and it is confident with terms like Reflectance, Transmittance, wavelength etc.


Optical is a software that can compute theoretical Reflectance (R ), Transmittance (T ) and internal light energy flux of a multilayer. A multilayer is a structure composed of several isotropic layers in intimate contact. A mirror is a simple example of multilayer: we have a glass (let's say 1 mm thick) then we have some metal on one side of the glass (let's say aluminium, 500 nm thick) for a total of two layers. We will use this multilayer to show how Optical works.

Start Optical

O.K., first of all I assume you have already launched Optical (see the Optical web page for instruction), you should see the following


Defining a multilayer

Let's create a new empty Multilayer clicking on File ... New Multilayer. The button "Edit M" is active now, we can edit the multilayer clicking on it, the following window should appear


First of all we note that actually two layers already exist, one is the "TopMedium" and the other is the "BottomMedium". These two layers represent the media on the top and on the bottom of the multilayer. These media are usually air, but can be any other medium (the top must be transparent). The light source is assumed to be in the TopMedium. To add a new layer in between first select the TopMedium then click "Insert". You can verify that now there are 3 layers, a new layer named "Untitled" is now in position 1. You can give to the layer the name you want (Glass), you must define the thickness (1 mm = 1E7 A), you must chose if you want treat the layer as coherent or as incoherent (the glass is very thick, so choose incoherent) and finally you must choose an appropriate index file to represent the material (Click on Browse then choose "glass.in3"). The index file is the file containing the index of refraction of a specific material. Next we have to insert the aluminium layer. Select the glass layer and then click on insert button (the insert button insert a new layer at the bottom of selected layer). Use these values for aluminium: thickness = 5000 A, film is coherent, index file = aluminum.in3. If you like you can give a name to the multilayer (Mirror). Click on button OK to confirm, you should come back to the first windom.

Compute R and T spectra

To compute R and T spectra of your multilayer you can choose the incidence angle (on the bottom-right) then click on the button "Compute", you should get a graph as follows.


Every time you compute R and T these date are copied in a text file named "RT.dat". Of course you can save your multilayer then reload it later. If you like more or less points to be computed you can configure this in the file "settings.txt".

Compute Internal Light Absorption spectra

Let's say we want to know the spectral distribution of light absorbed in the glass. Click on the button "E Flux", the following window should appear


select the layer you want (glass) and click on button compute under "Layer absorption", you should get the following result


where the black line represent the fraction of light absorbed in the glass. Every time you compute light absorption these data are copied in a text file named "A.dat".

Compute Internal Light Energy Flux spectra

Let's say we want to know the spectral distribution of light energy flux in the aluminum layer at a depth of 50 A. Click on the button "E Flux", select the layer "aluminium", under "Energy Flux" insert the depth (50) and click on the associated compute button. Every time you compute energy flux these data are copied in a text file named "Flux.dat".

Create a new index file

An index file is a simple text file with extension *.in3 containig information about n e k of the material. You can have a look to the existing index files after software installation in directory /n. To show the structure we use as example the index file "air.in3"

"Air" first line is free, for comments and information

100 200000 range of wavelenght, min max in angstrom

2 number of data point for n, here we have 2 points

100 1 first value for n, wavelength is 100 n is 1

200000 1 second (and last) value for n, wavelength is 200000 n is 1

2 number of data point for k, here we have 2 points

100 0 first value for k, wavelength is 100 k is 0

200000 0 second (and last) value for k, wavelength is 200000 k is 0